diff options
author | Ondřej Surý <ondrej@sury.org> | 2013-06-07 15:35:18 +0200 |
---|---|---|
committer | Ondřej Surý <ondrej@sury.org> | 2013-06-07 15:35:18 +0200 |
commit | e2d52710fa3134e72662116b3b495f5a22cf9c72 (patch) | |
tree | a210e2fd4fba67ff082c01182ecd4dba64f5b89a | |
parent | 3b8d4fd352683ec96fb4d1990e27a43fc2edb99e (diff) | |
download | php-e2d52710fa3134e72662116b3b495f5a22cf9c72.tar.gz |
New upstream version 5.5.0~rc3+dfsgupstream/5.5.0_rc3+dfsg
58 files changed, 0 insertions, 6919 deletions
diff --git a/ext/json/CREDITS b/ext/json/CREDITS deleted file mode 100644 index 9bd7f44f2..000000000 --- a/ext/json/CREDITS +++ /dev/null @@ -1,2 +0,0 @@ -JSON -Omar Kilani, Scott MacVicar diff --git a/ext/json/JSON_parser.c b/ext/json/JSON_parser.c deleted file mode 100644 index dd832a7cb..000000000 --- a/ext/json/JSON_parser.c +++ /dev/null @@ -1,759 +0,0 @@ -/* JSON_parser.c */ - -/* 2005-12-30 */ - -/* -Copyright (c) 2005 JSON.org - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -The Software shall be used for Good, not Evil. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -*/ - -#include <stdio.h> -#include "JSON_parser.h" - -/* Windows defines IN for documentation */ -#undef IN - -#define true 1 -#define false 0 -#define __ -1 /* the universal error code */ - -/* - Characters are mapped into these 31 character classes. This allows for - a significant reduction in the size of the state transition table. -*/ - -enum classes { - C_SPACE, /* space */ - C_WHITE, /* other whitespace */ - C_LCURB, /* { */ - C_RCURB, /* } */ - C_LSQRB, /* [ */ - C_RSQRB, /* ] */ - C_COLON, /* : */ - C_COMMA, /* , */ - C_QUOTE, /* " */ - C_BACKS, /* \ */ - C_SLASH, /* / */ - C_PLUS, /* + */ - C_MINUS, /* - */ - C_POINT, /* . */ - C_ZERO , /* 0 */ - C_DIGIT, /* 123456789 */ - C_LOW_A, /* a */ - C_LOW_B, /* b */ - C_LOW_C, /* c */ - C_LOW_D, /* d */ - C_LOW_E, /* e */ - C_LOW_F, /* f */ - C_LOW_L, /* l */ - C_LOW_N, /* n */ - C_LOW_R, /* r */ - C_LOW_S, /* s */ - C_LOW_T, /* t */ - C_LOW_U, /* u */ - C_ABCDF, /* ABCDF */ - C_E, /* E */ - C_ETC, /* everything else */ - NR_CLASSES -}; - -static const int ascii_class[128] = { -/* - This array maps the 128 ASCII characters into character classes. - The remaining Unicode characters should be mapped to C_ETC. - Non-whitespace control characters are errors. -*/ - __, __, __, __, __, __, __, __, - __, C_WHITE, C_WHITE, __, __, C_WHITE, __, __, - __, __, __, __, __, __, __, __, - __, __, __, __, __, __, __, __, - - C_SPACE, C_ETC, C_QUOTE, C_ETC, C_ETC, C_ETC, C_ETC, C_ETC, - C_ETC, C_ETC, C_ETC, C_PLUS, C_COMMA, C_MINUS, C_POINT, C_SLASH, - C_ZERO, C_DIGIT, C_DIGIT, C_DIGIT, C_DIGIT, C_DIGIT, C_DIGIT, C_DIGIT, - C_DIGIT, C_DIGIT, C_COLON, C_ETC, C_ETC, C_ETC, C_ETC, C_ETC, - - C_ETC, C_ABCDF, C_ABCDF, C_ABCDF, C_ABCDF, C_E, C_ABCDF, C_ETC, - C_ETC, C_ETC, C_ETC, C_ETC, C_ETC, C_ETC, C_ETC, C_ETC, - C_ETC, C_ETC, C_ETC, C_ETC, C_ETC, C_ETC, C_ETC, C_ETC, - C_ETC, C_ETC, C_ETC, C_LSQRB, C_BACKS, C_RSQRB, C_ETC, C_ETC, - - C_ETC, C_LOW_A, C_LOW_B, C_LOW_C, C_LOW_D, C_LOW_E, C_LOW_F, C_ETC, - C_ETC, C_ETC, C_ETC, C_ETC, C_LOW_L, C_ETC, C_LOW_N, C_ETC, - C_ETC, C_ETC, C_LOW_R, C_LOW_S, C_LOW_T, C_LOW_U, C_ETC, C_ETC, - C_ETC, C_ETC, C_ETC, C_LCURB, C_ETC, C_RCURB, C_ETC, C_ETC -}; - - -/* - The state codes. -*/ -enum states { - GO, /* start */ - OK, /* ok */ - OB, /* object */ - KE, /* key */ - CO, /* colon */ - VA, /* value */ - AR, /* array */ - ST, /* string */ - ES, /* escape */ - U1, /* u1 */ - U2, /* u2 */ - U3, /* u3 */ - U4, /* u4 */ - MI, /* minus */ - ZE, /* zero */ - IN, /* integer */ - FR, /* fraction */ - E1, /* e */ - E2, /* ex */ - E3, /* exp */ - T1, /* tr */ - T2, /* tru */ - T3, /* true */ - F1, /* fa */ - F2, /* fal */ - F3, /* fals */ - F4, /* false */ - N1, /* nu */ - N2, /* nul */ - N3, /* null */ - NR_STATES -}; - - -static const int state_transition_table[NR_STATES][NR_CLASSES] = { -/* - The state transition table takes the current state and the current symbol, - and returns either a new state or an action. An action is represented as a - negative number. A JSON text is accepted if at the end of the text the - state is OK and if the mode is MODE_DONE. - - white 1-9 ABCDF etc - space | { } [ ] : , " \ / + - . 0 | a b c d e f l n r s t u | E |*/ -/*start GO*/ {GO,GO,-6,__,-5,__,__,__,ST,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__}, -/*ok OK*/ {OK,OK,__,-8,__,-7,__,-3,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__}, -/*object OB*/ {OB,OB,__,-9,__,__,__,__,ST,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__}, -/*key KE*/ {KE,KE,__,__,__,__,__,__,ST,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__}, -/*colon CO*/ {CO,CO,__,__,__,__,-2,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__}, -/*value VA*/ {VA,VA,-6,__,-5,__,__,__,ST,__,__,__,MI,__,ZE,IN,__,__,__,__,__,F1,__,N1,__,__,T1,__,__,__,__}, -/*array AR*/ {AR,AR,-6,__,-5,-7,__,__,ST,__,__,__,MI,__,ZE,IN,__,__,__,__,__,F1,__,N1,__,__,T1,__,__,__,__}, -/*string ST*/ {ST,__,ST,ST,ST,ST,ST,ST,-4,ES,ST,ST,ST,ST,ST,ST,ST,ST,ST,ST,ST,ST,ST,ST,ST,ST,ST,ST,ST,ST,ST}, -/*escape ES*/ {__,__,__,__,__,__,__,__,ST,ST,ST,__,__,__,__,__,__,ST,__,__,__,ST,__,ST,ST,__,ST,U1,__,__,__}, -/*u1 U1*/ {__,__,__,__,__,__,__,__,__,__,__,__,__,__,U2,U2,U2,U2,U2,U2,U2,U2,__,__,__,__,__,__,U2,U2,__}, -/*u2 U2*/ {__,__,__,__,__,__,__,__,__,__,__,__,__,__,U3,U3,U3,U3,U3,U3,U3,U3,__,__,__,__,__,__,U3,U3,__}, -/*u3 U3*/ {__,__,__,__,__,__,__,__,__,__,__,__,__,__,U4,U4,U4,U4,U4,U4,U4,U4,__,__,__,__,__,__,U4,U4,__}, -/*u4 U4*/ {__,__,__,__,__,__,__,__,__,__,__,__,__,__,ST,ST,ST,ST,ST,ST,ST,ST,__,__,__,__,__,__,ST,ST,__}, -/*minus MI*/ {__,__,__,__,__,__,__,__,__,__,__,__,__,__,ZE,IN,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__}, -/*zero ZE*/ {OK,OK,__,-8,__,-7,__,-3,__,__,__,__,__,FR,__,__,__,__,__,__,E1,__,__,__,__,__,__,__,__,E1,__}, -/*int IN*/ {OK,OK,__,-8,__,-7,__,-3,__,__,__,__,__,FR,IN,IN,__,__,__,__,E1,__,__,__,__,__,__,__,__,E1,__}, -/*frac FR*/ {OK,OK,__,-8,__,-7,__,-3,__,__,__,__,__,__,FR,FR,__,__,__,__,E1,__,__,__,__,__,__,__,__,E1,__}, -/*e E1*/ {__,__,__,__,__,__,__,__,__,__,__,E2,E2,__,E3,E3,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__}, -/*ex E2*/ {__,__,__,__,__,__,__,__,__,__,__,__,__,__,E3,E3,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__}, -/*exp E3*/ {OK,OK,__,-8,__,-7,__,-3,__,__,__,__,__,__,E3,E3,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__}, -/*tr T1*/ {__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,T2,__,__,__,__,__,__}, -/*tru T2*/ {__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,T3,__,__,__}, -/*true T3*/ {__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,OK,__,__,__,__,__,__,__,__,__,__}, -/*fa F1*/ {__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,F2,__,__,__,__,__,__,__,__,__,__,__,__,__,__}, -/*fal F2*/ {__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,F3,__,__,__,__,__,__,__,__}, -/*fals F3*/ {__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,F4,__,__,__,__,__}, -/*false F4*/ {__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,OK,__,__,__,__,__,__,__,__,__,__}, -/*nu N1*/ {__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,N2,__,__,__}, -/*nul N2*/ {__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,N3,__,__,__,__,__,__,__,__}, -/*null N3*/ {__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,__,OK,__,__,__,__,__,__,__,__}, -}; - - -/* - These modes can be pushed on the stack. -*/ -enum modes { - MODE_ARRAY, - MODE_DONE, - MODE_KEY, - MODE_OBJECT, -}; - - -/* - Push a mode onto the stack. Return false if there is overflow. -*/ -static int -push(JSON_parser jp, int mode) -{ - jp->top += 1; - if (jp->top >= jp->depth) { - jp->error_code = PHP_JSON_ERROR_DEPTH; - return false; - } - jp->stack[jp->top] = mode; - return true; -} - - -/* - Pop the stack, assuring that the current mode matches the expectation. - Return false if there is underflow or if the modes mismatch. -*/ -static int -pop(JSON_parser jp, int mode) -{ - if (jp->top < 0 || jp->stack[jp->top] != mode) { - jp->error_code = PHP_JSON_ERROR_STATE_MISMATCH; - return false; - } - jp->top -= 1; - return true; -} - -/* - new_JSON_checker starts the checking process by constructing a JSON_checker - object. It takes a depth parameter that restricts the level of maximum - nesting. - - To continue the process, call JSON_checker_char for each character in the - JSON text, and then call JSON_checker_done to obtain the final result. - These functions are fully reentrant. - - The JSON_checker object will be deleted by JSON_checker_done. - JSON_checker_char will delete the JSON_checker object if it sees an error. -*/ -JSON_parser -new_JSON_parser(int depth) -{ - JSON_parser jp = (JSON_parser)emalloc(sizeof(struct JSON_parser_struct)); - jp->state = GO; - jp->depth = depth; - jp->top = -1; - jp->error_code = PHP_JSON_ERROR_NONE; - jp->stack = (int*)ecalloc(depth, sizeof(int)); - if (depth > JSON_PARSER_DEFAULT_DEPTH) { - jp->the_zstack = (zval **)safe_emalloc(depth, sizeof(zval), 0); - } else { - jp->the_zstack = &jp->the_static_zstack[0]; - } - push(jp, MODE_DONE); - return jp; -} - -/* - Delete the JSON_parser object. -*/ -int -free_JSON_parser(JSON_parser jp) -{ - efree((void*)jp->stack); - if (jp->the_zstack != &jp->the_static_zstack[0]) { - efree(jp->the_zstack); - } - efree((void*)jp); - return false; -} - -static int dehexchar(char c) -{ - if (c >= '0' && c <= '9') - { - return c - '0'; - } - else if (c >= 'A' && c <= 'F') - { - return c - ('A' - 10); - } - else if (c >= 'a' && c <= 'f') - { - return c - ('a' - 10); - } - else - { - return -1; - } -} - - -static void json_create_zval(zval **z, smart_str *buf, int type, int options) -{ - ALLOC_INIT_ZVAL(*z); - - if (type == IS_LONG) - { - zend_bool bigint = 0; - - if (buf->c[0] == '-') { - buf->len--; - } - - if (buf->len >= MAX_LENGTH_OF_LONG - 1) { - if (buf->len == MAX_LENGTH_OF_LONG - 1) { - int cmp = strcmp(buf->c + (buf->c[0] == '-'), long_min_digits); - - if (!(cmp < 0 || (cmp == 0 && buf->c[0] == '-'))) { - bigint = 1; - } - } else { - bigint = 1; - } - } - - if (bigint) { - /* value too large to represent as a long */ - if (options & PHP_JSON_BIGINT_AS_STRING) { - if (buf->c[0] == '-') { - /* Restore last char consumed above */ - buf->len++; - } - goto use_string; - } else { - goto use_double; - } - } - - ZVAL_LONG(*z, strtol(buf->c, NULL, 10)); - } - else if (type == IS_DOUBLE) - { -use_double: - ZVAL_DOUBLE(*z, zend_strtod(buf->c, NULL)); - } - else if (type == IS_STRING) - { -use_string: - ZVAL_STRINGL(*z, buf->c, buf->len, 1); - } - else if (type == IS_BOOL) - { - ZVAL_BOOL(*z, (*(buf->c) == 't')); - } - else /* type == IS_NULL) || type unknown */ - { - ZVAL_NULL(*z); - } -} - - -static void utf16_to_utf8(smart_str *buf, unsigned short utf16) -{ - if (utf16 < 0x80) - { - smart_str_appendc(buf, (unsigned char) utf16); - } - else if (utf16 < 0x800) - { - smart_str_appendc(buf, 0xc0 | (utf16 >> 6)); - smart_str_appendc(buf, 0x80 | (utf16 & 0x3f)); - } - else if ((utf16 & 0xfc00) == 0xdc00 - && buf->len >= 3 - && ((unsigned char) buf->c[buf->len - 3]) == 0xed - && ((unsigned char) buf->c[buf->len - 2] & 0xf0) == 0xa0 - && ((unsigned char) buf->c[buf->len - 1] & 0xc0) == 0x80) - { - /* found surrogate pair */ - unsigned long utf32; - - utf32 = (((buf->c[buf->len - 2] & 0xf) << 16) - | ((buf->c[buf->len - 1] & 0x3f) << 10) - | (utf16 & 0x3ff)) + 0x10000; - buf->len -= 3; - - smart_str_appendc(buf, (unsigned char) (0xf0 | (utf32 >> 18))); - smart_str_appendc(buf, 0x80 | ((utf32 >> 12) & 0x3f)); - smart_str_appendc(buf, 0x80 | ((utf32 >> 6) & 0x3f)); - smart_str_appendc(buf, 0x80 | (utf32 & 0x3f)); - } - else - { - smart_str_appendc(buf, 0xe0 | (utf16 >> 12)); - smart_str_appendc(buf, 0x80 | ((utf16 >> 6) & 0x3f)); - smart_str_appendc(buf, 0x80 | (utf16 & 0x3f)); - } -} - -static void attach_zval(JSON_parser jp, int up, int cur, smart_str *key, int assoc TSRMLS_DC) -{ - zval *root = jp->the_zstack[up]; - zval *child = jp->the_zstack[cur]; - int up_mode = jp->stack[up]; - - if (up_mode == MODE_ARRAY) - { - add_next_index_zval(root, child); - } - else if (up_mode == MODE_OBJECT) - { - if (!assoc) - { - add_property_zval_ex(root, (key->len ? key->c : "_empty_"), (key->len ? (key->len + 1) : sizeof("_empty_")), child TSRMLS_CC); - Z_DELREF_P(child); - } - else - { - add_assoc_zval_ex(root, (key->len ? key->c : ""), (key->len ? (key->len + 1) : sizeof("")), child); - } - key->len = 0; - } -} - - -#define FREE_BUFFERS() smart_str_free(&buf); smart_str_free(&key); -#define SWAP_BUFFERS(from, to) do { \ - char *t1 = from.c; \ - int t2 = from.a; \ - from.c = to.c; \ - from.a = to.a; \ - to.c = t1; \ - to.a = t2; \ - to.len = from.len; \ - from.len = 0; \ - } while(0); -#define JSON_RESET_TYPE() type = -1; - -/* - The JSON_parser takes a UTF-16 encoded string and determines if it is a - syntactically correct JSON text. Along the way, it creates a PHP variable. - - It is implemented as a Pushdown Automaton; that means it is a finite state - machine with a stack. -*/ -int -parse_JSON_ex(JSON_parser jp, zval *z, unsigned short utf16_json[], int length, int options TSRMLS_DC) -{ - int next_char; /* the next character */ - int next_class; /* the next character class */ - int next_state; /* the next state */ - int the_index; - int assoc = options & PHP_JSON_OBJECT_AS_ARRAY; - - smart_str buf = {0}; - smart_str key = {0}; - - unsigned short utf16 = 0; - int type; - - JSON_RESET_TYPE(); - - for (the_index = 0; the_index < length; the_index += 1) { - next_char = utf16_json[the_index]; - if (next_char >= 128) { - next_class = C_ETC; - } else { - next_class = ascii_class[next_char]; - if (next_class <= __) { - jp->error_code = PHP_JSON_ERROR_CTRL_CHAR; - FREE_BUFFERS(); - return false; - } - } -/* - Get the next state from the transition table. -*/ - next_state = state_transition_table[jp->state][next_class]; - if (next_state >= 0) { -/* - Change the state and iterate -*/ - if (type == IS_STRING) { - if (next_state == ST && jp->state != U4) { - if (jp->state != ES) { - utf16_to_utf8(&buf, next_char); - } else { - switch (next_char) { - case 'b': - smart_str_appendc(&buf, '\b'); - break; - case 't': - smart_str_appendc(&buf, '\t'); - break; - case 'n': - smart_str_appendc(&buf, '\n'); - break; - case 'f': - smart_str_appendc(&buf, '\f'); - break; - case 'r': - smart_str_appendc(&buf, '\r'); - break; - default: - utf16_to_utf8(&buf, next_char); - break; - } - } - } else if (next_state == U2) { - utf16 = dehexchar(next_char) << 12; - } else if (next_state == U3) { - utf16 += dehexchar(next_char) << 8; - } else if (next_state == U4) { - utf16 += dehexchar(next_char) << 4; - } else if (next_state == ST && jp->state == U4) { - utf16 += dehexchar(next_char); - utf16_to_utf8(&buf, utf16); - } - } else if (type < IS_LONG && (next_class == C_DIGIT || next_class == C_ZERO)) { - type = IS_LONG; - smart_str_appendc(&buf, next_char); - } else if (type == IS_LONG && next_state == E1) { - type = IS_DOUBLE; - smart_str_appendc(&buf, next_char); - } else if (type < IS_DOUBLE && next_class == C_POINT) { - type = IS_DOUBLE; - smart_str_appendc(&buf, next_char); - } else if (type < IS_STRING && next_class == C_QUOTE) { - type = IS_STRING; - } else if (type < IS_BOOL && ((jp->state == T3 && next_state == OK) || (jp->state == F4 && next_state == OK))) { - type = IS_BOOL; - } else if (type < IS_NULL && jp->state == N3 && next_state == OK) { - type = IS_NULL; - } else if (type != IS_STRING && next_class > C_WHITE) { - utf16_to_utf8(&buf, next_char); - } - jp->state = next_state; - } else { -/* - Perform one of the predefined actions. -*/ - switch (next_state) { -/* empty } */ - case -9: - if (!pop(jp, MODE_KEY)) { - FREE_BUFFERS(); - return false; - } - jp->state = OK; - break; -/* } */ - case -8: - if (type != -1 && jp->stack[jp->top] == MODE_OBJECT) - { - zval *mval; - smart_str_0(&buf); - - json_create_zval(&mval, &buf, type, options); - - if (!assoc) { - add_property_zval_ex(jp->the_zstack[jp->top], (key.len ? key.c : "_empty_"), (key.len ? (key.len + 1) : sizeof("_empty_")), mval TSRMLS_CC); - Z_DELREF_P(mval); - } else { - add_assoc_zval_ex(jp->the_zstack[jp->top], (key.len ? key.c : ""), (key.len ? (key.len + 1) : sizeof("")), mval); - } - key.len = 0; - buf.len = 0; - JSON_RESET_TYPE(); - } - - - if (!pop(jp, MODE_OBJECT)) { - FREE_BUFFERS(); - return false; - } - jp->state = OK; - break; -/* ] */ - case -7: - { - if (type != -1 && jp->stack[jp->top] == MODE_ARRAY) - { - zval *mval; - smart_str_0(&buf); - - json_create_zval(&mval, &buf, type, options); - add_next_index_zval(jp->the_zstack[jp->top], mval); - buf.len = 0; - JSON_RESET_TYPE(); - } - - if (!pop(jp, MODE_ARRAY)) { - FREE_BUFFERS(); - return false; - } - jp->state = OK; - } - break; -/* { */ - case -6: - if (!push(jp, MODE_KEY)) { - FREE_BUFFERS(); - return false; - } - - jp->state = OB; - if (jp->top > 0) { - zval *obj; - - if (jp->top == 1) { - obj = z; - } else { - ALLOC_INIT_ZVAL(obj); - } - - if (!assoc) { - object_init(obj); - } else { - array_init(obj); - } - - jp->the_zstack[jp->top] = obj; - - if (jp->top > 1) { - attach_zval(jp, jp->top - 1, jp->top, &key, assoc TSRMLS_CC); - } - - JSON_RESET_TYPE(); - } - - break; -/* [ */ - case -5: - if (!push(jp, MODE_ARRAY)) { - FREE_BUFFERS(); - return false; - } - jp->state = AR; - - if (jp->top > 0) { - zval *arr; - - if (jp->top == 1) { - arr = z; - } else { - ALLOC_INIT_ZVAL(arr); - } - - array_init(arr); - jp->the_zstack[jp->top] = arr; - - if (jp->top > 1) { - attach_zval(jp, jp->top - 1, jp->top, &key, assoc TSRMLS_CC); - } - - JSON_RESET_TYPE(); - } - - break; - -/* " */ - case -4: - switch (jp->stack[jp->top]) { - case MODE_KEY: - jp->state = CO; - smart_str_0(&buf); - SWAP_BUFFERS(buf, key); - JSON_RESET_TYPE(); - break; - case MODE_ARRAY: - case MODE_OBJECT: - jp->state = OK; - break; - case MODE_DONE: - if (type == IS_STRING) { - smart_str_0(&buf); - ZVAL_STRINGL(z, buf.c, buf.len, 1); - jp->state = OK; - break; - } - /* fall through if not IS_STRING */ - default: - FREE_BUFFERS(); - jp->error_code = PHP_JSON_ERROR_SYNTAX; - return false; - } - break; -/* , */ - case -3: - { - zval *mval; - - if (type != -1 && - (jp->stack[jp->top] == MODE_OBJECT || - jp->stack[jp->top] == MODE_ARRAY)) - { - smart_str_0(&buf); - json_create_zval(&mval, &buf, type, options); - } - - switch (jp->stack[jp->top]) { - case MODE_OBJECT: - if (pop(jp, MODE_OBJECT) && push(jp, MODE_KEY)) { - if (type != -1) { - if (!assoc) { - add_property_zval_ex(jp->the_zstack[jp->top], (key.len ? key.c : "_empty_"), (key.len ? (key.len + 1) : sizeof("_empty_")), mval TSRMLS_CC); - Z_DELREF_P(mval); - } else { - add_assoc_zval_ex(jp->the_zstack[jp->top], (key.len ? key.c : ""), (key.len ? (key.len + 1) : sizeof("")), mval); - } - key.len = 0; - } - jp->state = KE; - } - break; - case MODE_ARRAY: - if (type != -1) { - add_next_index_zval(jp->the_zstack[jp->top], mval); - } - jp->state = VA; - break; - default: - FREE_BUFFERS(); - jp->error_code = PHP_JSON_ERROR_SYNTAX; - return false; - } - buf.len = 0; - JSON_RESET_TYPE(); - } - break; -/* : */ - case -2: - if (pop(jp, MODE_KEY) && push(jp, MODE_OBJECT)) { - jp->state = VA; - break; - } -/* - syntax error -*/ - default: - { - jp->error_code = PHP_JSON_ERROR_SYNTAX; - FREE_BUFFERS(); - return false; - } - } - } - } - - FREE_BUFFERS(); - if (jp->state == OK && pop(jp, MODE_DONE)) { - return true; - } - - jp->error_code = PHP_JSON_ERROR_SYNTAX; - return false; -} - - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * End: - * vim600: noet sw=4 ts=4 - * vim<600: noet sw=4 ts=4 - */ diff --git a/ext/json/JSON_parser.h b/ext/json/JSON_parser.h deleted file mode 100644 index 8671765b4..000000000 --- a/ext/json/JSON_parser.h +++ /dev/null @@ -1,43 +0,0 @@ -/* JSON_parser.h */ - -#ifndef JSON_PARSER_H -#define JSON_PARSER_H - -#include "php.h" -#include "ext/standard/php_smart_str.h" -#include "php_json.h" - -#define JSON_PARSER_DEFAULT_DEPTH 512 - -typedef struct JSON_parser_struct { - int state; - int depth; - int top; - int error_code; - int* stack; - zval **the_zstack; - zval *the_static_zstack[JSON_PARSER_DEFAULT_DEPTH]; -} * JSON_parser; - -enum error_codes { - PHP_JSON_ERROR_NONE = 0, - PHP_JSON_ERROR_DEPTH, - PHP_JSON_ERROR_STATE_MISMATCH, - PHP_JSON_ERROR_CTRL_CHAR, - PHP_JSON_ERROR_SYNTAX, - PHP_JSON_ERROR_UTF8, - PHP_JSON_ERROR_RECURSION, - PHP_JSON_ERROR_INF_OR_NAN, - PHP_JSON_ERROR_UNSUPPORTED_TYPE -}; - -extern JSON_parser new_JSON_parser(int depth); -extern int parse_JSON_ex(JSON_parser jp, zval *z, unsigned short utf16_json[], int length, int options TSRMLS_DC); -extern int free_JSON_parser(JSON_parser jp); - -static inline int parse_JSON(JSON_parser jp, zval *z, unsigned short utf16_json[], int length, int assoc TSRMLS_DC) -{ - return parse_JSON_ex(jp, z, utf16_json, length, assoc ? PHP_JSON_OBJECT_AS_ARRAY : 0 TSRMLS_CC); -} - -#endif diff --git a/ext/json/README b/ext/json/README deleted file mode 100644 index d680b0c59..000000000 --- a/ext/json/README +++ /dev/null @@ -1,76 +0,0 @@ -json 1.2.0 -========== - -This extension implements the JavaScript Object Notation (JSON) -data-interchange format as specified in [0]. - -Two functions are implemented: encoding and decoding. The decoding -is handled by a parser based on JSON_checker[1] by Douglas Crockford. - - -Function overview ------------------ - - string json_encode ( mixed value ) - -json_encode returns a string containing the JSON representation of value. -value can be any type except a resource. - - mixed json_decode ( string json, [bool assoc] ) - -json_decode takes a JSON string and converts it into a PHP variable. -When assoc is given, and evaluates to TRUE, json_decode() will return -any objects as associative arrays. - - -Example usage -------------- - -$arr = array("a"=>1,"b"=>2,"c"=>3,"d"=>4,"e"=>5); -echo json_encode($arr); - ----> {"a":1,"b":2,"c":3,"d":4,"e":5} - -$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}'; -var_dump(json_decode($json)); - ----> object(stdClass)#1 (5) { - ["a"]=> - int(1) - ["b"]=> - int(2) - ["c"]=> - int(3) - ["d"]=> - int(4) - ["e"]=> - int(5) - } - -$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}'; -var_dump(json_decode($json, true)); - ----> array(5) { - ["a"]=> - int(1) - ["b"]=> - int(2) - ["c"]=> - int(3) - ["d"]=> - int(4) - ["e"]=> - int(5) - } - - -Authors -------- - -Omar Kilani <omar@php.net> - - ---- - -[0] http://www.crockford.com/JSON/draft-jsonorg-json-00.txt -[1] http://www.crockford.com/JSON/JSON_checker/ diff --git a/ext/json/config.m4 b/ext/json/config.m4 deleted file mode 100644 index 26c43a0e3..000000000 --- a/ext/json/config.m4 +++ /dev/null @@ -1,15 +0,0 @@ -dnl -dnl $Id$ -dnl - -PHP_ARG_ENABLE(json, whether to enable JavaScript Object Serialization support, -[ --disable-json Disable JavaScript Object Serialization support], yes) - -if test "$PHP_JSON" != "no"; then - AC_DEFINE([HAVE_JSON],1 ,[whether to enable JavaScript Object Serialization support]) - AC_HEADER_STDC - - PHP_NEW_EXTENSION(json, json.c utf8_decode.c JSON_parser.c, $ext_shared) - PHP_INSTALL_HEADERS([ext/json], [php_json.h]) - PHP_SUBST(JSON_SHARED_LIBADD) -fi diff --git a/ext/json/config.w32 b/ext/json/config.w32 deleted file mode 100644 index cedbf4282..000000000 --- a/ext/json/config.w32 +++ /dev/null @@ -1,11 +0,0 @@ -// $Id$ -// vim:ft=javascript - -ARG_ENABLE("json", "JavaScript Object Serialization support", "yes"); - -if (PHP_JSON != "no") { - EXTENSION('json', 'json.c', PHP_JSON_SHARED, ""); - ADD_SOURCES(configure_module_dirname, "JSON_parser.c utf8_decode.c", "json"); - PHP_INSTALL_HEADERS("ext/json/", "php_json.h"); -} - diff --git a/ext/json/json.c b/ext/json/json.c deleted file mode 100644 index 53608412f..000000000 --- a/ext/json/json.c +++ /dev/null @@ -1,872 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2013 The PHP Group | - +----------------------------------------------------------------------+ - | This source file is subject to version 3.01 of the PHP license, | - | that is bundled with this package in the file LICENSE, and is | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Omar Kilani <omar@php.net> | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" -#include "php_ini.h" -#include "ext/standard/info.h" -#include "ext/standard/html.h" -#include "ext/standard/php_smart_str.h" -#include "JSON_parser.h" -#include "php_json.h" -#include <zend_exceptions.h> - -static PHP_MINFO_FUNCTION(json); -static PHP_FUNCTION(json_encode); -static PHP_FUNCTION(json_decode); -static PHP_FUNCTION(json_last_error); -static PHP_FUNCTION(json_last_error_msg); - -static const char digits[] = "0123456789abcdef"; - -zend_class_entry *php_json_serializable_ce; - -ZEND_DECLARE_MODULE_GLOBALS(json) - -/* {{{ arginfo */ -ZEND_BEGIN_ARG_INFO_EX(arginfo_json_encode, 0, 0, 1) - ZEND_ARG_INFO(0, value) - ZEND_ARG_INFO(0, options) - ZEND_ARG_INFO(0, depth) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_json_decode, 0, 0, 1) - ZEND_ARG_INFO(0, json) - ZEND_ARG_INFO(0, assoc) - ZEND_ARG_INFO(0, depth) - ZEND_ARG_INFO(0, options) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO(arginfo_json_last_error, 0) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO(arginfo_json_last_error_msg, 0) -ZEND_END_ARG_INFO() -/* }}} */ - -/* {{{ json_functions[] */ -static const zend_function_entry json_functions[] = { - PHP_FE(json_encode, arginfo_json_encode) - PHP_FE(json_decode, arginfo_json_decode) - PHP_FE(json_last_error, arginfo_json_last_error) - PHP_FE(json_last_error_msg, arginfo_json_last_error_msg) - PHP_FE_END -}; -/* }}} */ - -/* {{{ JsonSerializable methods */ -ZEND_BEGIN_ARG_INFO(json_serialize_arginfo, 0) - /* No arguments */ -ZEND_END_ARG_INFO(); - -static const zend_function_entry json_serializable_interface[] = { - PHP_ABSTRACT_ME(JsonSerializable, jsonSerialize, json_serialize_arginfo) - PHP_FE_END -}; -/* }}} */ - -/* {{{ MINIT */ -static PHP_MINIT_FUNCTION(json) -{ - zend_class_entry ce; - - INIT_CLASS_ENTRY(ce, "JsonSerializable", json_serializable_interface); - php_json_serializable_ce = zend_register_internal_interface(&ce TSRMLS_CC); - - REGISTER_LONG_CONSTANT("JSON_HEX_TAG", PHP_JSON_HEX_TAG, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("JSON_HEX_AMP", PHP_JSON_HEX_AMP, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("JSON_HEX_APOS", PHP_JSON_HEX_APOS, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("JSON_HEX_QUOT", PHP_JSON_HEX_QUOT, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("JSON_FORCE_OBJECT", PHP_JSON_FORCE_OBJECT, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("JSON_NUMERIC_CHECK", PHP_JSON_NUMERIC_CHECK, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("JSON_UNESCAPED_SLASHES", PHP_JSON_UNESCAPED_SLASHES, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("JSON_PRETTY_PRINT", PHP_JSON_PRETTY_PRINT, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("JSON_UNESCAPED_UNICODE", PHP_JSON_UNESCAPED_UNICODE, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("JSON_PARTIAL_OUTPUT_ON_ERROR", PHP_JSON_PARTIAL_OUTPUT_ON_ERROR, CONST_CS | CONST_PERSISTENT); - - REGISTER_LONG_CONSTANT("JSON_ERROR_NONE", PHP_JSON_ERROR_NONE, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("JSON_ERROR_DEPTH", PHP_JSON_ERROR_DEPTH, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("JSON_ERROR_STATE_MISMATCH", PHP_JSON_ERROR_STATE_MISMATCH, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("JSON_ERROR_CTRL_CHAR", PHP_JSON_ERROR_CTRL_CHAR, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("JSON_ERROR_SYNTAX", PHP_JSON_ERROR_SYNTAX, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("JSON_ERROR_UTF8", PHP_JSON_ERROR_UTF8, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("JSON_ERROR_RECURSION", PHP_JSON_ERROR_RECURSION, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("JSON_ERROR_INF_OR_NAN", PHP_JSON_ERROR_INF_OR_NAN, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("JSON_ERROR_UNSUPPORTED_TYPE", PHP_JSON_ERROR_UNSUPPORTED_TYPE, CONST_CS | CONST_PERSISTENT); - - REGISTER_LONG_CONSTANT("JSON_OBJECT_AS_ARRAY", PHP_JSON_OBJECT_AS_ARRAY, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("JSON_BIGINT_AS_STRING", PHP_JSON_BIGINT_AS_STRING, CONST_CS | CONST_PERSISTENT); - - return SUCCESS; -} -/* }}} */ - -/* {{{ PHP_GINIT_FUNCTION -*/ -static PHP_GINIT_FUNCTION(json) -{ - json_globals->encoder_depth = 0; - json_globals->error_code = 0; - json_globals->encode_max_depth = 0; -} -/* }}} */ - - -/* {{{ json_module_entry - */ -zend_module_entry json_module_entry = { - STANDARD_MODULE_HEADER, - "json", - json_functions, - PHP_MINIT(json), - NULL, - NULL, - NULL, - PHP_MINFO(json), - PHP_JSON_VERSION, - PHP_MODULE_GLOBALS(json), - PHP_GINIT(json), - NULL, - NULL, - STANDARD_MODULE_PROPERTIES_EX -}; -/* }}} */ - -#ifdef COMPILE_DL_JSON -ZEND_GET_MODULE(json) -#endif - -/* {{{ PHP_MINFO_FUNCTION - */ -static PHP_MINFO_FUNCTION(json) -{ - php_info_print_table_start(); - php_info_print_table_row(2, "json support", "enabled"); - php_info_print_table_row(2, "json version", PHP_JSON_VERSION); - php_info_print_table_end(); -} -/* }}} */ - -static void json_escape_string(smart_str *buf, char *s, int len, int options TSRMLS_DC); - -static int json_determine_array_type(zval **val TSRMLS_DC) /* {{{ */ -{ - int i; - HashTable *myht = HASH_OF(*val); - - i = myht ? zend_hash_num_elements(myht) : 0; - if (i > 0) { - char *key; - ulong index, idx; - uint key_len; - HashPosition pos; - - zend_hash_internal_pointer_reset_ex(myht, &pos); - idx = 0; - for (;; zend_hash_move_forward_ex(myht, &pos)) { - i = zend_hash_get_current_key_ex(myht, &key, &key_len, &index, 0, &pos); - if (i == HASH_KEY_NON_EXISTANT) { - break; - } - - if (i == HASH_KEY_IS_STRING) { - return 1; - } else { - if (index != idx) { - return 1; - } - } - idx++; - } - } - - return PHP_JSON_OUTPUT_ARRAY; -} -/* }}} */ - -/* {{{ Pretty printing support functions */ - -static inline void json_pretty_print_char(smart_str *buf, int options, char c TSRMLS_DC) /* {{{ */ -{ - if (options & PHP_JSON_PRETTY_PRINT) { - smart_str_appendc(buf, c); - } -} -/* }}} */ - -static inline void json_pretty_print_indent(smart_str *buf, int options TSRMLS_DC) /* {{{ */ -{ - int i; - - if (options & PHP_JSON_PRETTY_PRINT) { - for (i = 0; i < JSON_G(encoder_depth); ++i) { - smart_str_appendl(buf, " ", 4); - } - } -} -/* }}} */ - -/* }}} */ - -static void json_encode_array(smart_str *buf, zval **val, int options TSRMLS_DC) /* {{{ */ -{ - int i, r; - HashTable *myht; - - if (Z_TYPE_PP(val) == IS_ARRAY) { - myht = HASH_OF(*val); - r = (options & PHP_JSON_FORCE_OBJECT) ? PHP_JSON_OUTPUT_OBJECT : json_determine_array_type(val TSRMLS_CC); - } else { - myht = Z_OBJPROP_PP(val); - r = PHP_JSON_OUTPUT_OBJECT; - } - - if (myht && myht->nApplyCount > 1) { - JSON_G(error_code) = PHP_JSON_ERROR_RECURSION; - smart_str_appendl(buf, "null", 4); - return; - } - - if (r == PHP_JSON_OUTPUT_ARRAY) { - smart_str_appendc(buf, '['); - } else { - smart_str_appendc(buf, '{'); - } - - json_pretty_print_char(buf, options, '\n' TSRMLS_CC); - ++JSON_G(encoder_depth); - - i = myht ? zend_hash_num_elements(myht) : 0; - - if (i > 0) - { - char *key; - zval **data; - ulong index; - uint key_len; - HashPosition pos; - HashTable *tmp_ht; - int need_comma = 0; - - zend_hash_internal_pointer_reset_ex(myht, &pos); - for (;; zend_hash_move_forward_ex(myht, &pos)) { - i = zend_hash_get_current_key_ex(myht, &key, &key_len, &index, 0, &pos); - if (i == HASH_KEY_NON_EXISTANT) - break; - - if (zend_hash_get_current_data_ex(myht, (void **) &data, &pos) == SUCCESS) { - tmp_ht = HASH_OF(*data); - if (tmp_ht) { - tmp_ht->nApplyCount++; - } - - if (r == PHP_JSON_OUTPUT_ARRAY) { - if (need_comma) { - smart_str_appendc(buf, ','); - json_pretty_print_char(buf, options, '\n' TSRMLS_CC); - } else { - need_comma = 1; - } - - json_pretty_print_indent(buf, options TSRMLS_CC); - php_json_encode(buf, *data, options TSRMLS_CC); - } else if (r == PHP_JSON_OUTPUT_OBJECT) { - if (i == HASH_KEY_IS_STRING) { - if (key[0] == '\0' && Z_TYPE_PP(val) == IS_OBJECT) { - /* Skip protected and private members. */ - if (tmp_ht) { - tmp_ht->nApplyCount--; - } - continue; - } - - if (need_comma) { - smart_str_appendc(buf, ','); - json_pretty_print_char(buf, options, '\n' TSRMLS_CC); - } else { - need_comma = 1; - } - - json_pretty_print_indent(buf, options TSRMLS_CC); - - json_escape_string(buf, key, key_len - 1, options & ~PHP_JSON_NUMERIC_CHECK TSRMLS_CC); - smart_str_appendc(buf, ':'); - - json_pretty_print_char(buf, options, ' ' TSRMLS_CC); - - php_json_encode(buf, *data, options TSRMLS_CC); - } else { - if (need_comma) { - smart_str_appendc(buf, ','); - json_pretty_print_char(buf, options, '\n' TSRMLS_CC); - } else { - need_comma = 1; - } - - json_pretty_print_indent(buf, options TSRMLS_CC); - - smart_str_appendc(buf, '"'); - smart_str_append_long(buf, (long) index); - smart_str_appendc(buf, '"'); - smart_str_appendc(buf, ':'); - - json_pretty_print_char(buf, options, ' ' TSRMLS_CC); - - php_json_encode(buf, *data, options TSRMLS_CC); - } - } - - if (tmp_ht) { - tmp_ht->nApplyCount--; - } - } - } - } - - if (JSON_G(encoder_depth) > JSON_G(encode_max_depth)) { - JSON_G(error_code) = PHP_JSON_ERROR_DEPTH; - } - --JSON_G(encoder_depth); - json_pretty_print_char(buf, options, '\n' TSRMLS_CC); - json_pretty_print_indent(buf, options TSRMLS_CC); - - if (r == PHP_JSON_OUTPUT_ARRAY) { - smart_str_appendc(buf, ']'); - } else { - smart_str_appendc(buf, '}'); - } -} -/* }}} */ - -static int json_utf8_to_utf16(unsigned short *utf16, char utf8[], int len) /* {{{ */ -{ - size_t pos = 0, us; - int j, status; - - if (utf16) { - /* really convert the utf8 string */ - for (j=0 ; pos < len ; j++) { - us = php_next_utf8_char((const unsigned char *)utf8, len, &pos, &status); - if (status != SUCCESS) { - return -1; - } - /* From http://en.wikipedia.org/wiki/UTF16 */ - if (us >= 0x10000) { - us -= 0x10000; - utf16[j++] = (unsigned short)((us >> 10) | 0xd800); - utf16[j] = (unsigned short)((us & 0x3ff) | 0xdc00); - } else { - utf16[j] = (unsigned short)us; - } - } - } else { - /* Only check if utf8 string is valid, and compute utf16 lenght */ - for (j=0 ; pos < len ; j++) { - us = php_next_utf8_char((const unsigned char *)utf8, len, &pos, &status); - if (status != SUCCESS) { - return -1; - } - if (us >= 0x10000) { - j++; - } - } - } - return j; -} -/* }}} */ - - -static void json_escape_string(smart_str *buf, char *s, int len, int options TSRMLS_DC) /* {{{ */ -{ - int pos = 0, ulen = 0; - unsigned short us; - unsigned short *utf16; - size_t newlen; - - if (len == 0) { - smart_str_appendl(buf, "\"\"", 2); - return; - } - - if (options & PHP_JSON_NUMERIC_CHECK) { - double d; - int type; - long p; - - if ((type = is_numeric_string(s, len, &p, &d, 0)) != 0) { - if (type == IS_LONG) { - smart_str_append_long(buf, p); - } else if (type == IS_DOUBLE) { - if (!zend_isinf(d) && !zend_isnan(d)) { - char *tmp; - int l = spprintf(&tmp, 0, "%.*k", (int) EG(precision), d); - smart_str_appendl(buf, tmp, l); - efree(tmp); - } else { - JSON_G(error_code) = PHP_JSON_ERROR_INF_OR_NAN; - smart_str_appendc(buf, '0'); - } - } - return; - } - - } - - utf16 = (options & PHP_JSON_UNESCAPED_UNICODE) ? NULL : (unsigned short *) safe_emalloc(len, sizeof(unsigned short), 0); - ulen = json_utf8_to_utf16(utf16, s, len); - if (ulen <= 0) { - if (utf16) { - efree(utf16); - } - if (ulen < 0) { - JSON_G(error_code) = PHP_JSON_ERROR_UTF8; - smart_str_appendl(buf, "null", 4); - } else { - smart_str_appendl(buf, "\"\"", 2); - } - return; - } - if (!(options & PHP_JSON_UNESCAPED_UNICODE)) { - len = ulen; - } - - /* pre-allocate for string length plus 2 quotes */ - smart_str_alloc(buf, len+2, 0); - smart_str_appendc(buf, '"'); - - while (pos < len) - { - us = (options & PHP_JSON_UNESCAPED_UNICODE) ? s[pos++] : utf16[pos++]; - - switch (us) - { - case '"': - if (options & PHP_JSON_HEX_QUOT) { - smart_str_appendl(buf, "\\u0022", 6); - } else { - smart_str_appendl(buf, "\\\"", 2); - } - break; - - case '\\': - smart_str_appendl(buf, "\\\\", 2); - break; - - case '/': - if (options & PHP_JSON_UNESCAPED_SLASHES) { - smart_str_appendc(buf, '/'); - } else { - smart_str_appendl(buf, "\\/", 2); - } - break; - - case '\b': - smart_str_appendl(buf, "\\b", 2); - break; - - case '\f': - smart_str_appendl(buf, "\\f", 2); - break; - - case '\n': - smart_str_appendl(buf, "\\n", 2); - break; - - case '\r': - smart_str_appendl(buf, "\\r", 2); - break; - - case '\t': - smart_str_appendl(buf, "\\t", 2); - break; - - case '<': - if (options & PHP_JSON_HEX_TAG) { - smart_str_appendl(buf, "\\u003C", 6); - } else { - smart_str_appendc(buf, '<'); - } - break; - - case '>': - if (options & PHP_JSON_HEX_TAG) { - smart_str_appendl(buf, "\\u003E", 6); - } else { - smart_str_appendc(buf, '>'); - } - break; - - case '&': - if (options & PHP_JSON_HEX_AMP) { - smart_str_appendl(buf, "\\u0026", 6); - } else { - smart_str_appendc(buf, '&'); - } - break; - - case '\'': - if (options & PHP_JSON_HEX_APOS) { - smart_str_appendl(buf, "\\u0027", 6); - } else { - smart_str_appendc(buf, '\''); - } - break; - - default: - if (us >= ' ' && ((options & PHP_JSON_UNESCAPED_UNICODE) || (us & 127) == us)) { - smart_str_appendc(buf, (unsigned char) us); - } else { - smart_str_appendl(buf, "\\u", 2); - smart_str_appendc(buf, digits[(us & 0xf000) >> 12]); - smart_str_appendc(buf, digits[(us & 0xf00) >> 8]); - smart_str_appendc(buf, digits[(us & 0xf0) >> 4]); - smart_str_appendc(buf, digits[(us & 0xf)]); - } - break; - } - } - - smart_str_appendc(buf, '"'); - if (utf16) { - efree(utf16); - } -} -/* }}} */ - - -static void json_encode_serializable_object(smart_str *buf, zval *val, int options TSRMLS_DC) /* {{{ */ -{ - zend_class_entry *ce = Z_OBJCE_P(val); - zval *retval = NULL, fname; - HashTable* myht; - - if (Z_TYPE_P(val) == IS_ARRAY) { - myht = HASH_OF(val); - } else { - myht = Z_OBJPROP_P(val); - } - - if (myht && myht->nApplyCount > 1) { - JSON_G(error_code) = PHP_JSON_ERROR_RECURSION; - smart_str_appendl(buf, "null", 4); - return; - } - - ZVAL_STRING(&fname, "jsonSerialize", 0); - - if (FAILURE == call_user_function_ex(EG(function_table), &val, &fname, &retval, 0, NULL, 1, NULL TSRMLS_CC) || !retval) { - zend_throw_exception_ex(NULL, 0 TSRMLS_CC, "Failed calling %s::jsonSerialize()", ce->name); - smart_str_appendl(buf, "null", sizeof("null") - 1); - return; - } - - if (EG(exception)) { - /* Error already raised */ - zval_ptr_dtor(&retval); - smart_str_appendl(buf, "null", sizeof("null") - 1); - return; - } - - if ((Z_TYPE_P(retval) == IS_OBJECT) && - (Z_OBJ_HANDLE_P(retval) == Z_OBJ_HANDLE_P(val))) { - /* Handle the case where jsonSerialize does: return $this; by going straight to encode array */ - json_encode_array(buf, &retval, options TSRMLS_CC); - } else { - /* All other types, encode as normal */ - php_json_encode(buf, retval, options TSRMLS_CC); - } - - zval_ptr_dtor(&retval); -} -/* }}} */ - -PHP_JSON_API void php_json_encode(smart_str *buf, zval *val, int options TSRMLS_DC) /* {{{ */ -{ - switch (Z_TYPE_P(val)) - { - case IS_NULL: - smart_str_appendl(buf, "null", 4); - break; - - case IS_BOOL: - if (Z_BVAL_P(val)) { - smart_str_appendl(buf, "true", 4); - } else { - smart_str_appendl(buf, "false", 5); - } - break; - - case IS_LONG: - smart_str_append_long(buf, Z_LVAL_P(val)); - break; - - case IS_DOUBLE: - { - char *d = NULL; - int len; - double dbl = Z_DVAL_P(val); - - if (!zend_isinf(dbl) && !zend_isnan(dbl)) { - len = spprintf(&d, 0, "%.*k", (int) EG(precision), dbl); - smart_str_appendl(buf, d, len); - efree(d); - } else { - JSON_G(error_code) = PHP_JSON_ERROR_INF_OR_NAN; - smart_str_appendc(buf, '0'); - } - } - break; - - case IS_STRING: - json_escape_string(buf, Z_STRVAL_P(val), Z_STRLEN_P(val), options TSRMLS_CC); - break; - - case IS_OBJECT: - if (instanceof_function(Z_OBJCE_P(val), php_json_serializable_ce TSRMLS_CC)) { - json_encode_serializable_object(buf, val, options TSRMLS_CC); - break; - } - /* fallthrough -- Non-serializable object */ - case IS_ARRAY: - json_encode_array(buf, &val, options TSRMLS_CC); - break; - - default: - JSON_G(error_code) = PHP_JSON_ERROR_UNSUPPORTED_TYPE; - smart_str_appendl(buf, "null", 4); - break; - } - - return; -} -/* }}} */ - -PHP_JSON_API void php_json_decode_ex(zval *return_value, char *str, int str_len, int options, long depth TSRMLS_DC) /* {{{ */ -{ - int utf16_len; - zval *z; - unsigned short *utf16; - JSON_parser jp; - - utf16 = (unsigned short *) safe_emalloc((str_len+1), sizeof(unsigned short), 1); - - utf16_len = json_utf8_to_utf16(utf16, str, str_len); - if (utf16_len <= 0) { - if (utf16) { - efree(utf16); - } - JSON_G(error_code) = PHP_JSON_ERROR_UTF8; - RETURN_NULL(); - } - - if (depth <= 0) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Depth must be greater than zero"); - efree(utf16); - RETURN_NULL(); - } - - ALLOC_INIT_ZVAL(z); - jp = new_JSON_parser(depth); - if (parse_JSON_ex(jp, z, utf16, utf16_len, options TSRMLS_CC)) { - *return_value = *z; - } - else - { - double d; - int type, overflow_info; - long p; - - RETVAL_NULL(); - if (str_len == 4) { - if (!strcasecmp(str, "null")) { - /* We need to explicitly clear the error because its an actual NULL and not an error */ - jp->error_code = PHP_JSON_ERROR_NONE; - RETVAL_NULL(); - } else if (!strcasecmp(str, "true")) { - RETVAL_BOOL(1); - } - } else if (str_len == 5 && !strcasecmp(str, "false")) { - RETVAL_BOOL(0); - } - - if ((type = is_numeric_string_ex(str, str_len, &p, &d, 0, &overflow_info)) != 0) { - if (type == IS_LONG) { - RETVAL_LONG(p); - } else if (type == IS_DOUBLE) { - if (options & PHP_JSON_BIGINT_AS_STRING && overflow_info) { - /* Within an object or array, a numeric literal is assumed - * to be an integer if and only if it's entirely made up of - * digits (exponent notation will result in the number - * being treated as a double). We'll match that behaviour - * here. */ - int i; - zend_bool is_float = 0; - - for (i = (str[0] == '-' ? 1 : 0); i < str_len; i++) { - /* Not using isdigit() because it's locale specific, - * but we expect JSON input to always be UTF-8. */ - if (str[i] < '0' || str[i] > '9') { - is_float = 1; - break; - } - } - - if (is_float) { - RETVAL_DOUBLE(d); - } else { - RETVAL_STRINGL(str, str_len, 1); - } - } else { - RETVAL_DOUBLE(d); - } - } - } - - if (Z_TYPE_P(return_value) != IS_NULL) { - jp->error_code = PHP_JSON_ERROR_NONE; - } - - zval_dtor(z); - } - FREE_ZVAL(z); - efree(utf16); - JSON_G(error_code) = jp->error_code; - free_JSON_parser(jp); -} -/* }}} */ - - -/* {{{ proto string json_encode(mixed data [, int options[, int depth]]) - Returns the JSON representation of a value */ -static PHP_FUNCTION(json_encode) -{ - zval *parameter; - smart_str buf = {0}; - long options = 0; - long depth = JSON_PARSER_DEFAULT_DEPTH; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z|ll", ¶meter, &options, &depth) == FAILURE) { - return; - } - - JSON_G(error_code) = PHP_JSON_ERROR_NONE; - - JSON_G(encode_max_depth) = depth; - - php_json_encode(&buf, parameter, options TSRMLS_CC); - - if (JSON_G(error_code) != PHP_JSON_ERROR_NONE && !(options & PHP_JSON_PARTIAL_OUTPUT_ON_ERROR)) { - ZVAL_FALSE(return_value); - } else { - ZVAL_STRINGL(return_value, buf.c, buf.len, 1); - } - - smart_str_free(&buf); -} -/* }}} */ - -/* {{{ proto mixed json_decode(string json [, bool assoc [, long depth]]) - Decodes the JSON representation into a PHP value */ -static PHP_FUNCTION(json_decode) -{ - char *str; - int str_len; - zend_bool assoc = 0; /* return JS objects as PHP objects by default */ - long depth = JSON_PARSER_DEFAULT_DEPTH; - long options = 0; - - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|bll", &str, &str_len, &assoc, &depth, &options) == FAILURE) { - return; - } - - JSON_G(error_code) = 0; - - if (!str_len) { - RETURN_NULL(); - } - - /* For BC reasons, the bool $assoc overrides the long $options bit for PHP_JSON_OBJECT_AS_ARRAY */ - if (assoc) { - options |= PHP_JSON_OBJECT_AS_ARRAY; - } else { - options &= ~PHP_JSON_OBJECT_AS_ARRAY; - } - - php_json_decode_ex(return_value, str, str_len, options, depth TSRMLS_CC); -} -/* }}} */ - -/* {{{ proto int json_last_error() - Returns the error code of the last json_encode() or json_decode() call. */ -static PHP_FUNCTION(json_last_error) -{ - if (zend_parse_parameters_none() == FAILURE) { - return; - } - - RETURN_LONG(JSON_G(error_code)); -} -/* }}} */ - -/* {{{ proto string json_last_error_msg() - Returns the error string of the last json_encode() or json_decode() call. */ -static PHP_FUNCTION(json_last_error_msg) -{ - if (zend_parse_parameters_none() == FAILURE) { - return; - } - - switch(JSON_G(error_code)) { - case PHP_JSON_ERROR_NONE: - RETURN_STRING("No error", 1); - case PHP_JSON_ERROR_DEPTH: - RETURN_STRING("Maximum stack depth exceeded", 1); - case PHP_JSON_ERROR_STATE_MISMATCH: - RETURN_STRING("State mismatch (invalid or malformed JSON)", 1); - case PHP_JSON_ERROR_CTRL_CHAR: - RETURN_STRING("Control character error, possibly incorrectly encoded", 1); - case PHP_JSON_ERROR_SYNTAX: - RETURN_STRING("Syntax error", 1); - case PHP_JSON_ERROR_UTF8: - RETURN_STRING("Malformed UTF-8 characters, possibly incorrectly encoded", 1); - case PHP_JSON_ERROR_RECURSION: - RETURN_STRING("Recursion detected", 1); - case PHP_JSON_ERROR_INF_OR_NAN: - RETURN_STRING("Inf and NaN cannot be JSON encoded", 1); - case PHP_JSON_ERROR_UNSUPPORTED_TYPE: - RETURN_STRING("Type is not supported", 1); - default: - RETURN_STRING("Unknown error", 1); - } - -} -/* }}} */ - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * End: - * vim600: noet sw=4 ts=4 fdm=marker - * vim<600: noet sw=4 ts=4 - */ diff --git a/ext/json/json.dsp b/ext/json/json.dsp deleted file mode 100644 index e5bb3767b..000000000 --- a/ext/json/json.dsp +++ /dev/null @@ -1,135 +0,0 @@ -# Microsoft Developer Studio Project File - Name="json" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=json - Win32 Debug_TS
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "json.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "json.mak" CFG="json - Win32 Debug_TS"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "json - Win32 Debug_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "json - Win32 Release_TS" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "json - Win32 Debug_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug_TS"
-# PROP BASE Intermediate_Dir "Debug_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug_TS"
-# PROP Intermediate_Dir "Debug_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "JSON_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /I "json_c" /D HAVE_JSON=1 /D "ZEND_WIN32" /D "PHP_WIN32" /D ZEND_DEBUG=1 /D ZTS=1 /D COMPILE_DL_JSON=1 /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "JSON_EXPORTS" /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x1009 /d "_DEBUG"
-# ADD RSC /l 0x1009 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 iconv.lib php4ts_debug.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"..\..\Debug_TS/php_json.dll" /pdbtype:sept /libpath:"..\..\Debug_TS"
-
-!ELSEIF "$(CFG)" == "json - Win32 Release_TS"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release_TS"
-# PROP BASE Intermediate_Dir "Release_TS"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release_TS"
-# PROP Intermediate_Dir "Release_TS"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "JSON_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\.." /I "..\..\main" /I "..\..\Zend" /I "..\..\TSRM" /I "json_c" /D HAVE_JSON=1 /D "ZEND_WIN32" /D ZEND_DEBUG=0 /D "PHP_WIN32" /D ZTS=1 /D COMPILE_DL_JSON=1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "JSON_EXPORTS" /D "HAVE_FCNTL_H" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x1009 /d "NDEBUG"
-# ADD RSC /l 0x1009 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 iconv.lib php4ts.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"..\..\Release_TS/php_json.dll" /libpath:"..\..\Release_TS"
-
-!ENDIF
-
-# Begin Target
-
-# Name "json - Win32 Debug_TS"
-# Name "json - Win32 Release_TS"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=".\json.c"
-# End Source File
-# Begin Source File
-
-SOURCE=.\JSON_parser.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\JSON_parser.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\utf8_decode.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\utf8_decode.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\utf8_to_utf16.c
-# End Source File
-# Begin Source File
-
-SOURCE=.\utf8_to_utf16.h
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\php_json.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# End Target
-# End Project
diff --git a/ext/json/package.xml b/ext/json/package.xml deleted file mode 100644 index 0651de736..000000000 --- a/ext/json/package.xml +++ /dev/null @@ -1,152 +0,0 @@ -<?xml version="1.0" encoding="ISO-8859-1" ?> -<!DOCTYPE package SYSTEM "../pear/package.dtd"> -<package> - <dep type="php" rel="ge" version="4.3.0" optional="no"/> - <name>json</name> - <summary>JavaScript Object Notation</summary> - <maintainers> - <maintainer> - <user>omar</user> - <name>Omar Kilani</name> - <email>omar@php.net</email> - <role>lead</role> - </maintainer> - </maintainers> - <description> - Support for JSON (JavaScript Object Notation) serialization. - </description> - <license>PHP 3.01</license> - <release> - <state>stable</state> - <version>1.2.1</version> - <date>2006-03-18</date> - <notes> - Fix PECL bug #7147 - rework handling of comma insertion while encoding. - Add tests to package.xml - </notes> - </release> - <configureoptions> - </configureoptions> - <filelist> - <file role="doc" name="README" /> - <file role="src" name="config.m4" /> - <file role="src" name="config.w32" /> - <file role="src" name="json.dsp" /> - <file role="src" name="json.c" /> - <file role="src" name="JSON_parser.c" /> - <file role="src" name="JSON_parser.h" /> - <file role="src" name="php_json.h" /> - <file role="src" name="utf8_decode.c" /> - <file role="src" name="utf8_decode.h" /> - <file role="src" name="utf8_to_utf16.c" /> - <file role="src" name="utf8_to_utf16.h" /> - <dir role="test" name="tests"> - <file role="test" name="fail001.phpt" /> - <file role="test" name="pass001.phpt" /> - <file role="test" name="pass001.1.phpt" /> - <file role="test" name="pass002.phpt" /> - <file role="test" name="pass003.phpt" /> - </dir> - </filelist> - <changelog> - <release> - <state>stable</state> - <version>1.0.0</version> - <date>2005-04-01</date> - <notes> - Initial release. - </notes> - </release> - <release> - <state>stable</state> - <version>1.0.1</version> - <date>2005-06-10</date> - <notes> - Fixed non-linear and mixed type array index issues, fixed issues with escaping \\, forked json-c and added Unicode support. - </notes> - </release> - <release> - <state>stable</state> - <version>1.0.2</version> - <date>2005-06-11</date> - <notes> - Fixed issues with object reference counts under PHP4. - </notes> - </release> - <release> - <state>stable</state> - <version>1.0.3</version> - <date>2005-06-15</date> - <notes> - Fixed json-c string corruption issues under Mac OS X and FreeBSD. - </notes> - </release> - <release> - <state>stable</state> - <version>1.0.4</version> - <date>2005-06-15</date> - <notes> - Changes in 1.0.4 released with 1.0.5. - </notes> - </release> - <release> - <state>stable</state> - <version>1.0.5</version> - <date>2005-06-16</date> - <notes> - Changed spacing in json-c encoding, added optional assoc (boolean) parameter to json_decode to decode as associative array instead of object, fixed issues with escaping /. - </notes> - </release> - <release> - <state>stable</state> - <version>1.0.6</version> - <date>2005-08-05</date> - <notes> - Fixed issues with exporting private and protected class members. - </notes> - </release> - <release> - <state>stable</state> - <version>1.0.7</version> - <date>2005-09-07</date> - <notes> - Fixed issues with negative array keys, modified json-c to return an error on unquoted object key names instead of going into an infinite loop. - </notes> - </release> - <release> - <state>stable</state> - <version>1.0.8</version> - <date>2005-12-01</date> - <notes> - Changed license to LGPL, modified build system to allow static compilation into PHP, added strndup check for json-c. - </notes> - </release> - <release> - <state>stable</state> - <version>1.1.0</version> - <date>2005-12-04</date> - <notes> - Port to Win32. - </notes> - </release> - <release> - <state>stable</state> - <version>1.1.1</version> - <date>2006-01-12</date> - <notes> - Cleanup and TSRM performance fixes by rasmus. - </notes> - </release> - <release> - <state>stable</state> - <version>1.2.0</version> - <date>2006-03-15</date> - <notes> - Complete rewrite using JSON_checker as the base for the parser. Implements the JSON specification. 3-8x faster on encodes and 1.2x-4x faster on decodes. - </notes> - </release> - </changelog> -</package> -<!-- -vim:et:ts=1:sw=1 ---> diff --git a/ext/json/php_json.h b/ext/json/php_json.h deleted file mode 100644 index ec707ce34..000000000 --- a/ext/json/php_json.h +++ /dev/null @@ -1,92 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2013 The PHP Group | - +----------------------------------------------------------------------+ - | This source file is subject to version 3.01 of the PHP license, | - | that is bundled with this package in the file LICENSE, and is | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Omar Kilani <omar@php.net> | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ - -#ifndef PHP_JSON_H -#define PHP_JSON_H - -#define PHP_JSON_VERSION "1.2.1" -#include "ext/standard/php_smart_str.h" - -extern zend_module_entry json_module_entry; -#define phpext_json_ptr &json_module_entry - -#if defined(PHP_WIN32) && defined(JSON_EXPORTS) -#define PHP_JSON_API __declspec(dllexport) -#else -#define PHP_JSON_API PHPAPI -#endif - -#ifdef ZTS -#include "TSRM.h" -#endif - -ZEND_BEGIN_MODULE_GLOBALS(json) - int encoder_depth; - int error_code; - int encode_max_depth; -ZEND_END_MODULE_GLOBALS(json) - -#ifdef ZTS -# define JSON_G(v) TSRMG(json_globals_id, zend_json_globals *, v) -#else -# define JSON_G(v) (json_globals.v) -#endif - -PHP_JSON_API void php_json_encode(smart_str *buf, zval *val, int options TSRMLS_DC); -PHP_JSON_API void php_json_decode_ex(zval *return_value, char *str, int str_len, int options, long depth TSRMLS_DC); -extern zend_class_entry *php_json_serializable_ce; - - -/* json_encode() options */ -#define PHP_JSON_HEX_TAG (1<<0) -#define PHP_JSON_HEX_AMP (1<<1) -#define PHP_JSON_HEX_APOS (1<<2) -#define PHP_JSON_HEX_QUOT (1<<3) -#define PHP_JSON_FORCE_OBJECT (1<<4) -#define PHP_JSON_NUMERIC_CHECK (1<<5) -#define PHP_JSON_UNESCAPED_SLASHES (1<<6) -#define PHP_JSON_PRETTY_PRINT (1<<7) -#define PHP_JSON_UNESCAPED_UNICODE (1<<8) -#define PHP_JSON_PARTIAL_OUTPUT_ON_ERROR (1<<9) - -/* Internal flags */ -#define PHP_JSON_OUTPUT_ARRAY 0 -#define PHP_JSON_OUTPUT_OBJECT 1 - -/* json_decode() options */ -#define PHP_JSON_OBJECT_AS_ARRAY (1<<0) -#define PHP_JSON_BIGINT_AS_STRING (1<<1) - -static inline void php_json_decode(zval *return_value, char *str, int str_len, zend_bool assoc, long depth TSRMLS_DC) -{ - php_json_decode_ex(return_value, str, str_len, assoc ? PHP_JSON_OBJECT_AS_ARRAY : 0, depth TSRMLS_CC); -} - - -#endif /* PHP_JSON_H */ - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * End: - * vim600: noet sw=4 ts=4 fdm=marker - * vim<600: noet sw=4 ts=4 - */ diff --git a/ext/json/tests/001.phpt b/ext/json/tests/001.phpt deleted file mode 100644 index 02d43c424..000000000 --- a/ext/json/tests/001.phpt +++ /dev/null @@ -1,71 +0,0 @@ ---TEST-- -json_decode() tests ---SKIPIF-- -<?php if (!extension_loaded("json")) print "skip"; ?> ---FILE-- -<?php - -var_dump(json_decode()); -var_dump(json_decode("")); -var_dump(json_decode("", 1)); -var_dump(json_decode("", 0)); -var_dump(json_decode(".", 1)); -var_dump(json_decode(".", 0)); -var_dump(json_decode("<?>")); -var_dump(json_decode(";")); -var_dump(json_decode("руссиш")); -var_dump(json_decode("blah")); -var_dump(json_decode(NULL)); -var_dump(json_decode('{ "test": { "foo": "bar" } }')); -var_dump(json_decode('{ "test": { "foo": "" } }')); -var_dump(json_decode('{ "": { "foo": "" } }')); -var_dump(json_decode('{ "": { "": "" } }')); -var_dump(json_decode('{ "": { "": "" }')); -var_dump(json_decode('{ "": "": "" } }')); - -?> -===DONE=== ---EXPECTF-- -Warning: json_decode() expects at least 1 parameter, 0 given in %s on line %d -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -NULL -object(stdClass)#%d (1) { - ["test"]=> - object(stdClass)#%d (1) { - ["foo"]=> - string(3) "bar" - } -} -object(stdClass)#%d (1) { - ["test"]=> - object(stdClass)#%d (1) { - ["foo"]=> - string(0) "" - } -} -object(stdClass)#%d (1) { - ["_empty_"]=> - object(stdClass)#%d (1) { - ["foo"]=> - string(0) "" - } -} -object(stdClass)#%d (1) { - ["_empty_"]=> - object(stdClass)#%d (1) { - ["_empty_"]=> - string(0) "" - } -} -NULL -NULL -===DONE=== diff --git a/ext/json/tests/002.phpt b/ext/json/tests/002.phpt deleted file mode 100644 index 5959d4a5f..000000000 --- a/ext/json/tests/002.phpt +++ /dev/null @@ -1,38 +0,0 @@ ---TEST-- -json_encode() tests ---SKIPIF-- -<?php if (!extension_loaded("json")) print "skip"; ?> ---FILE-- -<?php - -var_dump(json_encode("")); -var_dump(json_encode(NULL)); -var_dump(json_encode(TRUE)); - -var_dump(json_encode(array(""=>""))); -var_dump(json_encode(array(array(1)))); -var_dump(json_encode(array())); - -var_dump(json_encode(array(""=>""), JSON_FORCE_OBJECT)); -var_dump(json_encode(array(array(1)), JSON_FORCE_OBJECT)); -var_dump(json_encode(array(), JSON_FORCE_OBJECT)); - -var_dump(json_encode(1)); -var_dump(json_encode("руссиш")); - - -echo "Done\n"; -?> ---EXPECTF-- -string(2) """" -string(4) "null" -string(4) "true" -string(7) "{"":""}" -string(5) "[[1]]" -string(2) "[]" -string(7) "{"":""}" -string(13) "{"0":{"0":1}}" -string(2) "{}" -string(1) "1" -string(38) ""\u0440\u0443\u0441\u0441\u0438\u0448"" -Done diff --git a/ext/json/tests/003.phpt b/ext/json/tests/003.phpt deleted file mode 100644 index 4ce5b0fde..000000000 --- a/ext/json/tests/003.phpt +++ /dev/null @@ -1,41 +0,0 @@ ---TEST-- -json_encode() & endless loop - 1 ---SKIPIF-- -<?php if (!extension_loaded("json")) print "skip"; ?> ---FILE-- -<?php - -$a = array(); -$a[] = &$a; - -var_dump($a); - -echo "\n"; - -var_dump(json_encode($a)); -var_dump(json_last_error(), json_last_error_msg()); - -echo "\n"; - -var_dump(json_encode($a, JSON_PARTIAL_OUTPUT_ON_ERROR)); -var_dump(json_last_error(), json_last_error_msg()); - -echo "Done\n"; -?> ---EXPECTF-- -array(1) { - [0]=> - &array(1) { - [0]=> - *RECURSION* - } -} - -bool(false) -int(6) -string(%d) "Recursion detected" - -string(8) "[[null]]" -int(6) -string(%d) "Recursion detected" -Done diff --git a/ext/json/tests/004.phpt b/ext/json/tests/004.phpt deleted file mode 100644 index 70ef3ffd1..000000000 --- a/ext/json/tests/004.phpt +++ /dev/null @@ -1,38 +0,0 @@ ---TEST-- -json_encode() & endless loop - 2 ---SKIPIF-- -<?php if (!extension_loaded("json")) print "skip"; ?> ---FILE-- -<?php - -$a = new stdclass; -$a->prop = $a; - -var_dump($a); - -echo "\n"; - -var_dump(json_encode($a)); -var_dump(json_last_error(), json_last_error_msg()); - -echo "\n"; - -var_dump(json_encode($a, JSON_PARTIAL_OUTPUT_ON_ERROR)); -var_dump(json_last_error(), json_last_error_msg()); - -echo "Done\n"; -?> ---EXPECTF-- -object(stdClass)#%d (1) { - ["prop"]=> - *RECURSION* -} - -bool(false) -int(6) -string(%d) "Recursion detected" - -string(22) "{"prop":{"prop":null}}" -int(6) -string(%d) "Recursion detected" -Done diff --git a/ext/json/tests/005.phpt b/ext/json/tests/005.phpt deleted file mode 100644 index 01a307f4a..000000000 --- a/ext/json/tests/005.phpt +++ /dev/null @@ -1,23 +0,0 @@ ---TEST-- -json_encode() & endless loop - 3 ---SKIPIF-- -<?php if (!extension_loaded("json")) print "skip"; ?> ---FILE-- -<?php - -$a = array(); -$a[] = $a; - -var_dump($a); -var_dump(json_encode($a)); - -echo "Done\n"; -?> ---EXPECTF-- -array(1) { - [0]=> - array(0) { - } -} -string(4) "[[]]" -Done diff --git a/ext/json/tests/006.phpt b/ext/json/tests/006.phpt deleted file mode 100644 index e1d4b4688..000000000 --- a/ext/json/tests/006.phpt +++ /dev/null @@ -1,23 +0,0 @@ ---TEST-- -json_encode() & extended encoding ---SKIPIF-- -<?php if (!extension_loaded("json")) print "skip"; ?> ---FILE-- -<?php - -$a = array('<foo>',"'bar'",'"baz"','&blong&'); - -echo "Normal: ", json_encode($a), "\n"; -echo "Tags: ", json_encode($a,JSON_HEX_TAG), "\n"; -echo "Apos: ", json_encode($a,JSON_HEX_APOS), "\n"; -echo "Quot: ", json_encode($a,JSON_HEX_QUOT), "\n"; -echo "Amp: ", json_encode($a,JSON_HEX_AMP), "\n"; -echo "All: ", json_encode($a,JSON_HEX_TAG|JSON_HEX_APOS|JSON_HEX_QUOT|JSON_HEX_AMP), "\n"; -?> ---EXPECT-- -Normal: ["<foo>","'bar'","\"baz\"","&blong&"] -Tags: ["\u003Cfoo\u003E","'bar'","\"baz\"","&blong&"] -Apos: ["<foo>","\u0027bar\u0027","\"baz\"","&blong&"] -Quot: ["<foo>","'bar'","\u0022baz\u0022","&blong&"] -Amp: ["<foo>","'bar'","\"baz\"","\u0026blong\u0026"] -All: ["\u003Cfoo\u003E","\u0027bar\u0027","\u0022baz\u0022","\u0026blong\u0026"] diff --git a/ext/json/tests/007.phpt b/ext/json/tests/007.phpt deleted file mode 100644 index 7557ac9ed..000000000 --- a/ext/json/tests/007.phpt +++ /dev/null @@ -1,40 +0,0 @@ ---TEST-- -json_last_error() tests ---SKIPIF-- -<?php if (!extension_loaded("json")) print "skip"; ?> ---FILE-- -<?php -var_dump(json_decode("[1]")); -var_dump(json_last_error(), json_last_error_msg()); -var_dump(json_decode("[[1]]", false, 2)); -var_dump(json_last_error(), json_last_error_msg()); -var_dump(json_decode("[1}")); -var_dump(json_last_error(), json_last_error_msg()); -var_dump(json_decode('["' . chr(0) . 'abcd"]')); -var_dump(json_last_error(), json_last_error_msg()); -var_dump(json_decode("[1")); -var_dump(json_last_error(), json_last_error_msg()); - - -echo "Done\n"; -?> ---EXPECT-- -array(1) { - [0]=> - int(1) -} -int(0) -string(8) "No error" -NULL -int(1) -string(28) "Maximum stack depth exceeded" -NULL -int(2) -string(42) "State mismatch (invalid or malformed JSON)" -NULL -int(3) -string(53) "Control character error, possibly incorrectly encoded" -NULL -int(4) -string(12) "Syntax error" -Done diff --git a/ext/json/tests/008.phpt b/ext/json/tests/008.phpt deleted file mode 100644 index f2354d381..000000000 --- a/ext/json/tests/008.phpt +++ /dev/null @@ -1,17 +0,0 @@ ---TEST-- -json_decode() with large integers ---SKIPIF-- -<?php if (!extension_loaded("json")) print "skip"; ?> ---FILE-- -<?php -$json = '{"largenum":123456789012345678901234567890}'; -$x = json_decode($json); -var_dump($x->largenum); -$x = json_decode($json, false, 512, JSON_BIGINT_AS_STRING); -var_dump($x->largenum); -echo "Done\n"; -?> ---EXPECT-- -float(1.2345678901235E+29) -string(30) "123456789012345678901234567890" -Done diff --git a/ext/json/tests/bug40503.phpt b/ext/json/tests/bug40503.phpt deleted file mode 100644 index 48f18a4e0..000000000 --- a/ext/json/tests/bug40503.phpt +++ /dev/null @@ -1,21 +0,0 @@ ---TEST-- -Bug #40503 (json_encode() value corruption on 32bit systems with overflown values) ---INI-- -precision=14 ---SKIPIF-- -<?php if (!extension_loaded("json")) print "skip"; ?> ---FILE-- -<?php -function show_eq($x,$y) { - echo "$x ". ($x==$y ? "==" : "!=") ." $y\n"; -} - -$value = 0x7FFFFFFF; #2147483647; -show_eq("$value", json_encode($value)); -$value++; -show_eq("$value", json_encode($value)); - -?> ---EXPECT-- -2147483647 == 2147483647 -2147483648 == 2147483648 diff --git a/ext/json/tests/bug41034.phpt b/ext/json/tests/bug41034.phpt deleted file mode 100644 index cc7704122..000000000 --- a/ext/json/tests/bug41034.phpt +++ /dev/null @@ -1,12 +0,0 @@ ---TEST-- -Bug #41034 (json_encode() ignores null byte started keys in arrays) ---SKIPIF-- -<?php if (!extension_loaded("json")) print "skip"; ?> ---FILE-- -<?php -echo json_encode(array(0,"\0ab"=>1,"\0null-prefixed value")); -echo "\nDone\n"; -?> ---EXPECT-- -{"0":0,"\u0000ab":1,"1":"\u0000null-prefixed value"} -Done diff --git a/ext/json/tests/bug41067.phpt b/ext/json/tests/bug41067.phpt deleted file mode 100644 index b20e6e1b5..000000000 --- a/ext/json/tests/bug41067.phpt +++ /dev/null @@ -1,23 +0,0 @@ ---TEST-- -Bug #41067 (json_encode() problem with UTF-16 input) ---SKIPIF-- -<?php if (!extension_loaded("json")) print "skip"; ?> ---FILE-- -<?php -$single_barline = "\360\235\204\200"; -$array = array($single_barline); -print bin2hex($single_barline) . "\n"; -// print $single_barline . "\n\n"; -$json = json_encode($array); -print $json . "\n\n"; -$json_decoded = json_decode($json, true); -// print $json_decoded[0] . "\n"; -print bin2hex($json_decoded[0]) . "\n"; -print "END\n"; -?> ---EXPECT-- -f09d8480 -["\ud834\udd00"] - -f09d8480 -END diff --git a/ext/json/tests/bug41403.phpt b/ext/json/tests/bug41403.phpt deleted file mode 100644 index 1a7343122..000000000 --- a/ext/json/tests/bug41403.phpt +++ /dev/null @@ -1,44 +0,0 @@ ---TEST-- -Bug #41403 (json_decode cannot decode floats if localeconv decimal_point is not '.') ---SKIPIF-- -<?php - -if (!extension_loaded('json')) die('skip'); - -if (setlocale(LC_NUMERIC, "de_DE") === false) { - die("skip no de_DE locale"); -} -?> ---INI-- -precision=14 ---FILE-- -<?php - -setlocale(LC_NUMERIC, 'de_DE'); -var_dump(json_decode('[2.1]')); -var_dump(json_decode('[0.15]')); -var_dump(json_decode('[123.13452345]')); -var_dump(json_decode('[123,13452345]')); - -echo "Done\n"; -?> ---EXPECTF-- -array(1) { - [0]=> - float(2,1) -} -array(1) { - [0]=> - float(0,15) -} -array(1) { - [0]=> - float(123,13452345) -} -array(2) { - [0]=> - int(123) - [1]=> - int(13452345) -} -Done diff --git a/ext/json/tests/bug41504.phpt b/ext/json/tests/bug41504.phpt deleted file mode 100644 index bef497404..000000000 --- a/ext/json/tests/bug41504.phpt +++ /dev/null @@ -1,31 +0,0 @@ ---TEST-- -Bug #41504 (json_decode() converts empty array keys to "_empty_") ---SKIPIF-- -<?php if (!extension_loaded('json')) print 'skip'; ?> ---FILE-- -<?php - -var_dump(json_decode('{"":"value"}', true)); -var_dump(json_decode('{"":"value", "key":"value"}', true)); -var_dump(json_decode('{"key":"value", "":"value"}', true)); - -echo "Done\n"; -?> ---EXPECT-- -array(1) { - [""]=> - string(5) "value" -} -array(2) { - [""]=> - string(5) "value" - ["key"]=> - string(5) "value" -} -array(2) { - ["key"]=> - string(5) "value" - [""]=> - string(5) "value" -} -Done diff --git a/ext/json/tests/bug41567.phpt b/ext/json/tests/bug41567.phpt deleted file mode 100644 index a253a47b7..000000000 --- a/ext/json/tests/bug41567.phpt +++ /dev/null @@ -1,17 +0,0 @@ ---TEST-- -Bug #41567 (json_encode() double conversion is inconsistent with PHP) ---INI-- -precision=14 ---SKIPIF-- -<?php if (!extension_loaded('json')) print 'skip'; ?> ---FILE-- -<?php - -$a = json_encode(123456789.12345); -var_dump(json_decode($a)); - -echo "Done\n"; -?> ---EXPECT-- -float(123456789.12345) -Done diff --git a/ext/json/tests/bug42090.phpt b/ext/json/tests/bug42090.phpt deleted file mode 100644 index 9e5b3317e..000000000 --- a/ext/json/tests/bug42090.phpt +++ /dev/null @@ -1,24 +0,0 @@ ---TEST-- -Bug #42090 (json_decode causes segmentation fault) ---SKIPIF-- -<?php if (!extension_loaded("json")) print "skip"; ?> ---FILE-- -<?php -var_dump( - json_decode('""'), - json_decode('"..".'), - json_decode('"'), - json_decode('""""'), - json_encode('"'), - json_decode(json_encode('"')), - json_decode(json_encode('""')) -); -?> ---EXPECT-- -string(0) "" -NULL -NULL -NULL -string(4) ""\""" -string(1) """ -string(2) """" diff --git a/ext/json/tests/bug42785.phpt b/ext/json/tests/bug42785.phpt deleted file mode 100644 index 7bdadbed1..000000000 --- a/ext/json/tests/bug42785.phpt +++ /dev/null @@ -1,26 +0,0 @@ ---TEST-- -Bug #42785 (Incorrect formatting of double values with non-english locales) ---SKIPIF-- -<?php - if (!extension_loaded("json")) { - print "skip"; - } else if (!setlocale(LC_CTYPE, "de_DE", "de", "german", "ge", "de_DE.ISO8859-1", "ISO8859-1")) { - die("skip locale needed for this test is not supported on this platform"); - } -?> ---FILE-- -<?php -setlocale(LC_ALL, "de_DE", "de", "german", "ge", "de_DE.ISO8859-1", "ISO8859-1"); - -$foo = Array(100.10,"bar"); -var_dump(json_encode($foo)); - -Class bar {} -$bar1 = new bar; -$bar1->a = 100.10; -$bar1->b = "foo"; -var_dump(json_encode($bar1)); -?> ---EXPECT-- -string(13) "[100.1,"bar"]" -string(21) "{"a":100.1,"b":"foo"}" diff --git a/ext/json/tests/bug43941.phpt b/ext/json/tests/bug43941.phpt deleted file mode 100644 index 48bd7ad52..000000000 --- a/ext/json/tests/bug43941.phpt +++ /dev/null @@ -1,20 +0,0 @@ ---TEST-- -Bug #43941 (json_encode() invalid UTF-8) ---SKIPIF-- -<?php if (!extension_loaded("json")) print "skip"; ?> ---FILE-- -<?php - -var_dump(json_encode("abc")); -var_dump(json_encode("ab\xE0")); -var_dump(json_encode("ab\xE0", JSON_PARTIAL_OUTPUT_ON_ERROR)); -var_dump(json_encode(array("ab\xE0", "ab\xE0c", "abc"), JSON_PARTIAL_OUTPUT_ON_ERROR)); - -echo "Done\n"; -?> ---EXPECTF-- -string(5) ""abc"" -bool(false) -string(4) "null" -string(17) "[null,null,"abc"]" -Done diff --git a/ext/json/tests/bug45791.phpt b/ext/json/tests/bug45791.phpt deleted file mode 100644 index 7d3706825..000000000 --- a/ext/json/tests/bug45791.phpt +++ /dev/null @@ -1,15 +0,0 @@ ---TEST-- -Bug #45791 (json_decode() does not handle number 0e0) ---SKIPIF-- -<?php if (!extension_loaded("json")) print "skip"; ?> ---FILE-- -<?php - -var_dump(json_decode('{"zero": 0e0}')); - -?> ---EXPECT-- -object(stdClass)#1 (1) { - ["zero"]=> - float(0) -} diff --git a/ext/json/tests/bug46215.phpt b/ext/json/tests/bug46215.phpt deleted file mode 100644 index 0ac460cc1..000000000 --- a/ext/json/tests/bug46215.phpt +++ /dev/null @@ -1,29 +0,0 @@ ---TEST-- -Bug #46215 (json_encode mutates its parameter and has some class-specific state) ---SKIPIF-- -<?php -if (!extension_loaded("json")) { - die('skip JSON extension not available in this build'); -} -?> ---FILE-- -<?php - -class foo { - protected $a = array(); -} - -$a = new foo; -$x = json_encode($a); - -print_r($a); - -?> ---EXPECT-- -foo Object -( - [a:protected] => Array - ( - ) - -) diff --git a/ext/json/tests/bug46944.phpt b/ext/json/tests/bug46944.phpt deleted file mode 100644 index 812a54887..000000000 --- a/ext/json/tests/bug46944.phpt +++ /dev/null @@ -1,35 +0,0 @@ ---TEST-- -Bug #46944 (json_encode() doesn't handle 3 byte utf8 correctly) ---SKIPIF-- -<?php if (!extension_loaded('json')) print 'skip'; ?> ---FILE-- -<?php - -for ($i = 1; $i <= 16; $i++) { - $first = 0xf0|($i >> 2); - $second = 0x8f|($i & 3) << 4; - $string = sprintf("aa%c%c\xbf\xbdzz", $first, $second); - echo json_encode($string) . "\n"; -} - - -echo "Done\n"; -?> ---EXPECT-- -"aa\ud83f\udffdzz" -"aa\ud87f\udffdzz" -"aa\ud8bf\udffdzz" -"aa\ud8ff\udffdzz" -"aa\ud93f\udffdzz" -"aa\ud97f\udffdzz" -"aa\ud9bf\udffdzz" -"aa\ud9ff\udffdzz" -"aa\uda3f\udffdzz" -"aa\uda7f\udffdzz" -"aa\udabf\udffdzz" -"aa\udaff\udffdzz" -"aa\udb3f\udffdzz" -"aa\udb7f\udffdzz" -"aa\udbbf\udffdzz" -"aa\udbff\udffdzz" -Done diff --git a/ext/json/tests/bug47644.phpt b/ext/json/tests/bug47644.phpt deleted file mode 100644 index 5e996b697..000000000 --- a/ext/json/tests/bug47644.phpt +++ /dev/null @@ -1,43 +0,0 @@ ---TEST-- -Bug #47644 (valid large integers are truncated) ---SKIPIF-- -<?php - if (!extension_loaded('json')) die('skip: json extension not available'); - if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only"); -?> ---FILE-- -<?php - -for ($i = 10000000000000000; $i < 10000000000000006; $i++) { - var_dump(json_decode("[$i]")); -} - - -echo "Done\n"; -?> ---EXPECT-- -array(1) { - [0]=> - int(10000000000000000) -} -array(1) { - [0]=> - int(10000000000000001) -} -array(1) { - [0]=> - int(10000000000000002) -} -array(1) { - [0]=> - int(10000000000000003) -} -array(1) { - [0]=> - int(10000000000000004) -} -array(1) { - [0]=> - int(10000000000000005) -} -Done diff --git a/ext/json/tests/bug53946.phpt b/ext/json/tests/bug53946.phpt deleted file mode 100644 index 111438ddc..000000000 --- a/ext/json/tests/bug53946.phpt +++ /dev/null @@ -1,16 +0,0 @@ ---TEST-- -bug #53946 (json_encode() with JSON_UNESCAPED_UNICODE) ---SKIPIF-- -<?php if (!extension_loaded("json")) print "skip"; ?> ---FILE-- -<?php -var_dump(json_encode("latin 1234 -/ russian мама мыла раму specialchars \x02 \x08 \n U+1D11E >𝄞<")); -var_dump(json_encode("latin 1234 -/ russian мама мыла раму specialchars \x02 \x08 \n U+1D11E >𝄞<", JSON_UNESCAPED_UNICODE)); -var_dump(json_encode("ab\xE0")); -var_dump(json_encode("ab\xE0", JSON_UNESCAPED_UNICODE)); -?> ---EXPECTF-- -string(156) ""latin 1234 -\/ russian \u043c\u0430\u043c\u0430 \u043c\u044b\u043b\u0430 \u0440\u0430\u043c\u0443 specialchars \u0002 \b \n U+1D11E >\ud834\udd1e<"" -string(100) ""latin 1234 -\/ russian мама мыла раму specialchars \u0002 \b \n U+1D11E >𝄞<"" -bool(false) -bool(false) diff --git a/ext/json/tests/bug54058.phpt b/ext/json/tests/bug54058.phpt deleted file mode 100644 index df1b3130f..000000000 --- a/ext/json/tests/bug54058.phpt +++ /dev/null @@ -1,40 +0,0 @@ ---TEST-- -Bug #54058 (json_last_error() invalid UTF-8 produces wrong error) ---SKIPIF-- -<?php if (!extension_loaded("json")) print "skip"; ?> ---FILE-- -<?php - -$bad_utf8 = quoted_printable_decode('=B0'); - -json_encode($bad_utf8); -var_dump(json_last_error(), json_last_error_msg()); - -$a = new stdclass; -$a->foo = quoted_printable_decode('=B0'); -json_encode($a); -var_dump(json_last_error(), json_last_error_msg()); - -$b = new stdclass; -$b->foo = $bad_utf8; -$b->bar = 1; -json_encode($b); -var_dump(json_last_error(), json_last_error_msg()); - -$c = array( - 'foo' => $bad_utf8, - 'bar' => 1 -); -json_encode($c); -var_dump(json_last_error(), json_last_error_msg()); - -?> ---EXPECTF-- -int(5) -string(56) "Malformed UTF-8 characters, possibly incorrectly encoded" -int(5) -string(56) "Malformed UTF-8 characters, possibly incorrectly encoded" -int(5) -string(56) "Malformed UTF-8 characters, possibly incorrectly encoded" -int(5) -string(56) "Malformed UTF-8 characters, possibly incorrectly encoded" diff --git a/ext/json/tests/bug54484.phpt b/ext/json/tests/bug54484.phpt deleted file mode 100644 index d698ab541..000000000 --- a/ext/json/tests/bug54484.phpt +++ /dev/null @@ -1,25 +0,0 @@ ---TEST-- -Bug #54484 (Empty string in json_decode doesn't reset json_last_error) ---SKIPIF-- -<?php if (!extension_loaded("json")) print "skip"; ?> ---FILE-- -<?php -json_decode('{"test":"test"}'); -var_dump(json_last_error()); - -json_decode(""); -var_dump(json_last_error()); - - -json_decode("invalid json"); -var_dump(json_last_error()); - - -json_decode(""); -var_dump(json_last_error()); -?> ---EXPECT-- -int(0) -int(0) -int(4) -int(0) diff --git a/ext/json/tests/bug55543.phpt b/ext/json/tests/bug55543.phpt deleted file mode 100644 index 8657fe776..000000000 --- a/ext/json/tests/bug55543.phpt +++ /dev/null @@ -1,13 +0,0 @@ ---TEST-- -Bug #55543 (json_encode() with JSON_NUMERIC_CHECK & numeric string properties) ---SKIPIF-- -<?php if (!extension_loaded("json")) print "skip"; ?> ---FILE-- -<?php -$a = new stdClass; -$a->{"1"} = "5"; - -var_dump(json_encode($a, JSON_NUMERIC_CHECK)); -?> ---EXPECT-- -string(7) "{"1":5}" diff --git a/ext/json/tests/bug61537.phpt b/ext/json/tests/bug61537.phpt deleted file mode 100644 index 80ed051c9..000000000 --- a/ext/json/tests/bug61537.phpt +++ /dev/null @@ -1,39 +0,0 @@ ---TEST-- -Bug #61537 (json_encode() incorrectly truncates/discards information) ---SKIPIF-- -<?php if (!extension_loaded("json")) print "skip"; ?> ---FILE-- -<?php -$invalid_utf8 = "\x9f"; - -var_dump(json_encode($invalid_utf8)); -var_dump(json_last_error(), json_last_error_msg()); - -var_dump(json_encode($invalid_utf8, JSON_PARTIAL_OUTPUT_ON_ERROR)); -var_dump(json_last_error(), json_last_error_msg()); - -echo "\n"; - -$invalid_utf8 = "an invalid sequen\xce in the middle of a string"; - -var_dump(json_encode($invalid_utf8)); -var_dump(json_last_error(), json_last_error_msg()); - -var_dump(json_encode($invalid_utf8, JSON_PARTIAL_OUTPUT_ON_ERROR)); -var_dump(json_last_error(), json_last_error_msg()); - -?> ---EXPECTF-- -bool(false) -int(5) -string(56) "Malformed UTF-8 characters, possibly incorrectly encoded" -string(4) "null" -int(5) -string(56) "Malformed UTF-8 characters, possibly incorrectly encoded" - -bool(false) -int(5) -string(56) "Malformed UTF-8 characters, possibly incorrectly encoded" -string(4) "null" -int(5) -string(56) "Malformed UTF-8 characters, possibly incorrectly encoded" diff --git a/ext/json/tests/bug61978.phpt b/ext/json/tests/bug61978.phpt deleted file mode 100644 index c34b03f8f..000000000 --- a/ext/json/tests/bug61978.phpt +++ /dev/null @@ -1,43 +0,0 @@ ---TEST-- -Bug #61978 (Object recursion not detected for classes that implement JsonSerializable) ---SKIPIF-- -<?php if (!extension_loaded("json")) print "skip"; ?> ---FILE-- -<?php - -class JsonTest1 { - public $test; - public $me; - public function __construct() { - $this->test = '123'; - $this->me = $this; - } -} - -class JsonTest2 implements JsonSerializable { - public $test; - public function __construct() { - $this->test = '123'; - } - public function jsonSerialize() { - return array( - 'test' => $this->test, - 'me' => $this - ); - } -} - - -$obj1 = new JsonTest1(); -var_dump(json_encode($obj1, JSON_PARTIAL_OUTPUT_ON_ERROR)); - -echo "==\n"; - -$obj2 = new JsonTest2(); -var_dump(json_encode($obj2, JSON_PARTIAL_OUTPUT_ON_ERROR)); - -?> ---EXPECTF-- -string(44) "{"test":"123","me":{"test":"123","me":null}}" -== -string(44) "{"test":"123","me":{"test":"123","me":null}}" diff --git a/ext/json/tests/bug62369.phpt b/ext/json/tests/bug62369.phpt deleted file mode 100644 index a5efd802c..000000000 --- a/ext/json/tests/bug62369.phpt +++ /dev/null @@ -1,34 +0,0 @@ ---TEST-- -FR #62369 (Segfault on json_encode(deeply_nested_array) ---SKIPIF-- -<?php if (!extension_loaded("json")) print "skip"; ?> ---FILE-- -<?php - -$array = array(); -for ($i=0; $i<550; $i++) { - $array = array($array); -} - -json_encode($array, 0, 551); -switch (json_last_error()) { - case JSON_ERROR_NONE: - echo 'OK'.PHP_EOL; - break; - case JSON_ERROR_DEPTH: - echo 'ERROR'.PHP_EOL; - break; -} - -json_encode($array, 0, 540); -switch (json_last_error()) { - case JSON_ERROR_NONE: - echo 'OK'.PHP_EOL; - break; - case JSON_ERROR_DEPTH: - echo 'ERROR'.PHP_EOL; - break; -} ---EXPECTF-- -OK -ERROR diff --git a/ext/json/tests/bug63737.phpt b/ext/json/tests/bug63737.phpt deleted file mode 100644 index 1fb06d485..000000000 --- a/ext/json/tests/bug63737.phpt +++ /dev/null @@ -1,32 +0,0 @@ ---TEST-- -Bug #63737 (json_decode does not properly decode with options parameter) ---SKIPIF-- -<?php if (!extension_loaded("json")) print "skip"; ?> ---FILE-- -<?php -function decode($json) { - $x = json_decode($json); - var_dump($x); - $x = json_decode($json, false, 512, JSON_BIGINT_AS_STRING); - var_dump($x); -} - -decode('123456789012345678901234567890'); -decode('-123456789012345678901234567890'); - -// This shouldn't affect floats, but let's check that. -decode('123456789012345678901234567890.1'); -decode('-123456789012345678901234567890.1'); - -echo "Done\n"; -?> ---EXPECT-- -float(1.2345678901235E+29) -string(30) "123456789012345678901234567890" -float(-1.2345678901235E+29) -string(31) "-123456789012345678901234567890" -float(1.2345678901235E+29) -float(1.2345678901235E+29) -float(-1.2345678901235E+29) -float(-1.2345678901235E+29) -Done diff --git a/ext/json/tests/fail001.phpt b/ext/json/tests/fail001.phpt deleted file mode 100644 index 1bf9f1210..000000000 --- a/ext/json/tests/fail001.phpt +++ /dev/null @@ -1,166 +0,0 @@ ---TEST-- -JSON (http://www.crockford.com/JSON/JSON_checker/test/fail*.json) ---SKIPIF-- -<?php - if (!extension_loaded('json')) die('skip: json extension not available'); -?> ---FILE-- -<?php - -$tests = array('"A JSON payload should be an object or array, not a string."', - '["Unclosed array"', - '{unquoted_key: "keys must be quoted}', - '["extra comma",]', - '["double extra comma",,]', - '[ , "<-- missing value"]', - '["Comma after the close"],', - '["Extra close"]]', - '{"Extra comma": true,}', - '{"Extra value after close": true} "misplaced quoted value"', - '{"Illegal expression": 1 + 2}', - '{"Illegal invocation": alert()}', - '{"Numbers cannot have leading zeroes": 013}', - '{"Numbers cannot be hex": 0x14}', - '["Illegal backslash escape: \\x15"]', - '["Illegal backslash escape: \\\'"]', - '["Illegal backslash escape: \\017"]', - '[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[["Too deep"]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]', - '{"Missing colon" null}', - '{"Double colon":: null}', - '{"Comma instead of colon", null}', - '["Colon instead of comma": false]', - '["Bad value", truth]', - "['single quote']"); - -foreach ($tests as $test) -{ - echo 'Testing: ' . $test . "\n"; - echo "AS OBJECT\n"; - var_dump(json_decode($test)); - echo "AS ARRAY\n"; - var_dump(json_decode($test, true)); -} - -?> ---EXPECT-- -Testing: "A JSON payload should be an object or array, not a string." -AS OBJECT -string(58) "A JSON payload should be an object or array, not a string." -AS ARRAY -string(58) "A JSON payload should be an object or array, not a string." -Testing: ["Unclosed array" -AS OBJECT -NULL -AS ARRAY -NULL -Testing: {unquoted_key: "keys must be quoted} -AS OBJECT -NULL -AS ARRAY -NULL -Testing: ["extra comma",] -AS OBJECT -NULL -AS ARRAY -NULL -Testing: ["double extra comma",,] -AS OBJECT -NULL -AS ARRAY -NULL -Testing: [ , "<-- missing value"] -AS OBJECT -NULL -AS ARRAY -NULL -Testing: ["Comma after the close"], -AS OBJECT -NULL -AS ARRAY -NULL -Testing: ["Extra close"]] -AS OBJECT -NULL -AS ARRAY -NULL -Testing: {"Extra comma": true,} -AS OBJECT -NULL -AS ARRAY -NULL -Testing: {"Extra value after close": true} "misplaced quoted value" -AS OBJECT -NULL -AS ARRAY -NULL -Testing: {"Illegal expression": 1 + 2} -AS OBJECT -NULL -AS ARRAY -NULL -Testing: {"Illegal invocation": alert()} -AS OBJECT -NULL -AS ARRAY -NULL -Testing: {"Numbers cannot have leading zeroes": 013} -AS OBJECT -NULL -AS ARRAY -NULL -Testing: {"Numbers cannot be hex": 0x14} -AS OBJECT -NULL -AS ARRAY -NULL -Testing: ["Illegal backslash escape: \x15"] -AS OBJECT -NULL -AS ARRAY -NULL -Testing: ["Illegal backslash escape: \'"] -AS OBJECT -NULL -AS ARRAY -NULL -Testing: ["Illegal backslash escape: \017"] -AS OBJECT -NULL -AS ARRAY -NULL -Testing: [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[["Too deep"]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] -AS OBJECT -NULL -AS ARRAY -NULL -Testing: {"Missing colon" null} -AS OBJECT -NULL -AS ARRAY -NULL -Testing: {"Double colon":: null} -AS OBJECT -NULL -AS ARRAY -NULL -Testing: {"Comma instead of colon", null} -AS OBJECT -NULL -AS ARRAY -NULL -Testing: ["Colon instead of comma": false] -AS OBJECT -NULL -AS ARRAY -NULL -Testing: ["Bad value", truth] -AS OBJECT -NULL -AS ARRAY -NULL -Testing: ['single quote'] -AS OBJECT -NULL -AS ARRAY -NULL - diff --git a/ext/json/tests/inf_nan_error.phpt b/ext/json/tests/inf_nan_error.phpt deleted file mode 100644 index f9deecc46..000000000 --- a/ext/json/tests/inf_nan_error.phpt +++ /dev/null @@ -1,45 +0,0 @@ ---TEST-- -An error is thrown when INF or NaN are encoded ---SKIPIF-- -<?php if (!extension_loaded("json")) print "skip"; ?> ---FILE-- -<?php - -$inf = INF; - -var_dump($inf); - -var_dump(json_encode($inf)); -var_dump(json_last_error(), json_last_error_msg()); - -var_dump(json_encode($inf, JSON_PARTIAL_OUTPUT_ON_ERROR)); -var_dump(json_last_error(), json_last_error_msg()); - -echo "\n"; - -$nan = NAN; - -var_dump($nan); - -var_dump(json_encode($nan)); -var_dump(json_last_error(), json_last_error_msg()); - -var_dump(json_encode($nan, JSON_PARTIAL_OUTPUT_ON_ERROR)); -var_dump(json_last_error(), json_last_error_msg()); -?> ---EXPECTF-- -float(INF) -bool(false) -int(7) -string(34) "Inf and NaN cannot be JSON encoded" -string(1) "0" -int(7) -string(34) "Inf and NaN cannot be JSON encoded" - -float(NAN) -bool(false) -int(7) -string(34) "Inf and NaN cannot be JSON encoded" -string(1) "0" -int(7) -string(34) "Inf and NaN cannot be JSON encoded" diff --git a/ext/json/tests/json_decode_basic.phpt b/ext/json/tests/json_decode_basic.phpt deleted file mode 100644 index 6dbeadb36..000000000 --- a/ext/json/tests/json_decode_basic.phpt +++ /dev/null @@ -1,187 +0,0 @@ ---TEST-- -Test json_decode() function : basic functionality ---SKIPIF-- -<?php -if (!extension_loaded("json")) { - die('skip JSON extension not available in this build'); -} -?> ---FILE-- -<?php -/* Prototype : mixed json_decode ( string $json [, bool $assoc ] ) - * Description: Decodes a JSON string - * Source code: ext/json/php_json.c - * Alias to functions: - */ -echo "*** Testing json_decode() : basic functionality ***\n"; - -// array with different values for $string -$inputs = array ( - '0', - '123', - '-123', - '2147483647', - '-2147483648', - '123.456', - '1230', - '-1230', - 'true', - 'false', - 'null', - '"abc"', - '"Hello World\r\n"', - '[]', - '[1,2,3,4,5]', - '{"myInt":99,"myFloat":123.45,"myNull":null,"myBool":true,"myString":"Hello World"}', - '{"Jan":31,"Feb":29,"Mar":31,"April":30,"May":31,"June":30}', - '""', - '{}' -); - -// loop through with each element of the $inputs array to test json_decode() function -$count = 1; -foreach($inputs as $input) { - echo "-- Iteration $count --\n"; - var_dump(json_decode($input)); - var_dump(json_decode($input, TRUE)); - $count ++; -} - -?> -===Done=== ---EXPECTF-- -*** Testing json_decode() : basic functionality *** --- Iteration 1 -- -int(0) -int(0) --- Iteration 2 -- -int(123) -int(123) --- Iteration 3 -- -int(-123) -int(-123) --- Iteration 4 -- -int(2147483647) -int(2147483647) --- Iteration 5 -- -int(-2147483648) -int(-2147483648) --- Iteration 6 -- -float(123.456) -float(123.456) --- Iteration 7 -- -int(1230) -int(1230) --- Iteration 8 -- -int(-1230) -int(-1230) --- Iteration 9 -- -bool(true) -bool(true) --- Iteration 10 -- -bool(false) -bool(false) --- Iteration 11 -- -NULL -NULL --- Iteration 12 -- -string(3) "abc" -string(3) "abc" --- Iteration 13 -- -string(13) "Hello World -" -string(13) "Hello World -" --- Iteration 14 -- -array(0) { -} -array(0) { -} --- Iteration 15 -- -array(5) { - [0]=> - int(1) - [1]=> - int(2) - [2]=> - int(3) - [3]=> - int(4) - [4]=> - int(5) -} -array(5) { - [0]=> - int(1) - [1]=> - int(2) - [2]=> - int(3) - [3]=> - int(4) - [4]=> - int(5) -} --- Iteration 16 -- -object(stdClass)#%d (5) { - ["myInt"]=> - int(99) - ["myFloat"]=> - float(123.45) - ["myNull"]=> - NULL - ["myBool"]=> - bool(true) - ["myString"]=> - string(11) "Hello World" -} -array(5) { - ["myInt"]=> - int(99) - ["myFloat"]=> - float(123.45) - ["myNull"]=> - NULL - ["myBool"]=> - bool(true) - ["myString"]=> - string(11) "Hello World" -} --- Iteration 17 -- -object(stdClass)#%d (6) { - ["Jan"]=> - int(31) - ["Feb"]=> - int(29) - ["Mar"]=> - int(31) - ["April"]=> - int(30) - ["May"]=> - int(31) - ["June"]=> - int(30) -} -array(6) { - ["Jan"]=> - int(31) - ["Feb"]=> - int(29) - ["Mar"]=> - int(31) - ["April"]=> - int(30) - ["May"]=> - int(31) - ["June"]=> - int(30) -} --- Iteration 18 -- -string(0) "" -string(0) "" --- Iteration 19 -- -object(stdClass)#%d (0) { -} -array(0) { -} -===Done=== diff --git a/ext/json/tests/json_decode_error.phpt b/ext/json/tests/json_decode_error.phpt deleted file mode 100644 index 4d5d4e4be..000000000 --- a/ext/json/tests/json_decode_error.phpt +++ /dev/null @@ -1,39 +0,0 @@ ---TEST-- -Test json_decode() function : error conditions ---SKIPIF-- -<?php -if (!extension_loaded("json")) { - die('skip JSON extension not available in this build'); -} -?> ---FILE-- -<?php -/* Prototype : mixed json_decode ( string $json [, bool $assoc=false [, int $depth=512 ]] ) - * Description: Decodes a JSON string - * Source code: ext/json/php_json.c - * Alias to functions: - */ -echo "*** Testing json_decode() : error conditions ***\n"; - -echo "\n-- Testing json_decode() function with no arguments --\n"; -var_dump( json_decode() ); - -echo "\n-- Testing json_decode() function with more than expected no. of arguments --\n"; -$extra_arg = 10; -var_dump( json_decode('"abc"', TRUE, 512, 0, $extra_arg) ); - -?> -===Done=== ---EXPECTF-- -*** Testing json_decode() : error conditions *** - --- Testing json_decode() function with no arguments -- - -Warning: json_decode() expects at least 1 parameter, 0 given in %s on line %d -NULL - --- Testing json_decode() function with more than expected no. of arguments -- - -Warning: json_decode() expects at most 4 parameters, 5 given in %s on line %d -NULL -===Done=== diff --git a/ext/json/tests/json_encode_basic.phpt b/ext/json/tests/json_encode_basic.phpt deleted file mode 100644 index fc348eed8..000000000 --- a/ext/json/tests/json_encode_basic.phpt +++ /dev/null @@ -1,156 +0,0 @@ ---TEST-- -Test json_encode() function : basic functionality ---SKIPIF-- -<?php -if (!extension_loaded("json")) { - die('skip JSON extension not available in this build'); -} -?> ---FILE-- -<?php -/* Prototype : string json_encode ( mixed $value ) - * Description: Returns the JSON representation of a value - * Source code: ext/json/php_json.c - * Alias to functions: - */ -echo "*** Testing json_encode() : basic functionality ***\n"; - -//get an unset variable -$unset_var = 10; -unset ($unset_var); - -// get a resource variable -$fp = fopen(__FILE__, "r"); - -// get an object -class sample { -} - -$obj = new sample(); -$obj->MyInt = 99; -$obj->MyFloat = 123.45; -$obj->MyBool = true; -$obj->MyNull = null; -$obj->MyString = "Hello World"; - -// array with different values for $string -$inputs = array ( - - // integers -/*1*/ 0, - 123, - -123, - 2147483647, - -2147483648, - - // floats -/*6*/ 123.456, - 1.23E3, - -1.23E3, - - // boolean -/*9*/ TRUE, - true, - FALSE, - false, - - // NULL -/*13*/ NULL, - null, - - // strings -/*15*/ "abc", - 'abc', - "Hello\t\tWorld\n", - - // arrays -/*18*/ array(), - array(1,2,3,4,5), - array(1 => "Sun", 2=>"Mon", 3 => "Tue", 4 => "Wed", 5 => "Thur", 6 => "Fri", 7 => "Sat"), - array("Jan" => 31, "Feb" => 29, "Mar" => 31, "April" => 30, "May" => 31, "June" => 30), - - // empty data -/*22*/ "", - '', - - // undefined data -/*24*/ @$undefined_var, - - // unset data -/*25*/ @$unset_var, - - // resource variable -/*26*/ $fp, - - // object variable -/*27*/ $obj - -); - -// loop through with each element of the $inputs array to test json_encode() function -$count = 1; -foreach($inputs as $input) { - echo "-- Iteration $count --\n"; - var_dump(json_encode($input)); - $count ++; -} - -?> -===Done=== ---EXPECTF-- -*** Testing json_encode() : basic functionality *** --- Iteration 1 -- -string(1) "0" --- Iteration 2 -- -string(3) "123" --- Iteration 3 -- -string(4) "-123" --- Iteration 4 -- -string(10) "2147483647" --- Iteration 5 -- -string(11) "-2147483648" --- Iteration 6 -- -string(7) "123.456" --- Iteration 7 -- -string(4) "1230" --- Iteration 8 -- -string(5) "-1230" --- Iteration 9 -- -string(4) "true" --- Iteration 10 -- -string(4) "true" --- Iteration 11 -- -string(5) "false" --- Iteration 12 -- -string(5) "false" --- Iteration 13 -- -string(4) "null" --- Iteration 14 -- -string(4) "null" --- Iteration 15 -- -string(5) ""abc"" --- Iteration 16 -- -string(5) ""abc"" --- Iteration 17 -- -string(18) ""Hello\t\tWorld\n"" --- Iteration 18 -- -string(2) "[]" --- Iteration 19 -- -string(11) "[1,2,3,4,5]" --- Iteration 20 -- -string(72) "{"1":"Sun","2":"Mon","3":"Tue","4":"Wed","5":"Thur","6":"Fri","7":"Sat"}" --- Iteration 21 -- -string(58) "{"Jan":31,"Feb":29,"Mar":31,"April":30,"May":31,"June":30}" --- Iteration 22 -- -string(2) """" --- Iteration 23 -- -string(2) """" --- Iteration 24 -- -string(4) "null" --- Iteration 25 -- -string(4) "null" --- Iteration 26 -- -bool(false) --- Iteration 27 -- -string(82) "{"MyInt":99,"MyFloat":123.45,"MyBool":true,"MyNull":null,"MyString":"Hello World"}" -===Done=== diff --git a/ext/json/tests/json_encode_basic_utf8.phpt b/ext/json/tests/json_encode_basic_utf8.phpt deleted file mode 100644 index a8e8b425e..000000000 --- a/ext/json/tests/json_encode_basic_utf8.phpt +++ /dev/null @@ -1,26 +0,0 @@ ---TEST-- -Test json_encode() function : basic functionality with UTF8 string input ---SKIPIF-- -<?php -if (!extension_loaded("json")) { - die('skip JSON extension not available in this build'); -} -?> ---FILE-- -<?php -/* Prototype : string json_encode ( mixed $value ) - * Description: Returns the JSON representation of a value - * Source code: ext/json/php_json.c - * Alias to functions: - */ -echo "*** Testing json_encode() : basic functionality with UTF-8 input***\n"; - -$utf8_string = base64_decode('5pel5pys6Kqe44OG44Kt44K544OI44Gn44GZ44CCMDEyMzTvvJXvvJbvvJfvvJjvvJnjgII='); -var_dump(json_encode($utf8_string)); - -?> -===Done=== ---EXPECTF-- -*** Testing json_encode() : basic functionality with UTF-8 input*** -string(103) ""\u65e5\u672c\u8a9e\u30c6\u30ad\u30b9\u30c8\u3067\u3059\u300201234\uff15\uff16\uff17\uff18\uff19\u3002"" -===Done=== diff --git a/ext/json/tests/json_encode_error.phpt b/ext/json/tests/json_encode_error.phpt deleted file mode 100644 index 547c8bef1..000000000 --- a/ext/json/tests/json_encode_error.phpt +++ /dev/null @@ -1,38 +0,0 @@ ---TEST-- -Test json_encode() function : error conditions ---SKIPIF-- -<?php -if (!extension_loaded("json")) { - die('skip JSON extension not available in this build'); -} -?> ---FILE-- -<?php -/* Prototype : string json_encode ( mixed $value [, int $options=0 ] ) - * Description: Returns the JSON representation of a value - * Source code: ext/json/php_json.c - * Alias to functions: - */ - -echo "*** Testing json_encode() : error conditions ***\n"; - -echo "\n-- Testing json_encode() function with no arguments --\n"; -var_dump( json_encode() ); - -echo "\n-- Testing json_encode() function with more than expected no. of arguments --\n"; -$extra_arg = 10; -var_dump( json_encode("abc", 0, $extra_arg) ); - -?> -===Done=== ---EXPECTF-- -*** Testing json_encode() : error conditions *** - --- Testing json_encode() function with no arguments -- - -Warning: json_encode() expects at least 1 parameter, 0 given in %s on line %d -NULL - --- Testing json_encode() function with more than expected no. of arguments -- -string(5) ""abc"" -===Done=== diff --git a/ext/json/tests/json_encode_numeric.phpt b/ext/json/tests/json_encode_numeric.phpt deleted file mode 100644 index 539235019..000000000 --- a/ext/json/tests/json_encode_numeric.phpt +++ /dev/null @@ -1,26 +0,0 @@ ---TEST-- -Test json_encode() function with numeric flag ---SKIPIF-- -<?php -if (!extension_loaded("json")) { - die('skip JSON extension not available in this build'); -} -?> ---FILE-- -<?php -var_dump( - json_encode("1", JSON_NUMERIC_CHECK), - json_encode("9.4324", JSON_NUMERIC_CHECK), - json_encode(array("122321", "3232595.33423"), JSON_NUMERIC_CHECK), - json_encode("1"), - json_encode("9.4324"), - json_encode(array("122321", "3232595.33423")) -); -?> ---EXPECT-- -string(1) "1" -string(6) "9.4324" -string(22) "[122321,3232595.33423]" -string(3) ""1"" -string(8) ""9.4324"" -string(26) "["122321","3232595.33423"]" diff --git a/ext/json/tests/json_encode_pretty_print.phpt b/ext/json/tests/json_encode_pretty_print.phpt deleted file mode 100644 index 43b93aafe..000000000 --- a/ext/json/tests/json_encode_pretty_print.phpt +++ /dev/null @@ -1,40 +0,0 @@ ---TEST-- -json_encode() with JSON_PRETTY_PRINT ---SKIPIF-- -<?php if (!extension_loaded("json")) print "skip"; ?> ---FILE-- -<?php -function encode_decode($json) { - $struct = json_decode($json); - $pretty = json_encode($struct, JSON_PRETTY_PRINT); - echo "$pretty\n"; - $pretty = json_decode($pretty); - printf("Match: %d\n", $pretty == $struct); -} - -encode_decode('[1,2,3,[1,2,3]]'); -encode_decode('{"a":1,"b":[1,2],"c":{"d":42}}'); -?> ---EXPECT-- -[ - 1, - 2, - 3, - [ - 1, - 2, - 3 - ] -] -Match: 1 -{ - "a": 1, - "b": [ - 1, - 2 - ], - "c": { - "d": 42 - } -} -Match: 1 diff --git a/ext/json/tests/json_encode_unescaped_slashes.phpt b/ext/json/tests/json_encode_unescaped_slashes.phpt deleted file mode 100644 index 72ebae927..000000000 --- a/ext/json/tests/json_encode_unescaped_slashes.phpt +++ /dev/null @@ -1,12 +0,0 @@ ---TEST-- -json_decode() tests ---SKIPIF-- -<?php if (!extension_loaded("json")) print "skip"; ?> ---FILE-- -<?php -var_dump(json_encode('a/b')); -var_dump(json_encode('a/b', JSON_UNESCAPED_SLASHES)); -?> ---EXPECT-- -string(6) ""a\/b"" -string(5) ""a/b"" diff --git a/ext/json/tests/pass001.1.phpt b/ext/json/tests/pass001.1.phpt deleted file mode 100644 index a51f88578..000000000 --- a/ext/json/tests/pass001.1.phpt +++ /dev/null @@ -1,890 +0,0 @@ ---TEST-- -JSON (http://www.crockford.com/JSON/JSON_checker/test/pass1.json) ---INI-- -precision=14 ---SKIPIF-- -<?php - if (!extension_loaded('json')) die('skip: json extension not available'); - if (PHP_INT_SIZE != 4) die("skip this test is for 32bit platform only"); -?> ---FILE-- -<?php -/* Modified to test unescaped UNICODE as keys and values. - * Modified to test numbers with exponents without a decimal point. - * Modified to test empty string values. - * Modified to test a mix of integers and strings as keys. - */ -// Expect warnings about INF. -ini_set("error_reporting", E_ALL & ~E_WARNING); - -$test = " -[ - \"JSON Test Pattern pass1\", - {\"object with 1 member\":[\"array with 1 element\"]}, - {}, - [], - -42, - true, - false, - null, - { - \"integer\": 1234567890, - \"real\": -9876.543210, - \"e\": 0.123456789e-12, - \"E\": 1.234567890E+34, - \"\": 23456789012E666, - \"E no .\": 4E12, - \"zero\": 0, - \"one\": 1, - \"space\": \" \", - \"quote\": \"\\\"\", - \"backslash\": \"\\\\\", - \"controls\": \"\\b\\f\\n\\r\\t\", - \"slash\": \"/ & \\/\", - \"alpha\": \"abcdefghijklmnopqrstuvwyz\", - \"ALPHA\": \"ABCDEFGHIJKLMNOPQRSTUVWYZ\", - \"digit\": \"0123456789\", - \"special\": \"`1~!@#$%^&*()_+-={':[,]}|;.</>?\", - \"hex\": \"\\u0123\\u4567\\u89AB\\uCDEF\\uabcd\\uef4A\", - \"unicode\": \"\\u30d7\\u30ec\\u30b9\\u30ad\\u30c3\\u30c8\", - \"プレスキット\": \"プレスキット\", - \"empty_string\": \"\", - \"true\": true, - \"false\": false, - \"null\": null, - \"array\":[ ], - \"object\":{ }, - \"123\":{\"456\":{\"abc\":{\"789\":\"def\",\"012\":[1,2,\"5\",500],\"ghi\":[1,2,\"five\",50,\"sixty\"]}}}, - \"address\": \"50 St. James Street\", - \"url\": \"http://www.JSON.org/\", - \"comment\": \"// /* <!-- --\", - \"# -- --> */\": \" \", - \" s p a c e d \" :[1,2 , 3 - -, - -4 , 5 , 6 ,7 ], - \"compact\": [1,2,3,4,5,6,7], - \"jsontext\": \"{\\\"object with 1 member\\\":[\\\"array with 1 element\\\"]}\", - \"quotes\": \"" \\u0022 %22 0x22 034 "\", - \"\\/\\\\\\\"\\uCAFE\\uBABE\\uAB98\\uFCDE\\ubcda\\uef4A\\b\\f\\n\\r\\t`1~!@#$%^&*()_+-=[]{}|;:',./<>?\" -: \"A key can be any string\" - }, - 0.5 ,98.6 -, -99.44 -, - -1066 - - -,\"rosebud\"] -"; - -echo 'Testing: ' . $test . "\n"; -echo "DECODE: AS OBJECT\n"; -$obj = json_decode($test); -var_dump($obj); -echo "DECODE: AS ARRAY\n"; -$arr = json_decode($test, true); -var_dump($arr); - -echo "ENCODE: FROM OBJECT\n"; -$obj_enc = json_encode($obj, JSON_PARTIAL_OUTPUT_ON_ERROR); -echo $obj_enc . "\n"; -echo "ENCODE: FROM ARRAY\n"; -$arr_enc = json_encode($arr, JSON_PARTIAL_OUTPUT_ON_ERROR); -echo $arr_enc . "\n"; - -echo "DECODE AGAIN: AS OBJECT\n"; -$obj = json_decode($obj_enc); -var_dump($obj); -echo "DECODE AGAIN: AS ARRAY\n"; -$arr = json_decode($arr_enc, true); -var_dump($arr); - -?> ---EXPECTF-- -Testing: -[ - "JSON Test Pattern pass1", - {"object with 1 member":["array with 1 element"]}, - {}, - [], - -42, - true, - false, - null, - { - "integer": 1234567890, - "real": -9876.543210, - "e": 0.123456789e-12, - "E": 1.234567890E+34, - "": 23456789012E666, - "E no .": 4E12, - "zero": 0, - "one": 1, - "space": " ", - "quote": "\"", - "backslash": "\\", - "controls": "\b\f\n\r\t", - "slash": "/ & \/", - "alpha": "abcdefghijklmnopqrstuvwyz", - "ALPHA": "ABCDEFGHIJKLMNOPQRSTUVWYZ", - "digit": "0123456789", - "special": "`1~!@#$%^&*()_+-={':[,]}|;.</>?", - "hex": "\u0123\u4567\u89AB\uCDEF\uabcd\uef4A", - "unicode": "\u30d7\u30ec\u30b9\u30ad\u30c3\u30c8", - "プレスキット": "プレスキット", - "empty_string": "", - "true": true, - "false": false, - "null": null, - "array":[ ], - "object":{ }, - "123":{"456":{"abc":{"789":"def","012":[1,2,"5",500],"ghi":[1,2,"five",50,"sixty"]}}}, - "address": "50 St. James Street", - "url": "http://www.JSON.org/", - "comment": "// /* <!-- --", - "# -- --> */": " ", - " s p a c e d " :[1,2 , 3 - -, - -4 , 5 , 6 ,7 ], - "compact": [1,2,3,4,5,6,7], - "jsontext": "{\"object with 1 member\":[\"array with 1 element\"]}", - "quotes": "" \u0022 %22 0x22 034 "", - "\/\\\"\uCAFE\uBABE\uAB98\uFCDE\ubcda\uef4A\b\f\n\r\t`1~!@#$%^&*()_+-=[]{}|;:',./<>?" -: "A key can be any string" - }, - 0.5 ,98.6 -, -99.44 -, - -1066 - - -,"rosebud"] - -DECODE: AS OBJECT -array(14) { - [0]=> - string(23) "JSON Test Pattern pass1" - [1]=> - object(stdClass)#%d (1) { - ["object with 1 member"]=> - array(1) { - [0]=> - string(20) "array with 1 element" - } - } - [2]=> - object(stdClass)#%d (0) { - } - [3]=> - array(0) { - } - [4]=> - int(-42) - [5]=> - bool(true) - [6]=> - bool(false) - [7]=> - NULL - [8]=> - object(stdClass)#%d (36) { - ["integer"]=> - int(1234567890) - ["real"]=> - float(-9876.54321) - ["e"]=> - float(1.23456789E-13) - ["E"]=> - float(1.23456789E+34) - ["_empty_"]=> - float(INF) - ["E no ."]=> - float(4000000000000) - ["zero"]=> - int(0) - ["one"]=> - int(1) - ["space"]=> - string(1) " " - ["quote"]=> - string(1) """ - ["backslash"]=> - string(1) "\" - ["controls"]=> - string(5) " -
" - ["slash"]=> - string(5) "/ & /" - ["alpha"]=> - string(25) "abcdefghijklmnopqrstuvwyz" - ["ALPHA"]=> - string(25) "ABCDEFGHIJKLMNOPQRSTUVWYZ" - ["digit"]=> - string(10) "0123456789" - ["special"]=> - string(31) "`1~!@#$%^&*()_+-={':[,]}|;.</>?" - ["hex"]=> - string(17) "ģ䕧覫췯ꯍ" - ["unicode"]=> - string(18) "プレスキット" - ["プレスキット"]=> - string(18) "プレスキット" - ["empty_string"]=> - string(0) "" - ["true"]=> - bool(true) - ["false"]=> - bool(false) - ["null"]=> - NULL - ["array"]=> - array(0) { - } - ["object"]=> - object(stdClass)#%d (0) { - } - ["123"]=> - object(stdClass)#%d (1) { - ["456"]=> - object(stdClass)#%d (1) { - ["abc"]=> - object(stdClass)#%d (3) { - ["789"]=> - string(3) "def" - ["012"]=> - array(4) { - [0]=> - int(1) - [1]=> - int(2) - [2]=> - string(1) "5" - [3]=> - int(500) - } - ["ghi"]=> - array(5) { - [0]=> - int(1) - [1]=> - int(2) - [2]=> - string(4) "five" - [3]=> - int(50) - [4]=> - string(5) "sixty" - } - } - } - } - ["address"]=> - string(19) "50 St. James Street" - ["url"]=> - string(20) "http://www.JSON.org/" - ["comment"]=> - string(13) "// /* <!-- --" - ["# -- --> */"]=> - string(1) " " - [" s p a c e d "]=> - array(7) { - [0]=> - int(1) - [1]=> - int(2) - [2]=> - int(3) - [3]=> - int(4) - [4]=> - int(5) - [5]=> - int(6) - [6]=> - int(7) - } - ["compact"]=> - array(7) { - [0]=> - int(1) - [1]=> - int(2) - [2]=> - int(3) - [3]=> - int(4) - [4]=> - int(5) - [5]=> - int(6) - [6]=> - int(7) - } - ["jsontext"]=> - string(49) "{"object with 1 member":["array with 1 element"]}" - ["quotes"]=> - string(27) "" " %22 0x22 034 "" - ["/\"쫾몾ꮘﳞ볚 -
`1~!@#$%^&*()_+-=[]{}|;:',./<>?"]=> - string(23) "A key can be any string" - } - [9]=> - float(0.5) - [10]=> - float(98.6) - [11]=> - float(99.44) - [12]=> - int(1066) - [13]=> - string(7) "rosebud" -} -DECODE: AS ARRAY -array(14) { - [0]=> - string(23) "JSON Test Pattern pass1" - [1]=> - array(1) { - ["object with 1 member"]=> - array(1) { - [0]=> - string(20) "array with 1 element" - } - } - [2]=> - array(0) { - } - [3]=> - array(0) { - } - [4]=> - int(-42) - [5]=> - bool(true) - [6]=> - bool(false) - [7]=> - NULL - [8]=> - array(36) { - ["integer"]=> - int(1234567890) - ["real"]=> - float(-9876.54321) - ["e"]=> - float(1.23456789E-13) - ["E"]=> - float(1.23456789E+34) - [""]=> - float(INF) - ["E no ."]=> - float(4000000000000) - ["zero"]=> - int(0) - ["one"]=> - int(1) - ["space"]=> - string(1) " " - ["quote"]=> - string(1) """ - ["backslash"]=> - string(1) "\" - ["controls"]=> - string(5) " -
" - ["slash"]=> - string(5) "/ & /" - ["alpha"]=> - string(25) "abcdefghijklmnopqrstuvwyz" - ["ALPHA"]=> - string(25) "ABCDEFGHIJKLMNOPQRSTUVWYZ" - ["digit"]=> - string(10) "0123456789" - ["special"]=> - string(31) "`1~!@#$%^&*()_+-={':[,]}|;.</>?" - ["hex"]=> - string(17) "ģ䕧覫췯ꯍ" - ["unicode"]=> - string(18) "プレスキット" - ["プレスキット"]=> - string(18) "プレスキット" - ["empty_string"]=> - string(0) "" - ["true"]=> - bool(true) - ["false"]=> - bool(false) - ["null"]=> - NULL - ["array"]=> - array(0) { - } - ["object"]=> - array(0) { - } - [123]=> - array(1) { - [456]=> - array(1) { - ["abc"]=> - array(3) { - [789]=> - string(3) "def" - ["012"]=> - array(4) { - [0]=> - int(1) - [1]=> - int(2) - [2]=> - string(1) "5" - [3]=> - int(500) - } - ["ghi"]=> - array(5) { - [0]=> - int(1) - [1]=> - int(2) - [2]=> - string(4) "five" - [3]=> - int(50) - [4]=> - string(5) "sixty" - } - } - } - } - ["address"]=> - string(19) "50 St. James Street" - ["url"]=> - string(20) "http://www.JSON.org/" - ["comment"]=> - string(13) "// /* <!-- --" - ["# -- --> */"]=> - string(1) " " - [" s p a c e d "]=> - array(7) { - [0]=> - int(1) - [1]=> - int(2) - [2]=> - int(3) - [3]=> - int(4) - [4]=> - int(5) - [5]=> - int(6) - [6]=> - int(7) - } - ["compact"]=> - array(7) { - [0]=> - int(1) - [1]=> - int(2) - [2]=> - int(3) - [3]=> - int(4) - [4]=> - int(5) - [5]=> - int(6) - [6]=> - int(7) - } - ["jsontext"]=> - string(49) "{"object with 1 member":["array with 1 element"]}" - ["quotes"]=> - string(27) "" " %22 0x22 034 "" - ["/\"쫾몾ꮘﳞ볚 -
`1~!@#$%^&*()_+-=[]{}|;:',./<>?"]=> - string(23) "A key can be any string" - } - [9]=> - float(0.5) - [10]=> - float(98.6) - [11]=> - float(99.44) - [12]=> - int(1066) - [13]=> - string(7) "rosebud" -} -ENCODE: FROM OBJECT -["JSON Test Pattern pass1",{"object with 1 member":["array with 1 element"]},{},[],-42,true,false,null,{"integer":1234567890,"real":-9876.54321,"e":1.23456789e-13,"E":1.23456789e+34,"_empty_":0,"E no .":4000000000000,"zero":0,"one":1,"space":" ","quote":"\"","backslash":"\\","controls":"\b\f\n\r\t","slash":"\/ & \/","alpha":"abcdefghijklmnopqrstuvwyz","ALPHA":"ABCDEFGHIJKLMNOPQRSTUVWYZ","digit":"0123456789","special":"`1~!@#$%^&*()_+-={':[,]}|;.<\/>?","hex":"\u0123\u4567\u89ab\ucdef\uabcd\uef4a","unicode":"\u30d7\u30ec\u30b9\u30ad\u30c3\u30c8","\u30d7\u30ec\u30b9\u30ad\u30c3\u30c8":"\u30d7\u30ec\u30b9\u30ad\u30c3\u30c8","empty_string":"","true":true,"false":false,"null":null,"array":[],"object":{},"123":{"456":{"abc":{"789":"def","012":[1,2,"5",500],"ghi":[1,2,"five",50,"sixty"]}}},"address":"50 St. James Street","url":"http:\/\/www.JSON.org\/","comment":"\/\/ \/* <!-- --","# -- --> *\/":" "," s p a c e d ":[1,2,3,4,5,6,7],"compact":[1,2,3,4,5,6,7],"jsontext":"{\"object with 1 member\":[\"array with 1 element\"]}","quotes":"" \" %22 0x22 034 "","\/\\\"\ucafe\ubabe\uab98\ufcde\ubcda\uef4a\b\f\n\r\t`1~!@#$%^&*()_+-=[]{}|;:',.\/<>?":"A key can be any string"},0.5,98.6,99.44,1066,"rosebud"] -ENCODE: FROM ARRAY -["JSON Test Pattern pass1",{"object with 1 member":["array with 1 element"]},[],[],-42,true,false,null,{"integer":1234567890,"real":-9876.54321,"e":1.23456789e-13,"E":1.23456789e+34,"":0,"E no .":4000000000000,"zero":0,"one":1,"space":" ","quote":"\"","backslash":"\\","controls":"\b\f\n\r\t","slash":"\/ & \/","alpha":"abcdefghijklmnopqrstuvwyz","ALPHA":"ABCDEFGHIJKLMNOPQRSTUVWYZ","digit":"0123456789","special":"`1~!@#$%^&*()_+-={':[,]}|;.<\/>?","hex":"\u0123\u4567\u89ab\ucdef\uabcd\uef4a","unicode":"\u30d7\u30ec\u30b9\u30ad\u30c3\u30c8","\u30d7\u30ec\u30b9\u30ad\u30c3\u30c8":"\u30d7\u30ec\u30b9\u30ad\u30c3\u30c8","empty_string":"","true":true,"false":false,"null":null,"array":[],"object":[],"123":{"456":{"abc":{"789":"def","012":[1,2,"5",500],"ghi":[1,2,"five",50,"sixty"]}}},"address":"50 St. James Street","url":"http:\/\/www.JSON.org\/","comment":"\/\/ \/* <!-- --","# -- --> *\/":" "," s p a c e d ":[1,2,3,4,5,6,7],"compact":[1,2,3,4,5,6,7],"jsontext":"{\"object with 1 member\":[\"array with 1 element\"]}","quotes":"" \" %22 0x22 034 "","\/\\\"\ucafe\ubabe\uab98\ufcde\ubcda\uef4a\b\f\n\r\t`1~!@#$%^&*()_+-=[]{}|;:',.\/<>?":"A key can be any string"},0.5,98.6,99.44,1066,"rosebud"] -DECODE AGAIN: AS OBJECT -array(14) { - [0]=> - string(23) "JSON Test Pattern pass1" - [1]=> - object(stdClass)#%d (1) { - ["object with 1 member"]=> - array(1) { - [0]=> - string(20) "array with 1 element" - } - } - [2]=> - object(stdClass)#%d (0) { - } - [3]=> - array(0) { - } - [4]=> - int(-42) - [5]=> - bool(true) - [6]=> - bool(false) - [7]=> - NULL - [8]=> - object(stdClass)#%d (36) { - ["integer"]=> - int(1234567890) - ["real"]=> - float(-9876.54321) - ["e"]=> - float(1.23456789E-13) - ["E"]=> - float(1.23456789E+34) - ["_empty_"]=> - int(0) - ["E no ."]=> - %s(4000000000000) - ["zero"]=> - int(0) - ["one"]=> - int(1) - ["space"]=> - string(1) " " - ["quote"]=> - string(1) """ - ["backslash"]=> - string(1) "\" - ["controls"]=> - string(5) " -
" - ["slash"]=> - string(5) "/ & /" - ["alpha"]=> - string(25) "abcdefghijklmnopqrstuvwyz" - ["ALPHA"]=> - string(25) "ABCDEFGHIJKLMNOPQRSTUVWYZ" - ["digit"]=> - string(10) "0123456789" - ["special"]=> - string(31) "`1~!@#$%^&*()_+-={':[,]}|;.</>?" - ["hex"]=> - string(17) "ģ䕧覫췯ꯍ" - ["unicode"]=> - string(18) "プレスキット" - ["プレスキット"]=> - string(18) "プレスキット" - ["empty_string"]=> - string(0) "" - ["true"]=> - bool(true) - ["false"]=> - bool(false) - ["null"]=> - NULL - ["array"]=> - array(0) { - } - ["object"]=> - object(stdClass)#%d (0) { - } - ["123"]=> - object(stdClass)#%d (1) { - ["456"]=> - object(stdClass)#%d (1) { - ["abc"]=> - object(stdClass)#%d (3) { - ["789"]=> - string(3) "def" - ["012"]=> - array(4) { - [0]=> - int(1) - [1]=> - int(2) - [2]=> - string(1) "5" - [3]=> - int(500) - } - ["ghi"]=> - array(5) { - [0]=> - int(1) - [1]=> - int(2) - [2]=> - string(4) "five" - [3]=> - int(50) - [4]=> - string(5) "sixty" - } - } - } - } - ["address"]=> - string(19) "50 St. James Street" - ["url"]=> - string(20) "http://www.JSON.org/" - ["comment"]=> - string(13) "// /* <!-- --" - ["# -- --> */"]=> - string(1) " " - [" s p a c e d "]=> - array(7) { - [0]=> - int(1) - [1]=> - int(2) - [2]=> - int(3) - [3]=> - int(4) - [4]=> - int(5) - [5]=> - int(6) - [6]=> - int(7) - } - ["compact"]=> - array(7) { - [0]=> - int(1) - [1]=> - int(2) - [2]=> - int(3) - [3]=> - int(4) - [4]=> - int(5) - [5]=> - int(6) - [6]=> - int(7) - } - ["jsontext"]=> - string(49) "{"object with 1 member":["array with 1 element"]}" - ["quotes"]=> - string(27) "" " %22 0x22 034 "" - ["/\"쫾몾ꮘﳞ볚 -
`1~!@#$%^&*()_+-=[]{}|;:',./<>?"]=> - string(23) "A key can be any string" - } - [9]=> - float(0.5) - [10]=> - float(98.6) - [11]=> - float(99.44) - [12]=> - int(1066) - [13]=> - string(7) "rosebud" -} -DECODE AGAIN: AS ARRAY -array(14) { - [0]=> - string(23) "JSON Test Pattern pass1" - [1]=> - array(1) { - ["object with 1 member"]=> - array(1) { - [0]=> - string(20) "array with 1 element" - } - } - [2]=> - array(0) { - } - [3]=> - array(0) { - } - [4]=> - int(-42) - [5]=> - bool(true) - [6]=> - bool(false) - [7]=> - NULL - [8]=> - array(36) { - ["integer"]=> - int(1234567890) - ["real"]=> - float(-9876.54321) - ["e"]=> - float(1.23456789E-13) - ["E"]=> - float(1.23456789E+34) - [""]=> - int(0) - ["E no ."]=> - %s(4000000000000) - ["zero"]=> - int(0) - ["one"]=> - int(1) - ["space"]=> - string(1) " " - ["quote"]=> - string(1) """ - ["backslash"]=> - string(1) "\" - ["controls"]=> - string(5) " -
" - ["slash"]=> - string(5) "/ & /" - ["alpha"]=> - string(25) "abcdefghijklmnopqrstuvwyz" - ["ALPHA"]=> - string(25) "ABCDEFGHIJKLMNOPQRSTUVWYZ" - ["digit"]=> - string(10) "0123456789" - ["special"]=> - string(31) "`1~!@#$%^&*()_+-={':[,]}|;.</>?" - ["hex"]=> - string(17) "ģ䕧覫췯ꯍ" - ["unicode"]=> - string(18) "プレスキット" - ["プレスキット"]=> - string(18) "プレスキット" - ["empty_string"]=> - string(0) "" - ["true"]=> - bool(true) - ["false"]=> - bool(false) - ["null"]=> - NULL - ["array"]=> - array(0) { - } - ["object"]=> - array(0) { - } - [123]=> - array(1) { - [456]=> - array(1) { - ["abc"]=> - array(3) { - [789]=> - string(3) "def" - ["012"]=> - array(4) { - [0]=> - int(1) - [1]=> - int(2) - [2]=> - string(1) "5" - [3]=> - int(500) - } - ["ghi"]=> - array(5) { - [0]=> - int(1) - [1]=> - int(2) - [2]=> - string(4) "five" - [3]=> - int(50) - [4]=> - string(5) "sixty" - } - } - } - } - ["address"]=> - string(19) "50 St. James Street" - ["url"]=> - string(20) "http://www.JSON.org/" - ["comment"]=> - string(13) "// /* <!-- --" - ["# -- --> */"]=> - string(1) " " - [" s p a c e d "]=> - array(7) { - [0]=> - int(1) - [1]=> - int(2) - [2]=> - int(3) - [3]=> - int(4) - [4]=> - int(5) - [5]=> - int(6) - [6]=> - int(7) - } - ["compact"]=> - array(7) { - [0]=> - int(1) - [1]=> - int(2) - [2]=> - int(3) - [3]=> - int(4) - [4]=> - int(5) - [5]=> - int(6) - [6]=> - int(7) - } - ["jsontext"]=> - string(49) "{"object with 1 member":["array with 1 element"]}" - ["quotes"]=> - string(27) "" " %22 0x22 034 "" - ["/\"쫾몾ꮘﳞ볚 -
`1~!@#$%^&*()_+-=[]{}|;:',./<>?"]=> - string(23) "A key can be any string" - } - [9]=> - float(0.5) - [10]=> - float(98.6) - [11]=> - float(99.44) - [12]=> - int(1066) - [13]=> - string(7) "rosebud" -} diff --git a/ext/json/tests/pass001.1_64bit.phpt b/ext/json/tests/pass001.1_64bit.phpt deleted file mode 100644 index ff2714436..000000000 --- a/ext/json/tests/pass001.1_64bit.phpt +++ /dev/null @@ -1,890 +0,0 @@ ---TEST-- -JSON (http://www.crockford.com/JSON/JSON_checker/test/pass1.json) ---INI-- -precision=14 ---SKIPIF-- -<?php - if (!extension_loaded('json')) die('skip: json extension not available'); - if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only"); -?> ---FILE-- -<?php -/* Modified to test unescaped UNICODE as keys and values. - * Modified to test numbers with exponents without a decimal point. - * Modified to test empty string values. - * Modified to test a mix of integers and strings as keys. - */ -// Expect warnings about INF. -ini_set("error_reporting", E_ALL & ~E_WARNING); - -$test = " -[ - \"JSON Test Pattern pass1\", - {\"object with 1 member\":[\"array with 1 element\"]}, - {}, - [], - -42, - true, - false, - null, - { - \"integer\": 1234567890, - \"real\": -9876.543210, - \"e\": 0.123456789e-12, - \"E\": 1.234567890E+34, - \"\": 23456789012E666, - \"E no .\": 4E12, - \"zero\": 0, - \"one\": 1, - \"space\": \" \", - \"quote\": \"\\\"\", - \"backslash\": \"\\\\\", - \"controls\": \"\\b\\f\\n\\r\\t\", - \"slash\": \"/ & \\/\", - \"alpha\": \"abcdefghijklmnopqrstuvwyz\", - \"ALPHA\": \"ABCDEFGHIJKLMNOPQRSTUVWYZ\", - \"digit\": \"0123456789\", - \"special\": \"`1~!@#$%^&*()_+-={':[,]}|;.</>?\", - \"hex\": \"\\u0123\\u4567\\u89AB\\uCDEF\\uabcd\\uef4A\", - \"unicode\": \"\\u30d7\\u30ec\\u30b9\\u30ad\\u30c3\\u30c8\", - \"プレスキット\": \"プレスキット\", - \"empty_string\": \"\", - \"true\": true, - \"false\": false, - \"null\": null, - \"array\":[ ], - \"object\":{ }, - \"123\":{\"456\":{\"abc\":{\"789\":\"def\",\"012\":[1,2,\"5\",500],\"ghi\":[1,2,\"five\",50,\"sixty\"]}}}, - \"address\": \"50 St. James Street\", - \"url\": \"http://www.JSON.org/\", - \"comment\": \"// /* <!-- --\", - \"# -- --> */\": \" \", - \" s p a c e d \" :[1,2 , 3 - -, - -4 , 5 , 6 ,7 ], - \"compact\": [1,2,3,4,5,6,7], - \"jsontext\": \"{\\\"object with 1 member\\\":[\\\"array with 1 element\\\"]}\", - \"quotes\": \"" \\u0022 %22 0x22 034 "\", - \"\\/\\\\\\\"\\uCAFE\\uBABE\\uAB98\\uFCDE\\ubcda\\uef4A\\b\\f\\n\\r\\t`1~!@#$%^&*()_+-=[]{}|;:',./<>?\" -: \"A key can be any string\" - }, - 0.5 ,98.6 -, -99.44 -, - -1066 - - -,\"rosebud\"] -"; - -echo 'Testing: ' . $test . "\n"; -echo "DECODE: AS OBJECT\n"; -$obj = json_decode($test); -var_dump($obj); -echo "DECODE: AS ARRAY\n"; -$arr = json_decode($test, true); -var_dump($arr); - -echo "ENCODE: FROM OBJECT\n"; -$obj_enc = json_encode($obj, JSON_PARTIAL_OUTPUT_ON_ERROR); -echo $obj_enc . "\n"; -echo "ENCODE: FROM ARRAY\n"; -$arr_enc = json_encode($arr, JSON_PARTIAL_OUTPUT_ON_ERROR); -echo $arr_enc . "\n"; - -echo "DECODE AGAIN: AS OBJECT\n"; -$obj = json_decode($obj_enc); -var_dump($obj); -echo "DECODE AGAIN: AS ARRAY\n"; -$arr = json_decode($arr_enc, true); -var_dump($arr); - -?> ---EXPECTF-- -Testing: -[ - "JSON Test Pattern pass1", - {"object with 1 member":["array with 1 element"]}, - {}, - [], - -42, - true, - false, - null, - { - "integer": 1234567890, - "real": -9876.543210, - "e": 0.123456789e-12, - "E": 1.234567890E+34, - "": 23456789012E666, - "E no .": 4E12, - "zero": 0, - "one": 1, - "space": " ", - "quote": "\"", - "backslash": "\\", - "controls": "\b\f\n\r\t", - "slash": "/ & \/", - "alpha": "abcdefghijklmnopqrstuvwyz", - "ALPHA": "ABCDEFGHIJKLMNOPQRSTUVWYZ", - "digit": "0123456789", - "special": "`1~!@#$%^&*()_+-={':[,]}|;.</>?", - "hex": "\u0123\u4567\u89AB\uCDEF\uabcd\uef4A", - "unicode": "\u30d7\u30ec\u30b9\u30ad\u30c3\u30c8", - "プレスキット": "プレスキット", - "empty_string": "", - "true": true, - "false": false, - "null": null, - "array":[ ], - "object":{ }, - "123":{"456":{"abc":{"789":"def","012":[1,2,"5",500],"ghi":[1,2,"five",50,"sixty"]}}}, - "address": "50 St. James Street", - "url": "http://www.JSON.org/", - "comment": "// /* <!-- --", - "# -- --> */": " ", - " s p a c e d " :[1,2 , 3 - -, - -4 , 5 , 6 ,7 ], - "compact": [1,2,3,4,5,6,7], - "jsontext": "{\"object with 1 member\":[\"array with 1 element\"]}", - "quotes": "" \u0022 %22 0x22 034 "", - "\/\\\"\uCAFE\uBABE\uAB98\uFCDE\ubcda\uef4A\b\f\n\r\t`1~!@#$%^&*()_+-=[]{}|;:',./<>?" -: "A key can be any string" - }, - 0.5 ,98.6 -, -99.44 -, - -1066 - - -,"rosebud"] - -DECODE: AS OBJECT -array(14) { - [0]=> - string(23) "JSON Test Pattern pass1" - [1]=> - object(stdClass)#%d (1) { - ["object with 1 member"]=> - array(1) { - [0]=> - string(20) "array with 1 element" - } - } - [2]=> - object(stdClass)#%d (0) { - } - [3]=> - array(0) { - } - [4]=> - int(-42) - [5]=> - bool(true) - [6]=> - bool(false) - [7]=> - NULL - [8]=> - object(stdClass)#%d (36) { - ["integer"]=> - int(1234567890) - ["real"]=> - float(-9876.54321) - ["e"]=> - float(1.23456789E-13) - ["E"]=> - float(1.23456789E+34) - ["_empty_"]=> - float(INF) - ["E no ."]=> - float(4000000000000) - ["zero"]=> - int(0) - ["one"]=> - int(1) - ["space"]=> - string(1) " " - ["quote"]=> - string(1) """ - ["backslash"]=> - string(1) "\" - ["controls"]=> - string(5) " -
" - ["slash"]=> - string(5) "/ & /" - ["alpha"]=> - string(25) "abcdefghijklmnopqrstuvwyz" - ["ALPHA"]=> - string(25) "ABCDEFGHIJKLMNOPQRSTUVWYZ" - ["digit"]=> - string(10) "0123456789" - ["special"]=> - string(31) "`1~!@#$%^&*()_+-={':[,]}|;.</>?" - ["hex"]=> - string(17) "ģ䕧覫췯ꯍ" - ["unicode"]=> - string(18) "プレスキット" - ["プレスキット"]=> - string(18) "プレスキット" - ["empty_string"]=> - string(0) "" - ["true"]=> - bool(true) - ["false"]=> - bool(false) - ["null"]=> - NULL - ["array"]=> - array(0) { - } - ["object"]=> - object(stdClass)#%d (0) { - } - ["123"]=> - object(stdClass)#%d (1) { - ["456"]=> - object(stdClass)#%d (1) { - ["abc"]=> - object(stdClass)#%d (3) { - ["789"]=> - string(3) "def" - ["012"]=> - array(4) { - [0]=> - int(1) - [1]=> - int(2) - [2]=> - string(1) "5" - [3]=> - int(500) - } - ["ghi"]=> - array(5) { - [0]=> - int(1) - [1]=> - int(2) - [2]=> - string(4) "five" - [3]=> - int(50) - [4]=> - string(5) "sixty" - } - } - } - } - ["address"]=> - string(19) "50 St. James Street" - ["url"]=> - string(20) "http://www.JSON.org/" - ["comment"]=> - string(13) "// /* <!-- --" - ["# -- --> */"]=> - string(1) " " - [" s p a c e d "]=> - array(7) { - [0]=> - int(1) - [1]=> - int(2) - [2]=> - int(3) - [3]=> - int(4) - [4]=> - int(5) - [5]=> - int(6) - [6]=> - int(7) - } - ["compact"]=> - array(7) { - [0]=> - int(1) - [1]=> - int(2) - [2]=> - int(3) - [3]=> - int(4) - [4]=> - int(5) - [5]=> - int(6) - [6]=> - int(7) - } - ["jsontext"]=> - string(49) "{"object with 1 member":["array with 1 element"]}" - ["quotes"]=> - string(27) "" " %22 0x22 034 "" - ["/\"쫾몾ꮘﳞ볚 -
`1~!@#$%^&*()_+-=[]{}|;:',./<>?"]=> - string(23) "A key can be any string" - } - [9]=> - float(0.5) - [10]=> - float(98.6) - [11]=> - float(99.44) - [12]=> - int(1066) - [13]=> - string(7) "rosebud" -} -DECODE: AS ARRAY -array(14) { - [0]=> - string(23) "JSON Test Pattern pass1" - [1]=> - array(1) { - ["object with 1 member"]=> - array(1) { - [0]=> - string(20) "array with 1 element" - } - } - [2]=> - array(0) { - } - [3]=> - array(0) { - } - [4]=> - int(-42) - [5]=> - bool(true) - [6]=> - bool(false) - [7]=> - NULL - [8]=> - array(36) { - ["integer"]=> - int(1234567890) - ["real"]=> - float(-9876.54321) - ["e"]=> - float(1.23456789E-13) - ["E"]=> - float(1.23456789E+34) - [""]=> - float(INF) - ["E no ."]=> - float(4000000000000) - ["zero"]=> - int(0) - ["one"]=> - int(1) - ["space"]=> - string(1) " " - ["quote"]=> - string(1) """ - ["backslash"]=> - string(1) "\" - ["controls"]=> - string(5) " -
" - ["slash"]=> - string(5) "/ & /" - ["alpha"]=> - string(25) "abcdefghijklmnopqrstuvwyz" - ["ALPHA"]=> - string(25) "ABCDEFGHIJKLMNOPQRSTUVWYZ" - ["digit"]=> - string(10) "0123456789" - ["special"]=> - string(31) "`1~!@#$%^&*()_+-={':[,]}|;.</>?" - ["hex"]=> - string(17) "ģ䕧覫췯ꯍ" - ["unicode"]=> - string(18) "プレスキット" - ["プレスキット"]=> - string(18) "プレスキット" - ["empty_string"]=> - string(0) "" - ["true"]=> - bool(true) - ["false"]=> - bool(false) - ["null"]=> - NULL - ["array"]=> - array(0) { - } - ["object"]=> - array(0) { - } - [123]=> - array(1) { - [456]=> - array(1) { - ["abc"]=> - array(3) { - [789]=> - string(3) "def" - ["012"]=> - array(4) { - [0]=> - int(1) - [1]=> - int(2) - [2]=> - string(1) "5" - [3]=> - int(500) - } - ["ghi"]=> - array(5) { - [0]=> - int(1) - [1]=> - int(2) - [2]=> - string(4) "five" - [3]=> - int(50) - [4]=> - string(5) "sixty" - } - } - } - } - ["address"]=> - string(19) "50 St. James Street" - ["url"]=> - string(20) "http://www.JSON.org/" - ["comment"]=> - string(13) "// /* <!-- --" - ["# -- --> */"]=> - string(1) " " - [" s p a c e d "]=> - array(7) { - [0]=> - int(1) - [1]=> - int(2) - [2]=> - int(3) - [3]=> - int(4) - [4]=> - int(5) - [5]=> - int(6) - [6]=> - int(7) - } - ["compact"]=> - array(7) { - [0]=> - int(1) - [1]=> - int(2) - [2]=> - int(3) - [3]=> - int(4) - [4]=> - int(5) - [5]=> - int(6) - [6]=> - int(7) - } - ["jsontext"]=> - string(49) "{"object with 1 member":["array with 1 element"]}" - ["quotes"]=> - string(27) "" " %22 0x22 034 "" - ["/\"쫾몾ꮘﳞ볚 -
`1~!@#$%^&*()_+-=[]{}|;:',./<>?"]=> - string(23) "A key can be any string" - } - [9]=> - float(0.5) - [10]=> - float(98.6) - [11]=> - float(99.44) - [12]=> - int(1066) - [13]=> - string(7) "rosebud" -} -ENCODE: FROM OBJECT -["JSON Test Pattern pass1",{"object with 1 member":["array with 1 element"]},{},[],-42,true,false,null,{"integer":1234567890,"real":-9876.54321,"e":1.23456789e-13,"E":1.23456789e+34,"_empty_":0,"E no .":4000000000000,"zero":0,"one":1,"space":" ","quote":"\"","backslash":"\\","controls":"\b\f\n\r\t","slash":"\/ & \/","alpha":"abcdefghijklmnopqrstuvwyz","ALPHA":"ABCDEFGHIJKLMNOPQRSTUVWYZ","digit":"0123456789","special":"`1~!@#$%^&*()_+-={':[,]}|;.<\/>?","hex":"\u0123\u4567\u89ab\ucdef\uabcd\uef4a","unicode":"\u30d7\u30ec\u30b9\u30ad\u30c3\u30c8","\u30d7\u30ec\u30b9\u30ad\u30c3\u30c8":"\u30d7\u30ec\u30b9\u30ad\u30c3\u30c8","empty_string":"","true":true,"false":false,"null":null,"array":[],"object":{},"123":{"456":{"abc":{"789":"def","012":[1,2,"5",500],"ghi":[1,2,"five",50,"sixty"]}}},"address":"50 St. James Street","url":"http:\/\/www.JSON.org\/","comment":"\/\/ \/* <!-- --","# -- --> *\/":" "," s p a c e d ":[1,2,3,4,5,6,7],"compact":[1,2,3,4,5,6,7],"jsontext":"{\"object with 1 member\":[\"array with 1 element\"]}","quotes":"" \" %22 0x22 034 "","\/\\\"\ucafe\ubabe\uab98\ufcde\ubcda\uef4a\b\f\n\r\t`1~!@#$%^&*()_+-=[]{}|;:',.\/<>?":"A key can be any string"},0.5,98.6,99.44,1066,"rosebud"] -ENCODE: FROM ARRAY -["JSON Test Pattern pass1",{"object with 1 member":["array with 1 element"]},[],[],-42,true,false,null,{"integer":1234567890,"real":-9876.54321,"e":1.23456789e-13,"E":1.23456789e+34,"":0,"E no .":4000000000000,"zero":0,"one":1,"space":" ","quote":"\"","backslash":"\\","controls":"\b\f\n\r\t","slash":"\/ & \/","alpha":"abcdefghijklmnopqrstuvwyz","ALPHA":"ABCDEFGHIJKLMNOPQRSTUVWYZ","digit":"0123456789","special":"`1~!@#$%^&*()_+-={':[,]}|;.<\/>?","hex":"\u0123\u4567\u89ab\ucdef\uabcd\uef4a","unicode":"\u30d7\u30ec\u30b9\u30ad\u30c3\u30c8","\u30d7\u30ec\u30b9\u30ad\u30c3\u30c8":"\u30d7\u30ec\u30b9\u30ad\u30c3\u30c8","empty_string":"","true":true,"false":false,"null":null,"array":[],"object":[],"123":{"456":{"abc":{"789":"def","012":[1,2,"5",500],"ghi":[1,2,"five",50,"sixty"]}}},"address":"50 St. James Street","url":"http:\/\/www.JSON.org\/","comment":"\/\/ \/* <!-- --","# -- --> *\/":" "," s p a c e d ":[1,2,3,4,5,6,7],"compact":[1,2,3,4,5,6,7],"jsontext":"{\"object with 1 member\":[\"array with 1 element\"]}","quotes":"" \" %22 0x22 034 "","\/\\\"\ucafe\ubabe\uab98\ufcde\ubcda\uef4a\b\f\n\r\t`1~!@#$%^&*()_+-=[]{}|;:',.\/<>?":"A key can be any string"},0.5,98.6,99.44,1066,"rosebud"] -DECODE AGAIN: AS OBJECT -array(14) { - [0]=> - string(23) "JSON Test Pattern pass1" - [1]=> - object(stdClass)#%d (1) { - ["object with 1 member"]=> - array(1) { - [0]=> - string(20) "array with 1 element" - } - } - [2]=> - object(stdClass)#%d (0) { - } - [3]=> - array(0) { - } - [4]=> - int(-42) - [5]=> - bool(true) - [6]=> - bool(false) - [7]=> - NULL - [8]=> - object(stdClass)#%d (36) { - ["integer"]=> - int(1234567890) - ["real"]=> - float(-9876.54321) - ["e"]=> - float(1.23456789E-13) - ["E"]=> - float(1.23456789E+34) - ["_empty_"]=> - int(0) - ["E no ."]=> - int(4000000000000) - ["zero"]=> - int(0) - ["one"]=> - int(1) - ["space"]=> - string(1) " " - ["quote"]=> - string(1) """ - ["backslash"]=> - string(1) "\" - ["controls"]=> - string(5) " -
" - ["slash"]=> - string(5) "/ & /" - ["alpha"]=> - string(25) "abcdefghijklmnopqrstuvwyz" - ["ALPHA"]=> - string(25) "ABCDEFGHIJKLMNOPQRSTUVWYZ" - ["digit"]=> - string(10) "0123456789" - ["special"]=> - string(31) "`1~!@#$%^&*()_+-={':[,]}|;.</>?" - ["hex"]=> - string(17) "ģ䕧覫췯ꯍ" - ["unicode"]=> - string(18) "プレスキット" - ["プレスキット"]=> - string(18) "プレスキット" - ["empty_string"]=> - string(0) "" - ["true"]=> - bool(true) - ["false"]=> - bool(false) - ["null"]=> - NULL - ["array"]=> - array(0) { - } - ["object"]=> - object(stdClass)#%d (0) { - } - ["123"]=> - object(stdClass)#%d (1) { - ["456"]=> - object(stdClass)#%d (1) { - ["abc"]=> - object(stdClass)#%d (3) { - ["789"]=> - string(3) "def" - ["012"]=> - array(4) { - [0]=> - int(1) - [1]=> - int(2) - [2]=> - string(1) "5" - [3]=> - int(500) - } - ["ghi"]=> - array(5) { - [0]=> - int(1) - [1]=> - int(2) - [2]=> - string(4) "five" - [3]=> - int(50) - [4]=> - string(5) "sixty" - } - } - } - } - ["address"]=> - string(19) "50 St. James Street" - ["url"]=> - string(20) "http://www.JSON.org/" - ["comment"]=> - string(13) "// /* <!-- --" - ["# -- --> */"]=> - string(1) " " - [" s p a c e d "]=> - array(7) { - [0]=> - int(1) - [1]=> - int(2) - [2]=> - int(3) - [3]=> - int(4) - [4]=> - int(5) - [5]=> - int(6) - [6]=> - int(7) - } - ["compact"]=> - array(7) { - [0]=> - int(1) - [1]=> - int(2) - [2]=> - int(3) - [3]=> - int(4) - [4]=> - int(5) - [5]=> - int(6) - [6]=> - int(7) - } - ["jsontext"]=> - string(49) "{"object with 1 member":["array with 1 element"]}" - ["quotes"]=> - string(27) "" " %22 0x22 034 "" - ["/\"쫾몾ꮘﳞ볚 -
`1~!@#$%^&*()_+-=[]{}|;:',./<>?"]=> - string(23) "A key can be any string" - } - [9]=> - float(0.5) - [10]=> - float(98.6) - [11]=> - float(99.44) - [12]=> - int(1066) - [13]=> - string(7) "rosebud" -} -DECODE AGAIN: AS ARRAY -array(14) { - [0]=> - string(23) "JSON Test Pattern pass1" - [1]=> - array(1) { - ["object with 1 member"]=> - array(1) { - [0]=> - string(20) "array with 1 element" - } - } - [2]=> - array(0) { - } - [3]=> - array(0) { - } - [4]=> - int(-42) - [5]=> - bool(true) - [6]=> - bool(false) - [7]=> - NULL - [8]=> - array(36) { - ["integer"]=> - int(1234567890) - ["real"]=> - float(-9876.54321) - ["e"]=> - float(1.23456789E-13) - ["E"]=> - float(1.23456789E+34) - [""]=> - int(0) - ["E no ."]=> - int(4000000000000) - ["zero"]=> - int(0) - ["one"]=> - int(1) - ["space"]=> - string(1) " " - ["quote"]=> - string(1) """ - ["backslash"]=> - string(1) "\" - ["controls"]=> - string(5) " -
" - ["slash"]=> - string(5) "/ & /" - ["alpha"]=> - string(25) "abcdefghijklmnopqrstuvwyz" - ["ALPHA"]=> - string(25) "ABCDEFGHIJKLMNOPQRSTUVWYZ" - ["digit"]=> - string(10) "0123456789" - ["special"]=> - string(31) "`1~!@#$%^&*()_+-={':[,]}|;.</>?" - ["hex"]=> - string(17) "ģ䕧覫췯ꯍ" - ["unicode"]=> - string(18) "プレスキット" - ["プレスキット"]=> - string(18) "プレスキット" - ["empty_string"]=> - string(0) "" - ["true"]=> - bool(true) - ["false"]=> - bool(false) - ["null"]=> - NULL - ["array"]=> - array(0) { - } - ["object"]=> - array(0) { - } - [123]=> - array(1) { - [456]=> - array(1) { - ["abc"]=> - array(3) { - [789]=> - string(3) "def" - ["012"]=> - array(4) { - [0]=> - int(1) - [1]=> - int(2) - [2]=> - string(1) "5" - [3]=> - int(500) - } - ["ghi"]=> - array(5) { - [0]=> - int(1) - [1]=> - int(2) - [2]=> - string(4) "five" - [3]=> - int(50) - [4]=> - string(5) "sixty" - } - } - } - } - ["address"]=> - string(19) "50 St. James Street" - ["url"]=> - string(20) "http://www.JSON.org/" - ["comment"]=> - string(13) "// /* <!-- --" - ["# -- --> */"]=> - string(1) " " - [" s p a c e d "]=> - array(7) { - [0]=> - int(1) - [1]=> - int(2) - [2]=> - int(3) - [3]=> - int(4) - [4]=> - int(5) - [5]=> - int(6) - [6]=> - int(7) - } - ["compact"]=> - array(7) { - [0]=> - int(1) - [1]=> - int(2) - [2]=> - int(3) - [3]=> - int(4) - [4]=> - int(5) - [5]=> - int(6) - [6]=> - int(7) - } - ["jsontext"]=> - string(49) "{"object with 1 member":["array with 1 element"]}" - ["quotes"]=> - string(27) "" " %22 0x22 034 "" - ["/\"쫾몾ꮘﳞ볚 -
`1~!@#$%^&*()_+-=[]{}|;:',./<>?"]=> - string(23) "A key can be any string" - } - [9]=> - float(0.5) - [10]=> - float(98.6) - [11]=> - float(99.44) - [12]=> - int(1066) - [13]=> - string(7) "rosebud" -} diff --git a/ext/json/tests/pass001.phpt b/ext/json/tests/pass001.phpt deleted file mode 100644 index 1fd05fcdd..000000000 --- a/ext/json/tests/pass001.phpt +++ /dev/null @@ -1,702 +0,0 @@ ---TEST-- -JSON (http://www.crockford.com/JSON/JSON_checker/test/pass1.json) ---INI-- -precision=14 ---SKIPIF-- -<?php - if (!extension_loaded('json')) die('skip: json extension not available'); -?> ---FILE-- -<?php -// Expect warnings about INF. -ini_set("error_reporting", E_ALL & ~E_WARNING); - -$test = " -[ - \"JSON Test Pattern pass1\", - {\"object with 1 member\":[\"array with 1 element\"]}, - {}, - [], - -42, - true, - false, - null, - { - \"integer\": 1234567890, - \"real\": -9876.543210, - \"e\": 0.123456789e-12, - \"E\": 1.234567890E+34, - \"\": 23456789012E666, - \"zero\": 0, - \"one\": 1, - \"space\": \" \", - \"quote\": \"\\\"\", - \"backslash\": \"\\\\\", - \"controls\": \"\\b\\f\\n\\r\\t\", - \"slash\": \"/ & \\/\", - \"alpha\": \"abcdefghijklmnopqrstuvwyz\", - \"ALPHA\": \"ABCDEFGHIJKLMNOPQRSTUVWYZ\", - \"digit\": \"0123456789\", - \"special\": \"`1~!@#$%^&*()_+-={':[,]}|;.</>?\", - \"hex\": \"\\u0123\\u4567\\u89AB\\uCDEF\\uabcd\\uef4A\", - \"true\": true, - \"false\": false, - \"null\": null, - \"array\":[ ], - \"object\":{ }, - \"address\": \"50 St. James Street\", - \"url\": \"http://www.JSON.org/\", - \"comment\": \"// /* <!-- --\", - \"# -- --> */\": \" \", - \" s p a c e d \" :[1,2 , 3 - -, - -4 , 5 , 6 ,7 ], - \"compact\": [1,2,3,4,5,6,7], - \"jsontext\": \"{\\\"object with 1 member\\\":[\\\"array with 1 element\\\"]}\", - \"quotes\": \"" \\u0022 %22 0x22 034 "\", - \"\\/\\\\\\\"\\uCAFE\\uBABE\\uAB98\\uFCDE\\ubcda\\uef4A\\b\\f\\n\\r\\t`1~!@#$%^&*()_+-=[]{}|;:',./<>?\" -: \"A key can be any string\" - }, - 0.5 ,98.6 -, -99.44 -, - -1066 - - -,\"rosebud\"] -"; - -echo 'Testing: ' . $test . "\n"; -echo "DECODE: AS OBJECT\n"; -$obj = json_decode($test); -var_dump($obj); -echo "DECODE: AS ARRAY\n"; -$arr = json_decode($test, true); -var_dump($arr); - -echo "ENCODE: FROM OBJECT\n"; -$obj_enc = json_encode($obj, JSON_PARTIAL_OUTPUT_ON_ERROR); -echo $obj_enc . "\n"; -echo "ENCODE: FROM ARRAY\n"; -$arr_enc = json_encode($arr, JSON_PARTIAL_OUTPUT_ON_ERROR); -echo $arr_enc . "\n"; - -echo "DECODE AGAIN: AS OBJECT\n"; -$obj = json_decode($obj_enc); -var_dump($obj); -echo "DECODE AGAIN: AS ARRAY\n"; -$arr = json_decode($arr_enc, true); -var_dump($arr); - -?> ---EXPECT-- -Testing: -[ - "JSON Test Pattern pass1", - {"object with 1 member":["array with 1 element"]}, - {}, - [], - -42, - true, - false, - null, - { - "integer": 1234567890, - "real": -9876.543210, - "e": 0.123456789e-12, - "E": 1.234567890E+34, - "": 23456789012E666, - "zero": 0, - "one": 1, - "space": " ", - "quote": "\"", - "backslash": "\\", - "controls": "\b\f\n\r\t", - "slash": "/ & \/", - "alpha": "abcdefghijklmnopqrstuvwyz", - "ALPHA": "ABCDEFGHIJKLMNOPQRSTUVWYZ", - "digit": "0123456789", - "special": "`1~!@#$%^&*()_+-={':[,]}|;.</>?", - "hex": "\u0123\u4567\u89AB\uCDEF\uabcd\uef4A", - "true": true, - "false": false, - "null": null, - "array":[ ], - "object":{ }, - "address": "50 St. James Street", - "url": "http://www.JSON.org/", - "comment": "// /* <!-- --", - "# -- --> */": " ", - " s p a c e d " :[1,2 , 3 - -, - -4 , 5 , 6 ,7 ], - "compact": [1,2,3,4,5,6,7], - "jsontext": "{\"object with 1 member\":[\"array with 1 element\"]}", - "quotes": "" \u0022 %22 0x22 034 "", - "\/\\\"\uCAFE\uBABE\uAB98\uFCDE\ubcda\uef4A\b\f\n\r\t`1~!@#$%^&*()_+-=[]{}|;:',./<>?" -: "A key can be any string" - }, - 0.5 ,98.6 -, -99.44 -, - -1066 - - -,"rosebud"] - -DECODE: AS OBJECT -array(14) { - [0]=> - string(23) "JSON Test Pattern pass1" - [1]=> - object(stdClass)#1 (1) { - ["object with 1 member"]=> - array(1) { - [0]=> - string(20) "array with 1 element" - } - } - [2]=> - object(stdClass)#2 (0) { - } - [3]=> - array(0) { - } - [4]=> - int(-42) - [5]=> - bool(true) - [6]=> - bool(false) - [7]=> - NULL - [8]=> - object(stdClass)#3 (31) { - ["integer"]=> - int(1234567890) - ["real"]=> - float(-9876.54321) - ["e"]=> - float(1.23456789E-13) - ["E"]=> - float(1.23456789E+34) - ["_empty_"]=> - float(INF) - ["zero"]=> - int(0) - ["one"]=> - int(1) - ["space"]=> - string(1) " " - ["quote"]=> - string(1) """ - ["backslash"]=> - string(1) "\" - ["controls"]=> - string(5) " -
" - ["slash"]=> - string(5) "/ & /" - ["alpha"]=> - string(25) "abcdefghijklmnopqrstuvwyz" - ["ALPHA"]=> - string(25) "ABCDEFGHIJKLMNOPQRSTUVWYZ" - ["digit"]=> - string(10) "0123456789" - ["special"]=> - string(31) "`1~!@#$%^&*()_+-={':[,]}|;.</>?" - ["hex"]=> - string(17) "ģ䕧覫췯ꯍ" - ["true"]=> - bool(true) - ["false"]=> - bool(false) - ["null"]=> - NULL - ["array"]=> - array(0) { - } - ["object"]=> - object(stdClass)#4 (0) { - } - ["address"]=> - string(19) "50 St. James Street" - ["url"]=> - string(20) "http://www.JSON.org/" - ["comment"]=> - string(13) "// /* <!-- --" - ["# -- --> */"]=> - string(1) " " - [" s p a c e d "]=> - array(7) { - [0]=> - int(1) - [1]=> - int(2) - [2]=> - int(3) - [3]=> - int(4) - [4]=> - int(5) - [5]=> - int(6) - [6]=> - int(7) - } - ["compact"]=> - array(7) { - [0]=> - int(1) - [1]=> - int(2) - [2]=> - int(3) - [3]=> - int(4) - [4]=> - int(5) - [5]=> - int(6) - [6]=> - int(7) - } - ["jsontext"]=> - string(49) "{"object with 1 member":["array with 1 element"]}" - ["quotes"]=> - string(27) "" " %22 0x22 034 "" - ["/\"쫾몾ꮘﳞ볚 -
`1~!@#$%^&*()_+-=[]{}|;:',./<>?"]=> - string(23) "A key can be any string" - } - [9]=> - float(0.5) - [10]=> - float(98.6) - [11]=> - float(99.44) - [12]=> - int(1066) - [13]=> - string(7) "rosebud" -} -DECODE: AS ARRAY -array(14) { - [0]=> - string(23) "JSON Test Pattern pass1" - [1]=> - array(1) { - ["object with 1 member"]=> - array(1) { - [0]=> - string(20) "array with 1 element" - } - } - [2]=> - array(0) { - } - [3]=> - array(0) { - } - [4]=> - int(-42) - [5]=> - bool(true) - [6]=> - bool(false) - [7]=> - NULL - [8]=> - array(31) { - ["integer"]=> - int(1234567890) - ["real"]=> - float(-9876.54321) - ["e"]=> - float(1.23456789E-13) - ["E"]=> - float(1.23456789E+34) - [""]=> - float(INF) - ["zero"]=> - int(0) - ["one"]=> - int(1) - ["space"]=> - string(1) " " - ["quote"]=> - string(1) """ - ["backslash"]=> - string(1) "\" - ["controls"]=> - string(5) " -
" - ["slash"]=> - string(5) "/ & /" - ["alpha"]=> - string(25) "abcdefghijklmnopqrstuvwyz" - ["ALPHA"]=> - string(25) "ABCDEFGHIJKLMNOPQRSTUVWYZ" - ["digit"]=> - string(10) "0123456789" - ["special"]=> - string(31) "`1~!@#$%^&*()_+-={':[,]}|;.</>?" - ["hex"]=> - string(17) "ģ䕧覫췯ꯍ" - ["true"]=> - bool(true) - ["false"]=> - bool(false) - ["null"]=> - NULL - ["array"]=> - array(0) { - } - ["object"]=> - array(0) { - } - ["address"]=> - string(19) "50 St. James Street" - ["url"]=> - string(20) "http://www.JSON.org/" - ["comment"]=> - string(13) "// /* <!-- --" - ["# -- --> */"]=> - string(1) " " - [" s p a c e d "]=> - array(7) { - [0]=> - int(1) - [1]=> - int(2) - [2]=> - int(3) - [3]=> - int(4) - [4]=> - int(5) - [5]=> - int(6) - [6]=> - int(7) - } - ["compact"]=> - array(7) { - [0]=> - int(1) - [1]=> - int(2) - [2]=> - int(3) - [3]=> - int(4) - [4]=> - int(5) - [5]=> - int(6) - [6]=> - int(7) - } - ["jsontext"]=> - string(49) "{"object with 1 member":["array with 1 element"]}" - ["quotes"]=> - string(27) "" " %22 0x22 034 "" - ["/\"쫾몾ꮘﳞ볚 -
`1~!@#$%^&*()_+-=[]{}|;:',./<>?"]=> - string(23) "A key can be any string" - } - [9]=> - float(0.5) - [10]=> - float(98.6) - [11]=> - float(99.44) - [12]=> - int(1066) - [13]=> - string(7) "rosebud" -} -ENCODE: FROM OBJECT -["JSON Test Pattern pass1",{"object with 1 member":["array with 1 element"]},{},[],-42,true,false,null,{"integer":1234567890,"real":-9876.54321,"e":1.23456789e-13,"E":1.23456789e+34,"_empty_":0,"zero":0,"one":1,"space":" ","quote":"\"","backslash":"\\","controls":"\b\f\n\r\t","slash":"\/ & \/","alpha":"abcdefghijklmnopqrstuvwyz","ALPHA":"ABCDEFGHIJKLMNOPQRSTUVWYZ","digit":"0123456789","special":"`1~!@#$%^&*()_+-={':[,]}|;.<\/>?","hex":"\u0123\u4567\u89ab\ucdef\uabcd\uef4a","true":true,"false":false,"null":null,"array":[],"object":{},"address":"50 St. James Street","url":"http:\/\/www.JSON.org\/","comment":"\/\/ \/* <!-- --","# -- --> *\/":" "," s p a c e d ":[1,2,3,4,5,6,7],"compact":[1,2,3,4,5,6,7],"jsontext":"{\"object with 1 member\":[\"array with 1 element\"]}","quotes":"" \" %22 0x22 034 "","\/\\\"\ucafe\ubabe\uab98\ufcde\ubcda\uef4a\b\f\n\r\t`1~!@#$%^&*()_+-=[]{}|;:',.\/<>?":"A key can be any string"},0.5,98.6,99.44,1066,"rosebud"] -ENCODE: FROM ARRAY -["JSON Test Pattern pass1",{"object with 1 member":["array with 1 element"]},[],[],-42,true,false,null,{"integer":1234567890,"real":-9876.54321,"e":1.23456789e-13,"E":1.23456789e+34,"":0,"zero":0,"one":1,"space":" ","quote":"\"","backslash":"\\","controls":"\b\f\n\r\t","slash":"\/ & \/","alpha":"abcdefghijklmnopqrstuvwyz","ALPHA":"ABCDEFGHIJKLMNOPQRSTUVWYZ","digit":"0123456789","special":"`1~!@#$%^&*()_+-={':[,]}|;.<\/>?","hex":"\u0123\u4567\u89ab\ucdef\uabcd\uef4a","true":true,"false":false,"null":null,"array":[],"object":[],"address":"50 St. James Street","url":"http:\/\/www.JSON.org\/","comment":"\/\/ \/* <!-- --","# -- --> *\/":" "," s p a c e d ":[1,2,3,4,5,6,7],"compact":[1,2,3,4,5,6,7],"jsontext":"{\"object with 1 member\":[\"array with 1 element\"]}","quotes":"" \" %22 0x22 034 "","\/\\\"\ucafe\ubabe\uab98\ufcde\ubcda\uef4a\b\f\n\r\t`1~!@#$%^&*()_+-=[]{}|;:',.\/<>?":"A key can be any string"},0.5,98.6,99.44,1066,"rosebud"] -DECODE AGAIN: AS OBJECT -array(14) { - [0]=> - string(23) "JSON Test Pattern pass1" - [1]=> - object(stdClass)#5 (1) { - ["object with 1 member"]=> - array(1) { - [0]=> - string(20) "array with 1 element" - } - } - [2]=> - object(stdClass)#6 (0) { - } - [3]=> - array(0) { - } - [4]=> - int(-42) - [5]=> - bool(true) - [6]=> - bool(false) - [7]=> - NULL - [8]=> - object(stdClass)#7 (31) { - ["integer"]=> - int(1234567890) - ["real"]=> - float(-9876.54321) - ["e"]=> - float(1.23456789E-13) - ["E"]=> - float(1.23456789E+34) - ["_empty_"]=> - int(0) - ["zero"]=> - int(0) - ["one"]=> - int(1) - ["space"]=> - string(1) " " - ["quote"]=> - string(1) """ - ["backslash"]=> - string(1) "\" - ["controls"]=> - string(5) " -
" - ["slash"]=> - string(5) "/ & /" - ["alpha"]=> - string(25) "abcdefghijklmnopqrstuvwyz" - ["ALPHA"]=> - string(25) "ABCDEFGHIJKLMNOPQRSTUVWYZ" - ["digit"]=> - string(10) "0123456789" - ["special"]=> - string(31) "`1~!@#$%^&*()_+-={':[,]}|;.</>?" - ["hex"]=> - string(17) "ģ䕧覫췯ꯍ" - ["true"]=> - bool(true) - ["false"]=> - bool(false) - ["null"]=> - NULL - ["array"]=> - array(0) { - } - ["object"]=> - object(stdClass)#8 (0) { - } - ["address"]=> - string(19) "50 St. James Street" - ["url"]=> - string(20) "http://www.JSON.org/" - ["comment"]=> - string(13) "// /* <!-- --" - ["# -- --> */"]=> - string(1) " " - [" s p a c e d "]=> - array(7) { - [0]=> - int(1) - [1]=> - int(2) - [2]=> - int(3) - [3]=> - int(4) - [4]=> - int(5) - [5]=> - int(6) - [6]=> - int(7) - } - ["compact"]=> - array(7) { - [0]=> - int(1) - [1]=> - int(2) - [2]=> - int(3) - [3]=> - int(4) - [4]=> - int(5) - [5]=> - int(6) - [6]=> - int(7) - } - ["jsontext"]=> - string(49) "{"object with 1 member":["array with 1 element"]}" - ["quotes"]=> - string(27) "" " %22 0x22 034 "" - ["/\"쫾몾ꮘﳞ볚 -
`1~!@#$%^&*()_+-=[]{}|;:',./<>?"]=> - string(23) "A key can be any string" - } - [9]=> - float(0.5) - [10]=> - float(98.6) - [11]=> - float(99.44) - [12]=> - int(1066) - [13]=> - string(7) "rosebud" -} -DECODE AGAIN: AS ARRAY -array(14) { - [0]=> - string(23) "JSON Test Pattern pass1" - [1]=> - array(1) { - ["object with 1 member"]=> - array(1) { - [0]=> - string(20) "array with 1 element" - } - } - [2]=> - array(0) { - } - [3]=> - array(0) { - } - [4]=> - int(-42) - [5]=> - bool(true) - [6]=> - bool(false) - [7]=> - NULL - [8]=> - array(31) { - ["integer"]=> - int(1234567890) - ["real"]=> - float(-9876.54321) - ["e"]=> - float(1.23456789E-13) - ["E"]=> - float(1.23456789E+34) - [""]=> - int(0) - ["zero"]=> - int(0) - ["one"]=> - int(1) - ["space"]=> - string(1) " " - ["quote"]=> - string(1) """ - ["backslash"]=> - string(1) "\" - ["controls"]=> - string(5) " -
" - ["slash"]=> - string(5) "/ & /" - ["alpha"]=> - string(25) "abcdefghijklmnopqrstuvwyz" - ["ALPHA"]=> - string(25) "ABCDEFGHIJKLMNOPQRSTUVWYZ" - ["digit"]=> - string(10) "0123456789" - ["special"]=> - string(31) "`1~!@#$%^&*()_+-={':[,]}|;.</>?" - ["hex"]=> - string(17) "ģ䕧覫췯ꯍ" - ["true"]=> - bool(true) - ["false"]=> - bool(false) - ["null"]=> - NULL - ["array"]=> - array(0) { - } - ["object"]=> - array(0) { - } - ["address"]=> - string(19) "50 St. James Street" - ["url"]=> - string(20) "http://www.JSON.org/" - ["comment"]=> - string(13) "// /* <!-- --" - ["# -- --> */"]=> - string(1) " " - [" s p a c e d "]=> - array(7) { - [0]=> - int(1) - [1]=> - int(2) - [2]=> - int(3) - [3]=> - int(4) - [4]=> - int(5) - [5]=> - int(6) - [6]=> - int(7) - } - ["compact"]=> - array(7) { - [0]=> - int(1) - [1]=> - int(2) - [2]=> - int(3) - [3]=> - int(4) - [4]=> - int(5) - [5]=> - int(6) - [6]=> - int(7) - } - ["jsontext"]=> - string(49) "{"object with 1 member":["array with 1 element"]}" - ["quotes"]=> - string(27) "" " %22 0x22 034 "" - ["/\"쫾몾ꮘﳞ볚 -
`1~!@#$%^&*()_+-=[]{}|;:',./<>?"]=> - string(23) "A key can be any string" - } - [9]=> - float(0.5) - [10]=> - float(98.6) - [11]=> - float(99.44) - [12]=> - int(1066) - [13]=> - string(7) "rosebud" -} diff --git a/ext/json/tests/pass002.phpt b/ext/json/tests/pass002.phpt deleted file mode 100644 index 24c7e3358..000000000 --- a/ext/json/tests/pass002.phpt +++ /dev/null @@ -1,275 +0,0 @@ ---TEST-- -JSON (http://www.crockford.com/JSON/JSON_checker/test/pass2.json) ---SKIPIF-- -<?php - if (!extension_loaded('json')) die('skip: json extension not available'); -?> ---FILE-- -<?php - -$test = '[[[[[[[[[[[[[[[[[[["Not too deep"]]]]]]]]]]]]]]]]]]]'; -echo 'Testing: ' . $test . "\n"; -echo "DECODE: AS OBJECT\n"; -$obj = json_decode($test); -var_dump($obj); -echo "DECODE: AS ARRAY\n"; -$arr = json_decode($test, true); -var_dump($arr); - -echo "ENCODE: FROM OBJECT\n"; -$obj_enc = json_encode($obj); -echo $obj_enc . "\n"; -echo "ENCODE: FROM ARRAY\n"; -$arr_enc = json_encode($arr); -echo $arr_enc . "\n"; - -echo "DECODE AGAIN: AS OBJECT\n"; -$obj = json_decode($obj_enc); -var_dump($obj); -echo "DECODE AGAIN: AS ARRAY\n"; -$arr = json_decode($arr_enc, true); -var_dump($arr); - -?> ---EXPECT-- -Testing: [[[[[[[[[[[[[[[[[[["Not too deep"]]]]]]]]]]]]]]]]]]] -DECODE: AS OBJECT -array(1) { - [0]=> - array(1) { - [0]=> - array(1) { - [0]=> - array(1) { - [0]=> - array(1) { - [0]=> - array(1) { - [0]=> - array(1) { - [0]=> - array(1) { - [0]=> - array(1) { - [0]=> - array(1) { - [0]=> - array(1) { - [0]=> - array(1) { - [0]=> - array(1) { - [0]=> - array(1) { - [0]=> - array(1) { - [0]=> - array(1) { - [0]=> - array(1) { - [0]=> - array(1) { - [0]=> - array(1) { - [0]=> - string(12) "Not too deep" - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } -} -DECODE: AS ARRAY -array(1) { - [0]=> - array(1) { - [0]=> - array(1) { - [0]=> - array(1) { - [0]=> - array(1) { - [0]=> - array(1) { - [0]=> - array(1) { - [0]=> - array(1) { - [0]=> - array(1) { - [0]=> - array(1) { - [0]=> - array(1) { - [0]=> - array(1) { - [0]=> - array(1) { - [0]=> - array(1) { - [0]=> - array(1) { - [0]=> - array(1) { - [0]=> - array(1) { - [0]=> - array(1) { - [0]=> - array(1) { - [0]=> - string(12) "Not too deep" - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } -} -ENCODE: FROM OBJECT -[[[[[[[[[[[[[[[[[[["Not too deep"]]]]]]]]]]]]]]]]]]] -ENCODE: FROM ARRAY -[[[[[[[[[[[[[[[[[[["Not too deep"]]]]]]]]]]]]]]]]]]] -DECODE AGAIN: AS OBJECT -array(1) { - [0]=> - array(1) { - [0]=> - array(1) { - [0]=> - array(1) { - [0]=> - array(1) { - [0]=> - array(1) { - [0]=> - array(1) { - [0]=> - array(1) { - [0]=> - array(1) { - [0]=> - array(1) { - [0]=> - array(1) { - [0]=> - array(1) { - [0]=> - array(1) { - [0]=> - array(1) { - [0]=> - array(1) { - [0]=> - array(1) { - [0]=> - array(1) { - [0]=> - array(1) { - [0]=> - array(1) { - [0]=> - string(12) "Not too deep" - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } -} -DECODE AGAIN: AS ARRAY -array(1) { - [0]=> - array(1) { - [0]=> - array(1) { - [0]=> - array(1) { - [0]=> - array(1) { - [0]=> - array(1) { - [0]=> - array(1) { - [0]=> - array(1) { - [0]=> - array(1) { - [0]=> - array(1) { - [0]=> - array(1) { - [0]=> - array(1) { - [0]=> - array(1) { - [0]=> - array(1) { - [0]=> - array(1) { - [0]=> - array(1) { - [0]=> - array(1) { - [0]=> - array(1) { - [0]=> - array(1) { - [0]=> - string(12) "Not too deep" - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } -} diff --git a/ext/json/tests/pass003.phpt b/ext/json/tests/pass003.phpt deleted file mode 100644 index 36da4a1de..000000000 --- a/ext/json/tests/pass003.phpt +++ /dev/null @@ -1,94 +0,0 @@ ---TEST-- -JSON (http://www.crockford.com/JSON/JSON_checker/test/pass3.json) ---SKIPIF-- -<?php - if (!extension_loaded('json')) die('skip: json extension not available'); -?> ---FILE-- -<?php - -$test = ' -{ - "JSON Test Pattern pass3": { - "The outermost value": "must be an object or array.", - "In this test": "It is an object." - } -} -'; - -echo 'Testing: ' . $test . "\n"; -echo "DECODE: AS OBJECT\n"; -$obj = json_decode($test); -var_dump($obj); -echo "DECODE: AS ARRAY\n"; -$arr = json_decode($test, true); -var_dump($arr); - -echo "ENCODE: FROM OBJECT\n"; -$obj_enc = json_encode($obj); -echo $obj_enc . "\n"; -echo "ENCODE: FROM ARRAY\n"; -$arr_enc = json_encode($arr); -echo $arr_enc . "\n"; - -echo "DECODE AGAIN: AS OBJECT\n"; -$obj = json_decode($obj_enc); -var_dump($obj); -echo "DECODE AGAIN: AS ARRAY\n"; -$arr = json_decode($arr_enc, true); -var_dump($arr); - -?> ---EXPECT-- -Testing: -{ - "JSON Test Pattern pass3": { - "The outermost value": "must be an object or array.", - "In this test": "It is an object." - } -} - -DECODE: AS OBJECT -object(stdClass)#1 (1) { - ["JSON Test Pattern pass3"]=> - object(stdClass)#2 (2) { - ["The outermost value"]=> - string(27) "must be an object or array." - ["In this test"]=> - string(16) "It is an object." - } -} -DECODE: AS ARRAY -array(1) { - ["JSON Test Pattern pass3"]=> - array(2) { - ["The outermost value"]=> - string(27) "must be an object or array." - ["In this test"]=> - string(16) "It is an object." - } -} -ENCODE: FROM OBJECT -{"JSON Test Pattern pass3":{"The outermost value":"must be an object or array.","In this test":"It is an object."}} -ENCODE: FROM ARRAY -{"JSON Test Pattern pass3":{"The outermost value":"must be an object or array.","In this test":"It is an object."}} -DECODE AGAIN: AS OBJECT -object(stdClass)#3 (1) { - ["JSON Test Pattern pass3"]=> - object(stdClass)#4 (2) { - ["The outermost value"]=> - string(27) "must be an object or array." - ["In this test"]=> - string(16) "It is an object." - } -} -DECODE AGAIN: AS ARRAY -array(1) { - ["JSON Test Pattern pass3"]=> - array(2) { - ["The outermost value"]=> - string(27) "must be an object or array." - ["In this test"]=> - string(16) "It is an object." - } -} diff --git a/ext/json/tests/serialize.phpt b/ext/json/tests/serialize.phpt deleted file mode 100644 index 5c513d58a..000000000 --- a/ext/json/tests/serialize.phpt +++ /dev/null @@ -1,80 +0,0 @@ ---TEST-- -json_encode() Serialization tests ---SKIPIF-- -<?php if (!extension_loaded("json")) print "skip"; ?> ---FILE-- -<?php - -class NonSerializingTest -{ - public $data; - - public function __construct($data) - { - $this->data = $data; - } -} - -class SerializingTest extends NonSerializingTest implements JsonSerializable -{ - public function jsonSerialize() - { - return $this->data; - } -} - -class ValueSerializingTest extends SerializingTest -{ - public function jsonSerialize() - { - return array_values(is_array($this->data) ? $this->data : get_object_vars($this->data)); - } -} - -class SelfSerializingTest extends SerializingTest -{ - public function jsonSerialize() - { - return $this; - } -} - -$adata = array( - 'str' => 'foo', - 'int' => 1, - 'float' => 2.3, - 'bool' => false, - 'nil' => null, - 'arr' => array(1,2,3), - 'obj' => new StdClass, -); - -$ndata = array_values($adata); - -$odata = (object)$adata; - -foreach(array('NonSerializingTest','SerializingTest','ValueSerializingTest','SelfSerializingTest') as $class) { - echo "==$class==\n"; - echo json_encode(new $class($adata)), "\n"; - echo json_encode(new $class($ndata)), "\n"; - echo json_encode(new $class($odata)), "\n"; -} ---EXPECT-- -==NonSerializingTest== -{"data":{"str":"foo","int":1,"float":2.3,"bool":false,"nil":null,"arr":[1,2,3],"obj":{}}} -{"data":["foo",1,2.3,false,null,[1,2,3],{}]} -{"data":{"str":"foo","int":1,"float":2.3,"bool":false,"nil":null,"arr":[1,2,3],"obj":{}}} -==SerializingTest== -{"str":"foo","int":1,"float":2.3,"bool":false,"nil":null,"arr":[1,2,3],"obj":{}} -["foo",1,2.3,false,null,[1,2,3],{}] -{"str":"foo","int":1,"float":2.3,"bool":false,"nil":null,"arr":[1,2,3],"obj":{}} -==ValueSerializingTest== -["foo",1,2.3,false,null,[1,2,3],{}] -["foo",1,2.3,false,null,[1,2,3],{}] -["foo",1,2.3,false,null,[1,2,3],{}] -==SelfSerializingTest== -{"data":{"str":"foo","int":1,"float":2.3,"bool":false,"nil":null,"arr":[1,2,3],"obj":{}}} -{"data":["foo",1,2.3,false,null,[1,2,3],{}]} -{"data":{"str":"foo","int":1,"float":2.3,"bool":false,"nil":null,"arr":[1,2,3],"obj":{}}} - - diff --git a/ext/json/tests/unsupported_type_error.phpt b/ext/json/tests/unsupported_type_error.phpt deleted file mode 100644 index 45a167a5a..000000000 --- a/ext/json/tests/unsupported_type_error.phpt +++ /dev/null @@ -1,26 +0,0 @@ ---TEST-- -An error is thrown when an unsupported type is encoded ---SKIPIF-- -<?php if (!extension_loaded("json")) print "skip"; ?> ---FILE-- -<?php - -$resource = fopen(__FILE__, "r"); - -var_dump($resource); - -var_dump(json_encode($resource)); -var_dump(json_last_error(), json_last_error_msg()); - -var_dump(json_encode($resource, JSON_PARTIAL_OUTPUT_ON_ERROR)); -var_dump(json_last_error(), json_last_error_msg()); - -?> ---EXPECTF-- -resource(5) of type (stream) -bool(false) -int(8) -string(21) "Type is not supported" -string(4) "null" -int(8) -string(21) "Type is not supported" diff --git a/ext/json/utf8_decode.c b/ext/json/utf8_decode.c deleted file mode 100644 index 2d0422bed..000000000 --- a/ext/json/utf8_decode.c +++ /dev/null @@ -1,179 +0,0 @@ -/* utf8_decode.c */ - -/* 2005-12-25 */ - -/* -Copyright (c) 2005 JSON.org - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -The Software shall be used for Good, not Evil. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -*/ - -#include "utf8_decode.h" - -/* - Very Strict UTF-8 Decoder - - UTF-8 is a multibyte character encoding of Unicode. A character can be - represented by 1-4 bytes. The bit pattern of the first byte indicates the - number of continuation bytes. - - Most UTF-8 decoders tend to be lenient, attempting to recover as much - information as possible, even from badly encoded input. This UTF-8 - decoder is not lenient. It will reject input which does not include - proper continuation bytes. It will reject aliases (or suboptimal - codings). It will reject surrogates. (Surrogate encoding should only be - used with UTF-16.) - - Code Contination Minimum Maximum - 0xxxxxxx 0 0 127 - 10xxxxxx error - 110xxxxx 1 128 2047 - 1110xxxx 2 2048 65535 excluding 55296 - 57343 - 11110xxx 3 65536 1114111 - 11111xxx error -*/ - - -/* - Get the next byte. It returns UTF8_END if there are no more bytes. -*/ -static int -get(json_utf8_decode *utf8) -{ - int c; - if (utf8->the_index >= utf8->the_length) { - return UTF8_END; - } - c = utf8->the_input[utf8->the_index] & 0xFF; - utf8->the_index += 1; - return c; -} - - -/* - Get the 6-bit payload of the next continuation byte. - Return UTF8_ERROR if it is not a contination byte. -*/ -static int -cont(json_utf8_decode *utf8) -{ - int c = get(utf8); - return ((c & 0xC0) == 0x80) ? (c & 0x3F) : UTF8_ERROR; -} - - -/* - Initialize the UTF-8 decoder. The decoder is not reentrant, -*/ -void -utf8_decode_init(json_utf8_decode *utf8, char p[], int length) -{ - utf8->the_index = 0; - utf8->the_input = p; - utf8->the_length = length; - utf8->the_char = 0; - utf8->the_byte = 0; -} - - -/* - Get the current byte offset. This is generally used in error reporting. -*/ -int -utf8_decode_at_byte(json_utf8_decode *utf8) -{ - return utf8->the_byte; -} - - -/* - Get the current character offset. This is generally used in error reporting. - The character offset matches the byte offset if the text is strictly ASCII. -*/ -int -utf8_decode_at_character(json_utf8_decode *utf8) -{ - return utf8->the_char > 0 ? utf8->the_char - 1 : 0; -} - - -/* - Extract the next character. - Returns: the character (between 0 and 1114111) - or UTF8_END (the end) - or UTF8_ERROR (error) -*/ -int -utf8_decode_next(json_utf8_decode *utf8) -{ - int c; /* the first byte of the character */ - int r; /* the result */ - - if (utf8->the_index >= utf8->the_length) { - return utf8->the_index == utf8->the_length ? UTF8_END : UTF8_ERROR; - } - utf8->the_byte = utf8->the_index; - utf8->the_char += 1; - c = get(utf8); -/* - Zero continuation (0 to 127) -*/ - if ((c & 0x80) == 0) { - return c; - } -/* - One contination (128 to 2047) -*/ - if ((c & 0xE0) == 0xC0) { - int c1 = cont(utf8); - if (c1 < 0) { - return UTF8_ERROR; - } - r = ((c & 0x1F) << 6) | c1; - return r >= 128 ? r : UTF8_ERROR; - } -/* - Two continuation (2048 to 55295 and 57344 to 65535) -*/ - if ((c & 0xF0) == 0xE0) { - int c1 = cont(utf8); - int c2 = cont(utf8); - if (c1 < 0 || c2 < 0) { - return UTF8_ERROR; - } - r = ((c & 0x0F) << 12) | (c1 << 6) | c2; - return r >= 2048 && (r < 55296 || r > 57343) ? r : UTF8_ERROR; - } -/* - Three continuation (65536 to 1114111) -*/ - if ((c & 0xF8) == 0xF0) { - int c1 = cont(utf8); - int c2 = cont(utf8); - int c3 = cont(utf8); - if (c1 < 0 || c2 < 0 || c3 < 0) { - return UTF8_ERROR; - } - r = ((c & 0x0F) << 18) | (c1 << 12) | (c2 << 6) | c3; - return r >= 65536 && r <= 1114111 ? r : UTF8_ERROR; - } - return UTF8_ERROR; -} diff --git a/ext/json/utf8_decode.h b/ext/json/utf8_decode.h deleted file mode 100644 index cc0fc79f6..000000000 --- a/ext/json/utf8_decode.h +++ /dev/null @@ -1,18 +0,0 @@ -/* utf8_decode.h */ - -#define UTF8_END -1 -#define UTF8_ERROR -2 - -typedef struct json_utf8_decode -{ - int the_index; - char *the_input; - int the_length; - int the_char; - int the_byte; -} json_utf8_decode; - -extern int utf8_decode_at_byte(json_utf8_decode *utf8); -extern int utf8_decode_at_character(json_utf8_decode *utf8); -extern void utf8_decode_init(json_utf8_decode *utf8, char p[], int length); -extern int utf8_decode_next(json_utf8_decode *utf8); |