Fix off by 1 error in JsonParser::parseUpdate() return value

pull/25/merge
Tatsuhiro Tsujikawa 2012-07-24 23:47:18 +09:00
parent 2684db766d
commit 9620bb0a6d
2 changed files with 10 additions and 5 deletions

View File

@ -107,7 +107,7 @@ ssize_t JsonParser::parseUpdate(const char* data, size_t size)
} else if(currentState_ == JSON_ERROR) {
return lastError_;
}
for(i = 0; i < size; ++i) {
for(i = 0; i < size && currentState_ != JSON_FINISH; ++i) {
char c = data[i];
switch(currentState_) {
case JSON_ARRAY:
@ -499,9 +499,6 @@ ssize_t JsonParser::parseUpdate(const char* data, size_t size)
break;
}
}
if(currentState_ == JSON_FINISH) {
break;
}
}
return i;
}

View File

@ -220,7 +220,15 @@ void ValueBaseJsonParserTest::testParseUpdate()
const String* s = downcast<String>(list->get(0));
CPPUNIT_ASSERT_EQUAL(std::string("foo$b¢€baz"), s->s());
}
{
// ignore garbage at the end of the input.
std::string src = "[]trail";
SharedHandle<ValueBase> r = parser.parseFinal(src.c_str(), src.size(),
error);
const List* list = downcast<List>(r);
CPPUNIT_ASSERT(list);
CPPUNIT_ASSERT_EQUAL((ssize_t)2, error);
}
}
namespace {