Skip to content

Commit 8b0deb8

Browse files
committed
fix unserializer patch
1 parent 5ab1dda commit 8b0deb8

File tree

2 files changed

+32
-36
lines changed

2 files changed

+32
-36
lines changed

ext/standard/var_unserializer.c

Lines changed: 31 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -366,11 +366,9 @@ static inline int process_nested_data(UNSERIALIZE_PARAMETER, HashTable *ht, zend
366366
if (Z_TYPE_P(old_data) == IS_INDIRECT) {
367367
old_data = Z_INDIRECT_P(old_data);
368368
}
369-
zval_ptr_dtor(old_data);
370369
var_push_dtor(var_hash, old_data);
371-
ZVAL_UNDEF(old_data);
372370
}
373-
data = zend_hash_update(ht, Z_STR(key), &d);
371+
data = zend_hash_update_ind(ht, Z_STR(key), &d);
374372
}
375373

376374
zval_dtor(&key);
@@ -509,7 +507,7 @@ PHPAPI int php_var_unserialize_ex(UNSERIALIZE_PARAMETER)
509507
start = cursor;
510508

511509

512-
#line 513 "ext/standard/var_unserializer.c"
510+
#line 511 "ext/standard/var_unserializer.c"
513511
{
514512
YYCTYPE yych;
515513
static const unsigned char yybm[] = {
@@ -569,9 +567,9 @@ PHPAPI int php_var_unserialize_ex(UNSERIALIZE_PARAMETER)
569567
yych = *(YYMARKER = ++YYCURSOR);
570568
if (yych == ':') goto yy95;
571569
yy3:
572-
#line 860 "ext/standard/var_unserializer.re"
570+
#line 858 "ext/standard/var_unserializer.re"
573571
{ return 0; }
574-
#line 575 "ext/standard/var_unserializer.c"
572+
#line 573 "ext/standard/var_unserializer.c"
575573
yy4:
576574
yych = *(YYMARKER = ++YYCURSOR);
577575
if (yych == ':') goto yy89;
@@ -614,13 +612,13 @@ PHPAPI int php_var_unserialize_ex(UNSERIALIZE_PARAMETER)
614612
goto yy3;
615613
yy14:
616614
++YYCURSOR;
617-
#line 854 "ext/standard/var_unserializer.re"
615+
#line 852 "ext/standard/var_unserializer.re"
618616
{
619617
/* this is the case where we have less data than planned */
620618
php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Unexpected end of serialized data");
621619
return 0; /* not sure if it should be 0 or 1 here? */
622620
}
623-
#line 624 "ext/standard/var_unserializer.c"
621+
#line 622 "ext/standard/var_unserializer.c"
624622
yy16:
625623
yych = *++YYCURSOR;
626624
goto yy3;
@@ -651,7 +649,7 @@ PHPAPI int php_var_unserialize_ex(UNSERIALIZE_PARAMETER)
651649
yych = *++YYCURSOR;
652650
if (yych != '"') goto yy18;
653651
++YYCURSOR;
654-
#line 709 "ext/standard/var_unserializer.re"
652+
#line 707 "ext/standard/var_unserializer.re"
655653
{
656654
size_t len, len2, len3, maxlen;
657655
zend_long elements;
@@ -796,7 +794,7 @@ PHPAPI int php_var_unserialize_ex(UNSERIALIZE_PARAMETER)
796794

797795
return object_common2(UNSERIALIZE_PASSTHRU, elements);
798796
}
799-
#line 800 "ext/standard/var_unserializer.c"
797+
#line 798 "ext/standard/var_unserializer.c"
800798
yy25:
801799
yych = *++YYCURSOR;
802800
if (yych <= ',') {
@@ -821,15 +819,15 @@ PHPAPI int php_var_unserialize_ex(UNSERIALIZE_PARAMETER)
821819
yych = *++YYCURSOR;
822820
if (yych != '"') goto yy18;
823821
++YYCURSOR;
824-
#line 701 "ext/standard/var_unserializer.re"
822+
#line 699 "ext/standard/var_unserializer.re"
825823
{
826824

827825
//??? INIT_PZVAL(rval);
828826

829827
return object_common2(UNSERIALIZE_PASSTHRU,
830828
object_common1(UNSERIALIZE_PASSTHRU, ZEND_STANDARD_CLASS_DEF_PTR));
831829
}
832-
#line 833 "ext/standard/var_unserializer.c"
830+
#line 831 "ext/standard/var_unserializer.c"
833831
yy32:
834832
yych = *++YYCURSOR;
835833
if (yych == '+') goto yy33;
@@ -850,7 +848,7 @@ PHPAPI int php_var_unserialize_ex(UNSERIALIZE_PARAMETER)
850848
yych = *++YYCURSOR;
851849
if (yych != '{') goto yy18;
852850
++YYCURSOR;
853-
#line 680 "ext/standard/var_unserializer.re"
851+
#line 678 "ext/standard/var_unserializer.re"
854852
{
855853
zend_long elements = parse_iv(start + 2);
856854
/* use iv() not uiv() in order to check data range */
@@ -871,7 +869,7 @@ PHPAPI int php_var_unserialize_ex(UNSERIALIZE_PARAMETER)
871869

872870
return finish_nested_data(UNSERIALIZE_PASSTHRU);
873871
}
874-
#line 875 "ext/standard/var_unserializer.c"
872+
#line 873 "ext/standard/var_unserializer.c"
875873
yy39:
876874
yych = *++YYCURSOR;
877875
if (yych == '+') goto yy40;
@@ -892,7 +890,7 @@ PHPAPI int php_var_unserialize_ex(UNSERIALIZE_PARAMETER)
892890
yych = *++YYCURSOR;
893891
if (yych != '"') goto yy18;
894892
++YYCURSOR;
895-
#line 652 "ext/standard/var_unserializer.re"
893+
#line 650 "ext/standard/var_unserializer.re"
896894
{
897895
size_t len, maxlen;
898896
zend_string *str;
@@ -920,7 +918,7 @@ PHPAPI int php_var_unserialize_ex(UNSERIALIZE_PARAMETER)
920918
ZVAL_STR(rval, str);
921919
return 1;
922920
}
923-
#line 924 "ext/standard/var_unserializer.c"
921+
#line 922 "ext/standard/var_unserializer.c"
924922
yy46:
925923
yych = *++YYCURSOR;
926924
if (yych == '+') goto yy47;
@@ -941,7 +939,7 @@ PHPAPI int php_var_unserialize_ex(UNSERIALIZE_PARAMETER)
941939
yych = *++YYCURSOR;
942940
if (yych != '"') goto yy18;
943941
++YYCURSOR;
944-
#line 625 "ext/standard/var_unserializer.re"
942+
#line 623 "ext/standard/var_unserializer.re"
945943
{
946944
size_t len, maxlen;
947945
char *str;
@@ -968,7 +966,7 @@ PHPAPI int php_var_unserialize_ex(UNSERIALIZE_PARAMETER)
968966
ZVAL_STRINGL(rval, str, len);
969967
return 1;
970968
}
971-
#line 972 "ext/standard/var_unserializer.c"
969+
#line 970 "ext/standard/var_unserializer.c"
972970
yy53:
973971
yych = *++YYCURSOR;
974972
if (yych <= '/') {
@@ -1056,7 +1054,7 @@ PHPAPI int php_var_unserialize_ex(UNSERIALIZE_PARAMETER)
10561054
}
10571055
yy63:
10581056
++YYCURSOR;
1059-
#line 616 "ext/standard/var_unserializer.re"
1057+
#line 614 "ext/standard/var_unserializer.re"
10601058
{
10611059
#if SIZEOF_ZEND_LONG == 4
10621060
use_double:
@@ -1065,7 +1063,7 @@ PHPAPI int php_var_unserialize_ex(UNSERIALIZE_PARAMETER)
10651063
ZVAL_DOUBLE(rval, zend_strtod((const char *)start + 2, NULL));
10661064
return 1;
10671065
}
1068-
#line 1069 "ext/standard/var_unserializer.c"
1066+
#line 1067 "ext/standard/var_unserializer.c"
10691067
yy65:
10701068
yych = *++YYCURSOR;
10711069
if (yych <= ',') {
@@ -1124,7 +1122,7 @@ PHPAPI int php_var_unserialize_ex(UNSERIALIZE_PARAMETER)
11241122
yych = *++YYCURSOR;
11251123
if (yych != ';') goto yy18;
11261124
++YYCURSOR;
1127-
#line 600 "ext/standard/var_unserializer.re"
1125+
#line 598 "ext/standard/var_unserializer.re"
11281126
{
11291127
*p = YYCURSOR;
11301128

@@ -1140,7 +1138,7 @@ PHPAPI int php_var_unserialize_ex(UNSERIALIZE_PARAMETER)
11401138

11411139
return 1;
11421140
}
1143-
#line 1144 "ext/standard/var_unserializer.c"
1141+
#line 1142 "ext/standard/var_unserializer.c"
11441142
yy76:
11451143
yych = *++YYCURSOR;
11461144
if (yych == 'N') goto yy73;
@@ -1167,7 +1165,7 @@ PHPAPI int php_var_unserialize_ex(UNSERIALIZE_PARAMETER)
11671165
if (yych <= '9') goto yy79;
11681166
if (yych != ';') goto yy18;
11691167
++YYCURSOR;
1170-
#line 574 "ext/standard/var_unserializer.re"
1168+
#line 572 "ext/standard/var_unserializer.re"
11711169
{
11721170
#if SIZEOF_ZEND_LONG == 4
11731171
int digits = YYCURSOR - start - 3;
@@ -1193,30 +1191,30 @@ PHPAPI int php_var_unserialize_ex(UNSERIALIZE_PARAMETER)
11931191
ZVAL_LONG(rval, parse_iv(start + 2));
11941192
return 1;
11951193
}
1196-
#line 1197 "ext/standard/var_unserializer.c"
1194+
#line 1195 "ext/standard/var_unserializer.c"
11971195
yy83:
11981196
yych = *++YYCURSOR;
11991197
if (yych <= '/') goto yy18;
12001198
if (yych >= '2') goto yy18;
12011199
yych = *++YYCURSOR;
12021200
if (yych != ';') goto yy18;
12031201
++YYCURSOR;
1204-
#line 568 "ext/standard/var_unserializer.re"
1202+
#line 566 "ext/standard/var_unserializer.re"
12051203
{
12061204
*p = YYCURSOR;
12071205
ZVAL_BOOL(rval, parse_iv(start + 2));
12081206
return 1;
12091207
}
1210-
#line 1211 "ext/standard/var_unserializer.c"
1208+
#line 1209 "ext/standard/var_unserializer.c"
12111209
yy87:
12121210
++YYCURSOR;
1213-
#line 562 "ext/standard/var_unserializer.re"
1211+
#line 560 "ext/standard/var_unserializer.re"
12141212
{
12151213
*p = YYCURSOR;
12161214
ZVAL_NULL(rval);
12171215
return 1;
12181216
}
1219-
#line 1220 "ext/standard/var_unserializer.c"
1217+
#line 1218 "ext/standard/var_unserializer.c"
12201218
yy89:
12211219
yych = *++YYCURSOR;
12221220
if (yych <= ',') {
@@ -1239,7 +1237,7 @@ PHPAPI int php_var_unserialize_ex(UNSERIALIZE_PARAMETER)
12391237
if (yych <= '9') goto yy91;
12401238
if (yych != ';') goto yy18;
12411239
++YYCURSOR;
1242-
#line 539 "ext/standard/var_unserializer.re"
1240+
#line 537 "ext/standard/var_unserializer.re"
12431241
{
12441242
zend_long id;
12451243

@@ -1262,7 +1260,7 @@ PHPAPI int php_var_unserialize_ex(UNSERIALIZE_PARAMETER)
12621260

12631261
return 1;
12641262
}
1265-
#line 1266 "ext/standard/var_unserializer.c"
1263+
#line 1264 "ext/standard/var_unserializer.c"
12661264
yy95:
12671265
yych = *++YYCURSOR;
12681266
if (yych <= ',') {
@@ -1285,7 +1283,7 @@ PHPAPI int php_var_unserialize_ex(UNSERIALIZE_PARAMETER)
12851283
if (yych <= '9') goto yy97;
12861284
if (yych != ';') goto yy18;
12871285
++YYCURSOR;
1288-
#line 517 "ext/standard/var_unserializer.re"
1286+
#line 515 "ext/standard/var_unserializer.re"
12891287
{
12901288
zend_long id;
12911289

@@ -1307,9 +1305,9 @@ PHPAPI int php_var_unserialize_ex(UNSERIALIZE_PARAMETER)
13071305

13081306
return 1;
13091307
}
1310-
#line 1311 "ext/standard/var_unserializer.c"
1308+
#line 1309 "ext/standard/var_unserializer.c"
13111309
}
1312-
#line 862 "ext/standard/var_unserializer.re"
1310+
#line 860 "ext/standard/var_unserializer.re"
13131311

13141312

13151313
return 0;

ext/standard/var_unserializer.re

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -370,11 +370,9 @@ static inline int process_nested_data(UNSERIALIZE_PARAMETER, HashTable *ht, zend
370370
if (Z_TYPE_P(old_data) == IS_INDIRECT) {
371371
old_data = Z_INDIRECT_P(old_data);
372372
}
373-
zval_ptr_dtor(old_data);
374373
var_push_dtor(var_hash, old_data);
375-
ZVAL_UNDEF(old_data);
376374
}
377-
data = zend_hash_update(ht, Z_STR(key), &d);
375+
data = zend_hash_update_ind(ht, Z_STR(key), &d);
378376
}
379377

380378
zval_dtor(&key);

0 commit comments

Comments
 (0)