From 8024edeadf751fde53d7e75192f027a7e949867d Mon Sep 17 00:00:00 2001 From: Jason Turner Date: Sun, 20 Sep 2015 15:46:05 -0600 Subject: [PATCH] Fix some JSON parsing bug with short strings --- include/chaiscript/utility/json.hpp | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/include/chaiscript/utility/json.hpp b/include/chaiscript/utility/json.hpp index dbdf886..9b1c659 100644 --- a/include/chaiscript/utility/json.hpp +++ b/include/chaiscript/utility/json.hpp @@ -457,7 +457,7 @@ namespace { ++offset; return Object; } - for (;;) { + for (;offset= '0' && c <= '9') ) val += c; @@ -566,7 +566,7 @@ namespace { else break; } - if( c == 'E' || c == 'e' ) { + if( offset < str.size() && (c == 'E' || c == 'e' )) { c = str[ offset++ ]; if( c == '-' ){ ++offset; exp_str += '-';} for (;;) { @@ -582,7 +582,7 @@ namespace { } exp = std::stol( exp_str ); } - else if( !isspace( c ) && c != ',' && c != ']' && c != '}' ) { + else if( offset < str.size() && (!isspace( c ) && c != ',' && c != ']' && c != '}' )) { std::cerr << "ERROR: Number: unexpected character '" << c << "'\n"; return JSON::Make( JSON::Class::Null ); } @@ -601,15 +601,16 @@ namespace { JSON parse_bool( const string &str, size_t &offset ) { JSON Bool; - if( str.substr( offset, 4 ) == "true" ) + if( str.substr( offset, 4 ) == "true" ) { + offset += 4; Bool = true; - else if( str.substr( offset, 5 ) == "false" ) + } else if( str.substr( offset, 5 ) == "false" ) { + offset += 5; Bool = false; - else { + } else { std::cerr << "ERROR: Bool: Expected 'true' or 'false', found '" << str.substr( offset, 5 ) << "'\n"; return JSON::Make( JSON::Class::Null ); } - offset += (Bool.ToBool() ? 4 : 5); return Bool; }