Пример #1
0
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);
}
Пример #2
0
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);
}
Пример #3
0
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();
}
Пример #4
0
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);
}