diff options
Diffstat (limited to 'ext/json/JSON_parser.c')
-rw-r--r-- | ext/json/JSON_parser.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/ext/json/JSON_parser.c b/ext/json/JSON_parser.c index dce42d37ee..0fbdb1add1 100644 --- a/ext/json/JSON_parser.c +++ b/ext/json/JSON_parser.c @@ -169,7 +169,7 @@ static const int ascii_class[128] = { accepted if the end of the text is in state 9 and mode is MODE_DONE. */ static const int state_transition_table[30][31] = { -/* 0*/ { 0, 0,-8,-1,-6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}, +/* 0*/ { 0, 0,-8,-1,-6,-1,-1,-1, 3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}, /* 1*/ { 1, 1,-1,-9,-1,-1,-1,-1, 3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}, /* 2*/ { 2, 2,-8,-1,-6,-5,-1,-1, 3,-1,-1,-1,20,-1,21,22,-1,-1,-1,-1,-1,13,-1,17,-1,-1,10,-1,-1,-1,-1}, /* 3*/ { 3,-1, 3, 3, 3, 3, 3, 3,-4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3}, @@ -577,6 +577,14 @@ JSON_parser(zval *z, unsigned short p[], int length, int assoc TSRMLS_DC) case MODE_OBJECT: the_state = 9; break; + case MODE_DONE: + if (type == IS_STRING) { + smart_str_0(&buf); + ZVAL_STRINGL(z, buf.c, buf.len, 1); + the_state = 9; + break; + } + /* fall through if not IS_STRING */ default: FREE_BUFFERS(); return false; |