diff options
Diffstat (limited to 'ext/standard/var_unserializer.c')
| -rw-r--r-- | ext/standard/var_unserializer.c | 446 |
1 files changed, 218 insertions, 228 deletions
diff --git a/ext/standard/var_unserializer.c b/ext/standard/var_unserializer.c index f48c44660c..7e429a40bd 100644 --- a/ext/standard/var_unserializer.c +++ b/ext/standard/var_unserializer.c @@ -23,6 +23,7 @@ #include "php.h" #include "ext/standard/php_var.h" #include "php_incomplete_class.h" +#include "zend_portability.h" struct php_unserialize_data { void *first; @@ -232,14 +233,14 @@ PHPAPI void var_destroy(php_unserialize_data_t *var_hashx) } } - zval_ptr_dtor(zv); + i_zval_ptr_dtor(zv ZEND_FILE_LINE_CC); } next = var_dtor_hash->next; efree_size(var_dtor_hash, sizeof(var_dtor_entries)); var_dtor_hash = next; } - zval_ptr_dtor(&wakeup_name); + zval_ptr_dtor_nogc(&wakeup_name); } /* }}} */ @@ -316,7 +317,7 @@ static inline int unserialize_allowed_class( #define YYMARKER marker -#line 324 "ext/standard/var_unserializer.re" +#line 325 "ext/standard/var_unserializer.re" @@ -352,10 +353,6 @@ static inline size_t parse_uiv(const unsigned char *p) unsigned char cursor; size_t result = 0; - if (*p == '+') { - p++; - } - while (1) { cursor = *p; if (cursor >= '0' && cursor <= '9') { @@ -382,7 +379,7 @@ static zend_always_inline int process_nested_data(UNSERIALIZE_PARAMETER, HashTab ZVAL_UNDEF(&key); if (!php_var_unserialize_internal(&key, p, max, NULL)) { - zval_dtor(&key); + zval_ptr_dtor(&key); return 0; } @@ -412,38 +409,82 @@ numeric_key: data = zend_hash_add_new(ht, Z_STR(key), &d); } } else { - zval_dtor(&key); + zval_ptr_dtor(&key); return 0; } } else { if (EXPECTED(Z_TYPE(key) == IS_STRING)) { string_key: - if ((old_data = zend_hash_find(ht, Z_STR(key))) != NULL) { - if (Z_TYPE_P(old_data) == IS_INDIRECT) { - old_data = Z_INDIRECT_P(old_data); + { + zend_property_info *existing_propinfo; + zend_string *new_key, *unmangled; + const char *unmangled_class = NULL; + const char *unmangled_prop; + size_t unmangled_prop_len; + + if (UNEXPECTED(zend_unmangle_property_name_ex(Z_STR(key), &unmangled_class, &unmangled_prop, &unmangled_prop_len) == FAILURE)) { + zval_ptr_dtor(&key); + return 0; + } + + unmangled = zend_string_init(unmangled_prop, unmangled_prop_len, 0); + if (Z_TYPE_P(rval) == IS_OBJECT + && ((existing_propinfo = zend_hash_find_ptr(&Z_OBJCE_P(rval)->properties_info, unmangled)) != NULL) + && (existing_propinfo->flags & ZEND_ACC_PPP_MASK)) { + if (existing_propinfo->flags & ZEND_ACC_PROTECTED) { + new_key = zend_mangle_property_name( + "*", 1, ZSTR_VAL(unmangled), ZSTR_LEN(unmangled), Z_OBJCE_P(rval)->type & ZEND_INTERNAL_CLASS); + zend_string_release(unmangled); + } else if (existing_propinfo->flags & ZEND_ACC_PRIVATE) { + if (unmangled_class != NULL && strcmp(unmangled_class, "*") != 0) { + new_key = zend_mangle_property_name( + unmangled_class, strlen(unmangled_class), + ZSTR_VAL(unmangled), ZSTR_LEN(unmangled), + Z_OBJCE_P(rval)->type & ZEND_INTERNAL_CLASS); + } else { + new_key = zend_mangle_property_name( + ZSTR_VAL(existing_propinfo->ce->name), ZSTR_LEN(existing_propinfo->ce->name), + ZSTR_VAL(unmangled), ZSTR_LEN(unmangled), + Z_OBJCE_P(rval)->type & ZEND_INTERNAL_CLASS); + } + zend_string_release(unmangled); + } else { + ZEND_ASSERT(existing_propinfo->flags & ZEND_ACC_PUBLIC); + new_key = unmangled; + } + zend_string_release(Z_STR(key)); + ZVAL_STR(&key, new_key); + } else { + zend_string_release(unmangled); + } + + if ((old_data = zend_hash_find(ht, Z_STR(key))) != NULL) { + if (Z_TYPE_P(old_data) == IS_INDIRECT) { + old_data = Z_INDIRECT_P(old_data); + } + var_push_dtor(var_hash, old_data); + data = zend_hash_update_ind(ht, Z_STR(key), &d); + } else { + data = zend_hash_add_new(ht, Z_STR(key), &d); } - var_push_dtor(var_hash, old_data); - data = zend_hash_update_ind(ht, Z_STR(key), &d); - } else { - data = zend_hash_add_new(ht, Z_STR(key), &d); } } else if (Z_TYPE(key) == IS_LONG) { /* object properties should include no integers */ convert_to_string(&key); goto string_key; } else { - zval_dtor(&key); + zval_ptr_dtor(&key); return 0; } } if (!php_var_unserialize_internal(data, p, max, var_hash)) { - zval_dtor(&key); + zval_ptr_dtor(&key); return 0; } var_push_dtor(var_hash, data); - zval_dtor(&key); + zval_ptr_dtor(&key); if (elements && *(*p-1) != ';' && *(*p-1) != '}') { (*p)--; @@ -603,7 +644,7 @@ static int php_var_unserialize_internal(UNSERIALIZE_PARAMETER) start = cursor; -#line 607 "ext/standard/var_unserializer.c" +#line 648 "ext/standard/var_unserializer.c" { YYCTYPE yych; static const unsigned char yybm[] = { @@ -661,9 +702,9 @@ static int php_var_unserialize_internal(UNSERIALIZE_PARAMETER) yy2: ++YYCURSOR; yy3: -#line 982 "ext/standard/var_unserializer.re" +#line 1035 "ext/standard/var_unserializer.re" { return 0; } -#line 667 "ext/standard/var_unserializer.c" +#line 708 "ext/standard/var_unserializer.c" yy4: yych = *(YYMARKER = ++YYCURSOR); if (yych == ':') goto yy17; @@ -710,288 +751,236 @@ yy14: goto yy3; yy15: ++YYCURSOR; -#line 976 "ext/standard/var_unserializer.re" +#line 1029 "ext/standard/var_unserializer.re" { /* this is the case where we have less data than planned */ php_error_docref(NULL, E_NOTICE, "Unexpected end of serialized data"); return 0; /* not sure if it should be 0 or 1 here? */ } -#line 720 "ext/standard/var_unserializer.c" +#line 761 "ext/standard/var_unserializer.c" yy17: yych = *++YYCURSOR; if (yybm[0+yych] & 128) { - goto yy31; + goto yy30; } - if (yych == '+') goto yy30; yy18: YYCURSOR = YYMARKER; goto yy3; yy19: ++YYCURSOR; -#line 660 "ext/standard/var_unserializer.re" +#line 701 "ext/standard/var_unserializer.re" { *p = YYCURSOR; ZVAL_NULL(rval); return 1; } -#line 738 "ext/standard/var_unserializer.c" +#line 778 "ext/standard/var_unserializer.c" yy21: yych = *++YYCURSOR; - if (yych <= ',') { - if (yych == '+') goto yy33; - goto yy18; - } else { - if (yych <= '-') goto yy33; - if (yych <= '/') goto yy18; - if (yych <= '9') goto yy34; - goto yy18; - } + if (yych <= '/') goto yy18; + if (yych <= '9') goto yy32; + goto yy18; yy22: yych = *++YYCURSOR; - if (yych == '+') goto yy36; if (yych <= '/') goto yy18; - if (yych <= '9') goto yy37; + if (yych <= '9') goto yy34; goto yy18; yy23: yych = *++YYCURSOR; - if (yych == '+') goto yy39; if (yych <= '/') goto yy18; - if (yych <= '9') goto yy40; + if (yych <= '9') goto yy36; goto yy18; yy24: yych = *++YYCURSOR; if (yych <= '/') goto yy18; - if (yych <= '1') goto yy42; + if (yych <= '1') goto yy38; goto yy18; yy25: yych = *++YYCURSOR; if (yych <= '/') { if (yych <= ',') { - if (yych == '+') goto yy43; + if (yych == '+') goto yy39; goto yy18; } else { - if (yych <= '-') goto yy44; - if (yych <= '.') goto yy45; + if (yych <= '-') goto yy40; + if (yych <= '.') goto yy41; goto yy18; } } else { if (yych <= 'I') { - if (yych <= '9') goto yy46; + if (yych <= '9') goto yy42; if (yych <= 'H') goto yy18; - goto yy48; + goto yy44; } else { - if (yych == 'N') goto yy49; + if (yych == 'N') goto yy45; goto yy18; } } yy26: yych = *++YYCURSOR; if (yych <= ',') { - if (yych == '+') goto yy50; + if (yych == '+') goto yy46; goto yy18; } else { - if (yych <= '-') goto yy50; + if (yych <= '-') goto yy46; if (yych <= '/') goto yy18; - if (yych <= '9') goto yy51; + if (yych <= '9') goto yy47; goto yy18; } yy27: yych = *++YYCURSOR; - if (yych <= ',') { - if (yych == '+') goto yy53; - goto yy18; - } else { - if (yych <= '-') goto yy53; - if (yych <= '/') goto yy18; - if (yych <= '9') goto yy54; - goto yy18; - } + if (yych <= '/') goto yy18; + if (yych <= '9') goto yy49; + goto yy18; yy28: yych = *++YYCURSOR; - if (yych <= ',') { - if (yych == '+') goto yy56; - goto yy18; - } else { - if (yych <= '-') goto yy56; - if (yych <= '/') goto yy18; - if (yych <= '9') goto yy57; - goto yy18; - } + if (yych <= '/') goto yy18; + if (yych <= '9') goto yy51; + goto yy18; yy29: yych = *++YYCURSOR; - if (yych == '+') goto yy59; if (yych <= '/') goto yy18; - if (yych <= '9') goto yy60; + if (yych <= '9') goto yy53; goto yy18; yy30: - yych = *++YYCURSOR; - if (yybm[0+yych] & 128) { - goto yy31; - } - goto yy18; -yy31: ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; if (yybm[0+yych] & 128) { - goto yy31; + goto yy30; } if (yych <= '/') goto yy18; - if (yych <= ':') goto yy62; + if (yych <= ':') goto yy55; goto yy18; -yy33: - yych = *++YYCURSOR; - if (yych <= '/') goto yy18; - if (yych >= ':') goto yy18; -yy34: +yy32: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; if (yych <= '/') goto yy18; - if (yych <= '9') goto yy34; - if (yych == ';') goto yy63; + if (yych <= '9') goto yy32; + if (yych == ';') goto yy56; goto yy18; -yy36: - yych = *++YYCURSOR; - if (yych <= '/') goto yy18; - if (yych >= ':') goto yy18; -yy37: +yy34: ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; if (yych <= '/') goto yy18; - if (yych <= '9') goto yy37; - if (yych <= ':') goto yy65; + if (yych <= '9') goto yy34; + if (yych <= ':') goto yy58; goto yy18; -yy39: - yych = *++YYCURSOR; - if (yych <= '/') goto yy18; - if (yych >= ':') goto yy18; -yy40: +yy36: ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; if (yych <= '/') goto yy18; - if (yych <= '9') goto yy40; - if (yych <= ':') goto yy66; + if (yych <= '9') goto yy36; + if (yych <= ':') goto yy59; goto yy18; -yy42: +yy38: yych = *++YYCURSOR; - if (yych == ';') goto yy67; + if (yych == ';') goto yy60; goto yy18; -yy43: +yy39: yych = *++YYCURSOR; - if (yych == '.') goto yy45; + if (yych == '.') goto yy41; if (yych <= '/') goto yy18; - if (yych <= '9') goto yy46; + if (yych <= '9') goto yy42; goto yy18; -yy44: +yy40: yych = *++YYCURSOR; if (yych <= '/') { if (yych != '.') goto yy18; } else { - if (yych <= '9') goto yy46; - if (yych == 'I') goto yy48; + if (yych <= '9') goto yy42; + if (yych == 'I') goto yy44; goto yy18; } -yy45: +yy41: yych = *++YYCURSOR; if (yych <= '/') goto yy18; - if (yych <= '9') goto yy69; + if (yych <= '9') goto yy62; goto yy18; -yy46: +yy42: ++YYCURSOR; - if ((YYLIMIT - YYCURSOR) < 4) YYFILL(4); + if ((YYLIMIT - YYCURSOR) < 3) YYFILL(3); yych = *YYCURSOR; if (yych <= ':') { if (yych <= '.') { if (yych <= '-') goto yy18; - goto yy69; + goto yy62; } else { if (yych <= '/') goto yy18; - if (yych <= '9') goto yy46; + if (yych <= '9') goto yy42; goto yy18; } } else { if (yych <= 'E') { - if (yych <= ';') goto yy71; + if (yych <= ';') goto yy64; if (yych <= 'D') goto yy18; - goto yy73; + goto yy66; } else { - if (yych == 'e') goto yy73; + if (yych == 'e') goto yy66; goto yy18; } } -yy48: +yy44: yych = *++YYCURSOR; - if (yych == 'N') goto yy74; + if (yych == 'N') goto yy67; goto yy18; -yy49: +yy45: yych = *++YYCURSOR; - if (yych == 'A') goto yy75; + if (yych == 'A') goto yy68; goto yy18; -yy50: +yy46: yych = *++YYCURSOR; if (yych <= '/') goto yy18; if (yych >= ':') goto yy18; -yy51: +yy47: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; if (yych <= '/') goto yy18; - if (yych <= '9') goto yy51; - if (yych == ';') goto yy76; + if (yych <= '9') goto yy47; + if (yych == ';') goto yy69; goto yy18; -yy53: - yych = *++YYCURSOR; - if (yych <= '/') goto yy18; - if (yych >= ':') goto yy18; -yy54: +yy49: ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; if (yych <= '/') goto yy18; - if (yych <= '9') goto yy54; - if (yych <= ':') goto yy78; + if (yych <= '9') goto yy49; + if (yych <= ':') goto yy71; goto yy18; -yy56: - yych = *++YYCURSOR; - if (yych <= '/') goto yy18; - if (yych >= ':') goto yy18; -yy57: +yy51: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; if (yych <= '/') goto yy18; - if (yych <= '9') goto yy57; - if (yych == ';') goto yy79; + if (yych <= '9') goto yy51; + if (yych == ';') goto yy72; goto yy18; -yy59: - yych = *++YYCURSOR; - if (yych <= '/') goto yy18; - if (yych >= ':') goto yy18; -yy60: +yy53: ++YYCURSOR; if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; if (yych <= '/') goto yy18; - if (yych <= '9') goto yy60; - if (yych <= ':') goto yy81; + if (yych <= '9') goto yy53; + if (yych <= ':') goto yy74; goto yy18; -yy62: +yy55: yych = *++YYCURSOR; - if (yych == '"') goto yy82; + if (yych == '"') goto yy75; goto yy18; -yy63: +yy56: ++YYCURSOR; -#line 611 "ext/standard/var_unserializer.re" +#line 652 "ext/standard/var_unserializer.re" { zend_long id; *p = YYCURSOR; if (!var_hash) return 0; - id = parse_iv(start + 2) - 1; + id = parse_uiv(start + 2) - 1; if (id == -1 || (rval_ref = var_access(var_hash, id)) == NULL) { return 0; } @@ -1009,44 +998,44 @@ yy63: return 1; } -#line 1013 "ext/standard/var_unserializer.c" -yy65: +#line 1002 "ext/standard/var_unserializer.c" +yy58: yych = *++YYCURSOR; - if (yych == '"') goto yy84; + if (yych == '"') goto yy77; goto yy18; -yy66: +yy59: yych = *++YYCURSOR; - if (yych == '{') goto yy86; + if (yych == '{') goto yy79; goto yy18; -yy67: +yy60: ++YYCURSOR; -#line 666 "ext/standard/var_unserializer.re" +#line 707 "ext/standard/var_unserializer.re" { *p = YYCURSOR; ZVAL_BOOL(rval, parse_iv(start + 2)); return 1; } -#line 1030 "ext/standard/var_unserializer.c" -yy69: +#line 1019 "ext/standard/var_unserializer.c" +yy62: ++YYCURSOR; - if ((YYLIMIT - YYCURSOR) < 4) YYFILL(4); + if ((YYLIMIT - YYCURSOR) < 3) YYFILL(3); yych = *YYCURSOR; if (yych <= ';') { if (yych <= '/') goto yy18; - if (yych <= '9') goto yy69; + if (yych <= '9') goto yy62; if (yych <= ':') goto yy18; } else { if (yych <= 'E') { if (yych <= 'D') goto yy18; - goto yy73; + goto yy66; } else { - if (yych == 'e') goto yy73; + if (yych == 'e') goto yy66; goto yy18; } } -yy71: +yy64: ++YYCURSOR; -#line 714 "ext/standard/var_unserializer.re" +#line 755 "ext/standard/var_unserializer.re" { #if SIZEOF_ZEND_LONG == 4 use_double: @@ -1055,29 +1044,29 @@ use_double: ZVAL_DOUBLE(rval, zend_strtod((const char *)start + 2, NULL)); return 1; } -#line 1059 "ext/standard/var_unserializer.c" -yy73: +#line 1048 "ext/standard/var_unserializer.c" +yy66: yych = *++YYCURSOR; if (yych <= ',') { - if (yych == '+') goto yy88; + if (yych == '+') goto yy81; goto yy18; } else { - if (yych <= '-') goto yy88; + if (yych <= '-') goto yy81; if (yych <= '/') goto yy18; - if (yych <= '9') goto yy89; + if (yych <= '9') goto yy82; goto yy18; } -yy74: +yy67: yych = *++YYCURSOR; - if (yych == 'F') goto yy91; + if (yych == 'F') goto yy84; goto yy18; -yy75: +yy68: yych = *++YYCURSOR; - if (yych == 'N') goto yy91; + if (yych == 'N') goto yy84; goto yy18; -yy76: +yy69: ++YYCURSOR; -#line 672 "ext/standard/var_unserializer.re" +#line 713 "ext/standard/var_unserializer.re" { #if SIZEOF_ZEND_LONG == 4 int digits = YYCURSOR - start - 3; @@ -1103,21 +1092,21 @@ yy76: ZVAL_LONG(rval, parse_iv(start + 2)); return 1; } -#line 1107 "ext/standard/var_unserializer.c" -yy78: +#line 1096 "ext/standard/var_unserializer.c" +yy71: yych = *++YYCURSOR; - if (yych == '"') goto yy92; + if (yych == '"') goto yy85; goto yy18; -yy79: +yy72: ++YYCURSOR; -#line 636 "ext/standard/var_unserializer.re" +#line 677 "ext/standard/var_unserializer.re" { zend_long id; *p = YYCURSOR; if (!var_hash) return 0; - id = parse_iv(start + 2) - 1; + id = parse_uiv(start + 2) - 1; if (id == -1 || (rval_ref = var_access(var_hash, id)) == NULL) { return 0; } @@ -1134,14 +1123,14 @@ yy79: return 1; } -#line 1138 "ext/standard/var_unserializer.c" -yy81: +#line 1127 "ext/standard/var_unserializer.c" +yy74: yych = *++YYCURSOR; - if (yych == '"') goto yy94; + if (yych == '"') goto yy87; goto yy18; -yy82: +yy75: ++YYCURSOR; -#line 824 "ext/standard/var_unserializer.re" +#line 877 "ext/standard/var_unserializer.re" { size_t len, len2, len3, maxlen; zend_long elements; @@ -1293,10 +1282,10 @@ yy82: return object_common2(UNSERIALIZE_PASSTHRU, elements); } -#line 1297 "ext/standard/var_unserializer.c" -yy84: +#line 1286 "ext/standard/var_unserializer.c" +yy77: ++YYCURSOR; -#line 755 "ext/standard/var_unserializer.re" +#line 802 "ext/standard/var_unserializer.re" { size_t len, maxlen; zend_string *str; @@ -1330,10 +1319,10 @@ yy84: ZVAL_STR(rval, str); return 1; } -#line 1334 "ext/standard/var_unserializer.c" -yy86: +#line 1323 "ext/standard/var_unserializer.c" +yy79: ++YYCURSOR; -#line 789 "ext/standard/var_unserializer.re" +#line 836 "ext/standard/var_unserializer.re" { zend_long elements = parse_iv(start + 2); /* use iv() not uiv() in order to check data range */ @@ -1351,38 +1340,38 @@ yy86: zend_hash_real_init(Z_ARRVAL_P(rval), 0); } + /* The array may contain references to itself, in which case we'll be modifying an + * rc>1 array. This is okay, since the array is, ostensibly, only visible to + * unserialize (in practice unserialization handlers also see it). Ideally we should + * prohibit "r:" references to non-objects, as we only generate them for objects. */ + HT_ALLOW_COW_VIOLATION(Z_ARRVAL_P(rval)); + if (!process_nested_data(UNSERIALIZE_PASSTHRU, Z_ARRVAL_P(rval), elements, 0)) { return 0; } return finish_nested_data(UNSERIALIZE_PASSTHRU); } -#line 1361 "ext/standard/var_unserializer.c" -yy88: +#line 1356 "ext/standard/var_unserializer.c" +yy81: yych = *++YYCURSOR; - if (yych <= ',') { - if (yych == '+') goto yy96; - goto yy18; - } else { - if (yych <= '-') goto yy96; - if (yych <= '/') goto yy18; - if (yych >= ':') goto yy18; - } -yy89: + if (yych <= '/') goto yy18; + if (yych >= ':') goto yy18; +yy82: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; if (yych <= '/') goto yy18; - if (yych <= '9') goto yy89; - if (yych == ';') goto yy71; + if (yych <= '9') goto yy82; + if (yych == ';') goto yy64; goto yy18; -yy91: +yy84: yych = *++YYCURSOR; - if (yych == ';') goto yy97; + if (yych == ';') goto yy89; goto yy18; -yy92: +yy85: ++YYCURSOR; -#line 813 "ext/standard/var_unserializer.re" +#line 866 "ext/standard/var_unserializer.re" { zend_long elements; if (!var_hash) return 0; @@ -1393,10 +1382,10 @@ yy92: } return object_common2(UNSERIALIZE_PASSTHRU, elements); } -#line 1397 "ext/standard/var_unserializer.c" -yy94: +#line 1386 "ext/standard/var_unserializer.c" +yy87: ++YYCURSOR; -#line 723 "ext/standard/var_unserializer.re" +#line 764 "ext/standard/var_unserializer.re" { size_t len, maxlen; char *str; @@ -1425,36 +1414,37 @@ yy94: YYCURSOR += 2; *p = YYCURSOR; - ZVAL_STRINGL(rval, str, len); + if (len == 0) { + ZVAL_EMPTY_STRING(rval); + } else if (len == 1) { + ZVAL_INTERNED_STR(rval, ZSTR_CHAR((zend_uchar)*str)); + } else { + ZVAL_STRINGL(rval, str, len); + } return 1; } -#line 1432 "ext/standard/var_unserializer.c" -yy96: - yych = *++YYCURSOR; - if (yych <= '/') goto yy18; - if (yych <= '9') goto yy89; - goto yy18; -yy97: +#line 1427 "ext/standard/var_unserializer.c" +yy89: ++YYCURSOR; -#line 698 "ext/standard/var_unserializer.re" +#line 739 "ext/standard/var_unserializer.re" { *p = YYCURSOR; if (!strncmp((char*)start + 2, "NAN", 3)) { - ZVAL_DOUBLE(rval, php_get_nan()); + ZVAL_DOUBLE(rval, ZEND_NAN); } else if (!strncmp((char*)start + 2, "INF", 3)) { - ZVAL_DOUBLE(rval, php_get_inf()); + ZVAL_DOUBLE(rval, ZEND_INFINITY); } else if (!strncmp((char*)start + 2, "-INF", 4)) { - ZVAL_DOUBLE(rval, -php_get_inf()); + ZVAL_DOUBLE(rval, -ZEND_INFINITY); } else { ZVAL_NULL(rval); } return 1; } -#line 1456 "ext/standard/var_unserializer.c" +#line 1446 "ext/standard/var_unserializer.c" } -#line 984 "ext/standard/var_unserializer.re" +#line 1037 "ext/standard/var_unserializer.re" return 0; |
