diff --git a/src/framework/core/binarytree.cpp b/src/framework/core/binarytree.cpp index ea5a96bb..c4b09f8f 100644 --- a/src/framework/core/binarytree.cpp +++ b/src/framework/core/binarytree.cpp @@ -163,6 +163,17 @@ std::string BinaryTree::getString() return ret; } +std::string BinaryTree::getString(uint16 len) +{ + unserialize(); + if(m_pos+len > m_buffer.size()) + stdext::throw_exception("BinaryTree: getString failed: string length exceeded buffer size."); + + std::string ret((char *)&m_buffer[m_pos], len); + m_pos += len; + return ret; +} + Position BinaryTree::getPosition() { Position ret; diff --git a/src/framework/core/binarytree.h b/src/framework/core/binarytree.h index 7adabf16..423df6aa 100644 --- a/src/framework/core/binarytree.h +++ b/src/framework/core/binarytree.h @@ -49,6 +49,7 @@ public: uint32 getU32(); uint64 getU64(); std::string getString(); + std::string getString(uint16 len); Position getPosition(); Point getPoint(); diff --git a/src/otclient/itemtype.cpp b/src/otclient/itemtype.cpp index 4bb2feb4..e568c395 100644 --- a/src/otclient/itemtype.cpp +++ b/src/otclient/itemtype.cpp @@ -64,7 +64,7 @@ void ItemType::unserialize(const BinaryTreePtr& node) break; } case ItemTypeAttrName: { - setName(node->getString()); + setName(node->getString(len)); break; } case ItemTypeAttrDesc: {