1
1
forked from 0ad/0ad

Fix CStr8 serialisation bug.

This was SVN commit r7651.
This commit is contained in:
Ykkrosh 2010-06-30 21:24:14 +00:00
parent c5d204c7ff
commit 8268d8ad0b
2 changed files with 14 additions and 4 deletions

View File

@ -505,21 +505,26 @@ size_t CStr::GetSerializedLength() const
u8* CStr8::Serialize(u8* buffer) const u8* CStr8::Serialize(u8* buffer) const
{ {
size_t len = length(); size_t len = length();
Serialize_int_4(buffer, (u32)len);
size_t i = 0; size_t i = 0;
for (i = 0; i < len; i++) for (i = 0; i < len; i++)
buffer[i] = (*this)[i]; buffer[i] = (*this)[i];
return buffer+len; return buffer + len;
} }
const u8* CStr8::Deserialize(const u8* buffer, const u8* bufferend) const u8* CStr8::Deserialize(const u8* buffer, const u8* bufferend)
{ {
*this = std::string(buffer, bufferend); u32 len;
return bufferend; Deserialize_int_4(buffer, len);
if (buffer + len > bufferend)
return NULL;
*this = std::string(buffer, buffer + len);
return buffer + len;
} }
size_t CStr::GetSerializedLength() const size_t CStr::GetSerializedLength() const
{ {
return length(); return length() + 4;
} }
#endif // _UNICODE #endif // _UNICODE

View File

@ -89,6 +89,11 @@ public:
TS_ASSERT_EQUALS(str2.length(), str.length()); TS_ASSERT_EQUALS(str2.length(), str.length());
TS_ASSERT_EQUALS(str2, str); TS_ASSERT_EQUALS(str2, str);
T str3;
TS_ASSERT_EQUALS(str3.Deserialize(buf, buf+len+256) - (buf+len), 0);
TS_ASSERT_EQUALS(str3.length(), str.length());
TS_ASSERT_EQUALS(str3, str);
delete[] buf; delete[] buf;
} }