void CStdDeserializer::ReadStringUTF16(const char* name, utf16string& str) { uint32_t len; NumberU32_Unbounded("string length", len); RequireBytesInStream(len*2); str.resize(len); Get(name, (u8*)str.data(), len*2); }
void CStdDeserializer::ReadStringLatin1(const char* name, std::vector<JS::Latin1Char>& str) { uint32_t len; NumberU32_Unbounded("string length", len); RequireBytesInStream(len); str.resize(len); Get(name, (u8*)str.data(), len); }
void IDeserializer::StringASCII(const char* name, std::string& out, uint32_t minlength, uint32_t maxlength) { uint32_t len; NumberU32("string length", len, minlength, maxlength); RequireBytesInStream(len); out.resize(len); Get(name, (u8*)out.data(), len); for (size_t i = 0; i < out.length(); ++i) if (out[i] == 0 || (unsigned char)out[i] >= 128) throw PSERROR_Deserialize_InvalidCharInString(); }
void IDeserializer::String(const char* name, std::wstring& out, uint32_t minlength, uint32_t maxlength) { std::string str; uint32_t len; NumberU32_Unbounded("string length", len); RequireBytesInStream(len); str.resize(len); Get(name, (u8*)str.data(), len); Status err; out = wstring_from_utf8(str, &err); if (err) throw PSERROR_Deserialize_InvalidCharInString(); if (!(minlength <= out.length() && out.length() <= maxlength)) throw PSERROR_Deserialize_OutOfBounds(name); }