mirror of
https://gitlab.isc.org/isc-projects/kea
synced 2025-08-30 13:37:55 +00:00
[1626] check string termination and whitespace fix
whitespace 'outside' of elements is skipped, now including \r and \b
This commit is contained in:
parent
9a56eb7ebb
commit
318ecd4e65
@ -354,6 +354,9 @@ str_from_stringstream(std::istream &in, const std::string& file, const int line,
|
||||
c = in.get();
|
||||
++pos;
|
||||
}
|
||||
if (c == EOF) {
|
||||
throwJSONError("Unterminated string", file, line, pos);
|
||||
}
|
||||
return (ss.str());
|
||||
}
|
||||
|
||||
@ -458,7 +461,7 @@ from_stringstream_list(std::istream &in, const std::string& file, int& line,
|
||||
ElementPtr list = Element::createList();
|
||||
ConstElementPtr cur_list_element;
|
||||
|
||||
skip_chars(in, " \t\n", line, pos);
|
||||
skip_chars(in, " \t\n\r\b", line, pos);
|
||||
while (c != EOF && c != ']') {
|
||||
if (in.peek() != ']') {
|
||||
cur_list_element = Element::fromJSON(in, file, line, pos);
|
||||
@ -476,7 +479,7 @@ from_stringstream_map(std::istream &in, const std::string& file, int& line,
|
||||
int& pos)
|
||||
{
|
||||
ElementPtr map = Element::createMap();
|
||||
skip_chars(in, " \t\n", line, pos);
|
||||
skip_chars(in, " \t\n\r\b", line, pos);
|
||||
char c = in.peek();
|
||||
if (c == EOF) {
|
||||
throwJSONError(std::string("Unterminated map, <string> or } expected"), file, line, pos);
|
||||
@ -574,7 +577,7 @@ Element::fromJSON(std::istream &in, const std::string& file, int& line,
|
||||
char c = 0;
|
||||
ElementPtr element;
|
||||
bool el_read = false;
|
||||
skip_chars(in, " \n\t", line, pos);
|
||||
skip_chars(in, " \n\t\r\b", line, pos);
|
||||
while (c != EOF && !el_read) {
|
||||
c = in.get();
|
||||
pos++;
|
||||
|
@ -338,7 +338,11 @@ TEST(Element, escape) {
|
||||
// Bad string
|
||||
EXPECT_THROW(Element::fromJSON("hello\"foobar\""), JSONError);
|
||||
// A whitespace test
|
||||
EXPECT_NO_THROW(Element::fromJSON(" \n \r \t \n \n \t"));
|
||||
EXPECT_NO_THROW(Element::fromJSON("\" \n \r \t \n \n \t\""));
|
||||
// Whitespace outside of json element
|
||||
EXPECT_NO_THROW(Element::fromJSON(" \n \t \r \b \"\" \n \t \r \b"));
|
||||
EXPECT_NO_THROW(Element::fromJSON("{ \n \r \t \b }"));
|
||||
EXPECT_NO_THROW(Element::fromJSON("[ \n \r \t \b ]"));
|
||||
}
|
||||
|
||||
TEST(Element, ListElement) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user