"expected a UBJSON string; last byte: 0x"+ss.str()));
autolast_token=get_token_string();
returnsax->parse_error(chars_read,last_token,parse_error::create(113,chars_read,"expected a UBJSON string; last byte: 0x"+last_token));
}
}
/*!
@param[out] result determined size
@return whether size determination completed
*/
boolget_ubjson_size_value(std::size_t&result)
{
switch(get_ignore_noop())
{
case'U':
{
uint8_tnumber;
if(JSON_UNLIKELY(notget_number(number)))
{
returnfalse;
}
result=static_cast<std::size_t>(number);
returntrue;
}
case'i':
{
int8_tnumber;
if(JSON_UNLIKELY(notget_number(number)))
{
returnfalse;
}
result=static_cast<std::size_t>(number);
returntrue;
}
case'I':
{
int16_tnumber;
if(JSON_UNLIKELY(notget_number(number)))
{
returnfalse;
}
result=static_cast<std::size_t>(number);
returntrue;
}
case'l':
{
int32_tnumber;
if(JSON_UNLIKELY(notget_number(number)))
{
returnfalse;
}
result=static_cast<std::size_t>(number);
returntrue;
}
case'L':
{
int64_tnumber;
if(JSON_UNLIKELY(notget_number(number)))
{
returnfalse;
}
result=static_cast<std::size_t>(number);
returntrue;
}
default:
{
autolast_token=get_token_string();
returnsax->parse_error(chars_read,last_token,parse_error::create(113,chars_read,"byte after '#' must denote a number type; last byte: 0x"+last_token));
}
}
}
...
...
@@ -1146,84 +1375,127 @@ class binary_reader
In the optimized UBJSON format, a type and a size can be provided to allow
"expected '#' after UBJSON type information; last byte: 0x"+ss.str()));
if(JSON_UNLIKELY(notunexpect_eof()))
{
returnfalse;
}
autolast_token=get_token_string();
returnsax->parse_error(chars_read,last_token,parse_error::create(112,chars_read,"expected '#' after UBJSON type information; last byte: 0x"+last_token));
}
sz=parse_ubjson_internal();
returnget_ubjson_size_value(result.first);
}
elseif(current=='#')
{
sz=parse_ubjson_internal();
returnget_ubjson_size_value(result.first);
}
returnstd::make_pair(sz,tc);
returntrue;
}
BasicJsonTypeget_ubjson_value(constintprefix)
/*!
@param prefix the previously read or set type prefix
@return whether value creation completed
*/
boolget_ubjson_value(constintprefix)
{
switch(prefix)
{
casestd::char_traits<char>::eof():// EOF
JSON_THROW(parse_error::create(110,chars_read,"unexpected end of input"));
"byte after 'C' must be in range 0x00..0x7F; last byte: 0x"+ss.str()));
autolast_token=get_token_string();
returnsax->parse_error(chars_read,last_token,parse_error::create(113,chars_read,"byte after 'C' must be in range 0x00..0x7F; last byte: 0x"+last_token));
CHECK_THROWS_WITH(json::from_ubjson(v),"[json.exception.parse_error.112] parse error at 4: expected '#' after UBJSON type information; last byte: 0x02");
CHECK_THROWS_WITH(json::from_ubjson(v0),"[json.exception.parse_error.113] parse error at 3: byte after '#' must denote a number type; last byte: 0x54");
CHECK_THROWS_WITH(json::from_ubjson(vT),"[json.exception.parse_error.112] parse error at 4: expected '#' after UBJSON type information; last byte: 0x69");