Skip to content

Commit

Permalink
Heap buffer overflow in tokenadd() (fix #105)
Browse files Browse the repository at this point in the history
This was an off-by one: the NUL terminator byte was not allocated on
resize.  This was triggered by JSON-encoded numbers longer than 256
bytes.
  • Loading branch information
nicowilliams committed Oct 24, 2015
1 parent 2f79004 commit 8eb1367
Showing 1 changed file with 2 additions and 2 deletions.
4 changes: 2 additions & 2 deletions src/jv_parse.c
Original file line number Diff line number Diff line change
Expand Up @@ -383,7 +383,7 @@ static pfunc stream_token(struct jv_parser* p, char ch) {

static void tokenadd(struct jv_parser* p, char c) {
assert(p->tokenpos <= p->tokenlen);
if (p->tokenpos == p->tokenlen) {
if (p->tokenpos >= (p->tokenlen - 1)) {
p->tokenlen = p->tokenlen*2 + 256;
p->tokenbuf = jv_mem_realloc(p->tokenbuf, p->tokenlen);
}
Expand Down Expand Up @@ -485,7 +485,7 @@ static pfunc check_literal(struct jv_parser* p) {
TRY(value(p, v));
} else {
// FIXME: better parser
p->tokenbuf[p->tokenpos] = 0; // FIXME: invalid
p->tokenbuf[p->tokenpos] = 0;
char* end = 0;
double d = jvp_strtod(&p->dtoa, p->tokenbuf, &end);
if (end == 0 || *end != 0)
Expand Down

0 comments on commit 8eb1367

Please sign in to comment.