From 1714d379d93a02a00c599096bf60ff915a47c21e Mon Sep 17 00:00:00 2001 From: Andrei Zmievski Date: Mon, 16 Apr 2007 16:52:20 +0000 Subject: [PATCH] MFB (handling of control characters) --- ext/json/JSON_parser.c | 10 +++++++++- ext/json/json.c | 2 +- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/ext/json/JSON_parser.c b/ext/json/JSON_parser.c index d8d715c652..4b88b9fbd5 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_UTF8_STRINGL(z, buf.c, buf.len, ZSTR_DUPLICATE); + the_state = 9; + break; + } + /* fall through if not IS_STRING */ default: FREE_BUFFERS(); return false; diff --git a/ext/json/json.c b/ext/json/json.c index c262511215..cb6f947667 100644 --- a/ext/json/json.c +++ b/ext/json/json.c @@ -307,7 +307,7 @@ static void json_escape_string(smart_str *buf, zstr s, int len, zend_uchar type) break; default: { - if (us < ' ' || (us & 127) == us) + if (us >= ' ' && (us & 127) == us) { smart_str_appendc(buf, (unsigned char) us); } -- 2.50.1