]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/itemstackmetadata.cpp
Remove obsolete eye_height related workaround
[dragonfireclient.git] / src / itemstackmetadata.cpp
index 4aa1a09030541e42ceb6800ac242f29799c16661..529e0149f94c54b6a88becd05fbb39addc2ecbec 100644 (file)
@@ -21,6 +21,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #include "itemstackmetadata.h"
 #include "util/serialize.h"
 #include "util/strfnd.h"
+#include <algorithm>
 
 #define DESERIALIZE_START '\x01'
 #define DESERIALIZE_KV_DELIM '\x02'
@@ -37,17 +38,29 @@ void ItemStackMetadata::clear()
        updateToolCapabilities();
 }
 
+static void sanitize_string(std::string &str)
+{
+       str.erase(std::remove(str.begin(), str.end(), DESERIALIZE_START), str.end());
+       str.erase(std::remove(str.begin(), str.end(), DESERIALIZE_KV_DELIM), str.end());
+       str.erase(std::remove(str.begin(), str.end(), DESERIALIZE_PAIR_DELIM), str.end());
+}
+
 bool ItemStackMetadata::setString(const std::string &name, const std::string &var)
 {
-       bool result = Metadata::setString(name, var);
-       if (name == TOOLCAP_KEY)
+       std::string clean_name = name;
+       std::string clean_var = var;
+       sanitize_string(clean_name);
+       sanitize_string(clean_var);
+
+       bool result = Metadata::setString(clean_name, clean_var);
+       if (clean_name == TOOLCAP_KEY)
                updateToolCapabilities();
        return result;
 }
 
 void ItemStackMetadata::serialize(std::ostream &os) const
 {
-       std::ostringstream os2;
+       std::ostringstream os2(std::ios_base::binary);
        os2 << DESERIALIZE_START;
        for (const auto &stringvar : m_stringvars) {
                if (!stringvar.first.empty() || !stringvar.second.empty())