@@ -61,7 +61,13 @@ static inline void var_push(php_unserialize_data_t *var_hashx, zval **rval)
61
61
62
62
PHPAPI void var_push_dtor (php_unserialize_data_t * var_hashx , zval * * rval )
63
63
{
64
- var_entries * var_hash = (* var_hashx )-> last_dtor ;
64
+ var_entries * var_hash ;
65
+
66
+ if (!var_hashx || !* var_hashx ) {
67
+ return ;
68
+ }
69
+
70
+ var_hash = (* var_hashx )-> last_dtor ;
65
71
#if VAR_ENTRIES_DBG
66
72
fprintf (stderr , "var_push_dtor(%ld): %d\n" , var_hash ?var_hash -> used_slots :-1L , Z_TYPE_PP (rval ));
67
73
#endif
@@ -227,7 +233,7 @@ static char *unserialize_str(const unsigned char **p, size_t *len, size_t maxlen
227
233
#define YYMARKER marker
228
234
229
235
230
- #line 235 "ext/standard/var_unserializer.re"
236
+ #line 241 "ext/standard/var_unserializer.re"
231
237
232
238
233
239
@@ -474,7 +480,7 @@ PHPAPI int php_var_unserialize(UNSERIALIZE_PARAMETER)
474
480
475
481
476
482
477
- #line 478 "ext/standard/var_unserializer.c"
483
+ #line 484 "ext/standard/var_unserializer.c"
478
484
{
479
485
YYCTYPE yych ;
480
486
static const unsigned char yybm [] = {
@@ -534,9 +540,9 @@ PHPAPI int php_var_unserialize(UNSERIALIZE_PARAMETER)
534
540
yych = * (YYMARKER = ++ YYCURSOR );
535
541
if (yych == ':' ) goto yy95 ;
536
542
yy3 :
537
- #line 829 "ext/standard/var_unserializer.re"
543
+ #line 835 "ext/standard/var_unserializer.re"
538
544
{ return 0 ; }
539
- #line 540 "ext/standard/var_unserializer.c"
545
+ #line 546 "ext/standard/var_unserializer.c"
540
546
yy4 :
541
547
yych = * (YYMARKER = ++ YYCURSOR );
542
548
if (yych == ':' ) goto yy89 ;
@@ -579,13 +585,13 @@ PHPAPI int php_var_unserialize(UNSERIALIZE_PARAMETER)
579
585
goto yy3 ;
580
586
yy14 :
581
587
++ YYCURSOR ;
582
- #line 823 "ext/standard/var_unserializer.re"
588
+ #line 829 "ext/standard/var_unserializer.re"
583
589
{
584
590
/* this is the case where we have less data than planned */
585
591
php_error_docref (NULL TSRMLS_CC , E_NOTICE , "Unexpected end of serialized data" );
586
592
return 0 ; /* not sure if it should be 0 or 1 here? */
587
593
}
588
- #line 589 "ext/standard/var_unserializer.c"
594
+ #line 595 "ext/standard/var_unserializer.c"
589
595
yy16 :
590
596
yych = * ++ YYCURSOR ;
591
597
goto yy3 ;
@@ -615,7 +621,7 @@ PHPAPI int php_var_unserialize(UNSERIALIZE_PARAMETER)
615
621
yych = * ++ YYCURSOR ;
616
622
if (yych != '"' ) goto yy18 ;
617
623
++ YYCURSOR ;
618
- #line 677 "ext/standard/var_unserializer.re"
624
+ #line 683 "ext/standard/var_unserializer.re"
619
625
{
620
626
size_t len , len2 , len3 , maxlen ;
621
627
long elements ;
@@ -761,7 +767,7 @@ PHPAPI int php_var_unserialize(UNSERIALIZE_PARAMETER)
761
767
762
768
return object_common2 (UNSERIALIZE_PASSTHRU , elements );
763
769
}
764
- #line 765 "ext/standard/var_unserializer.c"
770
+ #line 771 "ext/standard/var_unserializer.c"
765
771
yy25 :
766
772
yych = * ++ YYCURSOR ;
767
773
if (yych <= ',' ) {
@@ -786,15 +792,15 @@ PHPAPI int php_var_unserialize(UNSERIALIZE_PARAMETER)
786
792
yych = * ++ YYCURSOR ;
787
793
if (yych != '"' ) goto yy18 ;
788
794
++ YYCURSOR ;
789
- #line 669 "ext/standard/var_unserializer.re"
795
+ #line 675 "ext/standard/var_unserializer.re"
790
796
{
791
797
792
798
INIT_PZVAL (* rval );
793
799
794
800
return object_common2 (UNSERIALIZE_PASSTHRU ,
795
801
object_common1 (UNSERIALIZE_PASSTHRU , ZEND_STANDARD_CLASS_DEF_PTR ));
796
802
}
797
- #line 798 "ext/standard/var_unserializer.c"
803
+ #line 804 "ext/standard/var_unserializer.c"
798
804
yy32 :
799
805
yych = * ++ YYCURSOR ;
800
806
if (yych == '+' ) goto yy33 ;
@@ -815,7 +821,7 @@ PHPAPI int php_var_unserialize(UNSERIALIZE_PARAMETER)
815
821
yych = * ++ YYCURSOR ;
816
822
if (yych != '{' ) goto yy18 ;
817
823
++ YYCURSOR ;
818
- #line 649 "ext/standard/var_unserializer.re"
824
+ #line 655 "ext/standard/var_unserializer.re"
819
825
{
820
826
long elements = parse_iv (start + 2 );
821
827
/* use iv() not uiv() in order to check data range */
@@ -835,7 +841,7 @@ PHPAPI int php_var_unserialize(UNSERIALIZE_PARAMETER)
835
841
836
842
return finish_nested_data (UNSERIALIZE_PASSTHRU );
837
843
}
838
- #line 839 "ext/standard/var_unserializer.c"
844
+ #line 845 "ext/standard/var_unserializer.c"
839
845
yy39 :
840
846
yych = * ++ YYCURSOR ;
841
847
if (yych == '+' ) goto yy40 ;
@@ -856,7 +862,7 @@ PHPAPI int php_var_unserialize(UNSERIALIZE_PARAMETER)
856
862
yych = * ++ YYCURSOR ;
857
863
if (yych != '"' ) goto yy18 ;
858
864
++ YYCURSOR ;
859
- #line 620 "ext/standard/var_unserializer.re"
865
+ #line 626 "ext/standard/var_unserializer.re"
860
866
{
861
867
size_t len , maxlen ;
862
868
char * str ;
@@ -885,7 +891,7 @@ PHPAPI int php_var_unserialize(UNSERIALIZE_PARAMETER)
885
891
ZVAL_STRINGL (* rval , str , len , 0 );
886
892
return 1 ;
887
893
}
888
- #line 889 "ext/standard/var_unserializer.c"
894
+ #line 895 "ext/standard/var_unserializer.c"
889
895
yy46 :
890
896
yych = * ++ YYCURSOR ;
891
897
if (yych == '+' ) goto yy47 ;
@@ -906,7 +912,7 @@ PHPAPI int php_var_unserialize(UNSERIALIZE_PARAMETER)
906
912
yych = * ++ YYCURSOR ;
907
913
if (yych != '"' ) goto yy18 ;
908
914
++ YYCURSOR ;
909
- #line 592 "ext/standard/var_unserializer.re"
915
+ #line 598 "ext/standard/var_unserializer.re"
910
916
{
911
917
size_t len , maxlen ;
912
918
char * str ;
@@ -934,7 +940,7 @@ PHPAPI int php_var_unserialize(UNSERIALIZE_PARAMETER)
934
940
ZVAL_STRINGL (* rval , str , len , 1 );
935
941
return 1 ;
936
942
}
937
- #line 938 "ext/standard/var_unserializer.c"
943
+ #line 944 "ext/standard/var_unserializer.c"
938
944
yy53 :
939
945
yych = * ++ YYCURSOR ;
940
946
if (yych <= '/' ) {
@@ -1022,7 +1028,7 @@ PHPAPI int php_var_unserialize(UNSERIALIZE_PARAMETER)
1022
1028
}
1023
1029
yy63 :
1024
1030
++ YYCURSOR ;
1025
- #line 582 "ext/standard/var_unserializer.re"
1031
+ #line 588 "ext/standard/var_unserializer.re"
1026
1032
{
1027
1033
#if SIZEOF_LONG == 4
1028
1034
use_double :
@@ -1032,7 +1038,7 @@ PHPAPI int php_var_unserialize(UNSERIALIZE_PARAMETER)
1032
1038
ZVAL_DOUBLE (* rval , zend_strtod ((const char * )start + 2 , NULL ));
1033
1039
return 1 ;
1034
1040
}
1035
- #line 1036 "ext/standard/var_unserializer.c"
1041
+ #line 1042 "ext/standard/var_unserializer.c"
1036
1042
yy65 :
1037
1043
yych = * ++ YYCURSOR ;
1038
1044
if (yych <= ',' ) {
@@ -1091,7 +1097,7 @@ PHPAPI int php_var_unserialize(UNSERIALIZE_PARAMETER)
1091
1097
yych = * ++ YYCURSOR ;
1092
1098
if (yych != ';' ) goto yy18 ;
1093
1099
++ YYCURSOR ;
1094
- #line 567 "ext/standard/var_unserializer.re"
1100
+ #line 573 "ext/standard/var_unserializer.re"
1095
1101
{
1096
1102
* p = YYCURSOR ;
1097
1103
INIT_PZVAL (* rval );
@@ -1106,7 +1112,7 @@ PHPAPI int php_var_unserialize(UNSERIALIZE_PARAMETER)
1106
1112
1107
1113
return 1 ;
1108
1114
}
1109
- #line 1110 "ext/standard/var_unserializer.c"
1115
+ #line 1116 "ext/standard/var_unserializer.c"
1110
1116
yy76 :
1111
1117
yych = * ++ YYCURSOR ;
1112
1118
if (yych == 'N' ) goto yy73 ;
@@ -1133,7 +1139,7 @@ PHPAPI int php_var_unserialize(UNSERIALIZE_PARAMETER)
1133
1139
if (yych <= '9' ) goto yy79 ;
1134
1140
if (yych != ';' ) goto yy18 ;
1135
1141
++ YYCURSOR ;
1136
- #line 540 "ext/standard/var_unserializer.re"
1142
+ #line 546 "ext/standard/var_unserializer.re"
1137
1143
{
1138
1144
#if SIZEOF_LONG == 4
1139
1145
int digits = YYCURSOR - start - 3 ;
@@ -1160,32 +1166,32 @@ PHPAPI int php_var_unserialize(UNSERIALIZE_PARAMETER)
1160
1166
ZVAL_LONG (* rval , parse_iv (start + 2 ));
1161
1167
return 1 ;
1162
1168
}
1163
- #line 1164 "ext/standard/var_unserializer.c"
1169
+ #line 1170 "ext/standard/var_unserializer.c"
1164
1170
yy83 :
1165
1171
yych = * ++ YYCURSOR ;
1166
1172
if (yych <= '/' ) goto yy18 ;
1167
1173
if (yych >= '2' ) goto yy18 ;
1168
1174
yych = * ++ YYCURSOR ;
1169
1175
if (yych != ';' ) goto yy18 ;
1170
1176
++ YYCURSOR ;
1171
- #line 533 "ext/standard/var_unserializer.re"
1177
+ #line 539 "ext/standard/var_unserializer.re"
1172
1178
{
1173
1179
* p = YYCURSOR ;
1174
1180
INIT_PZVAL (* rval );
1175
1181
ZVAL_BOOL (* rval , parse_iv (start + 2 ));
1176
1182
return 1 ;
1177
1183
}
1178
- #line 1179 "ext/standard/var_unserializer.c"
1184
+ #line 1185 "ext/standard/var_unserializer.c"
1179
1185
yy87 :
1180
1186
++ YYCURSOR ;
1181
- #line 526 "ext/standard/var_unserializer.re"
1187
+ #line 532 "ext/standard/var_unserializer.re"
1182
1188
{
1183
1189
* p = YYCURSOR ;
1184
1190
INIT_PZVAL (* rval );
1185
1191
ZVAL_NULL (* rval );
1186
1192
return 1 ;
1187
1193
}
1188
- #line 1189 "ext/standard/var_unserializer.c"
1194
+ #line 1195 "ext/standard/var_unserializer.c"
1189
1195
yy89 :
1190
1196
yych = * ++ YYCURSOR ;
1191
1197
if (yych <= ',' ) {
@@ -1208,7 +1214,7 @@ PHPAPI int php_var_unserialize(UNSERIALIZE_PARAMETER)
1208
1214
if (yych <= '9' ) goto yy91 ;
1209
1215
if (yych != ';' ) goto yy18 ;
1210
1216
++ YYCURSOR ;
1211
- #line 503 "ext/standard/var_unserializer.re"
1217
+ #line 509 "ext/standard/var_unserializer.re"
1212
1218
{
1213
1219
long id ;
1214
1220
@@ -1231,7 +1237,7 @@ PHPAPI int php_var_unserialize(UNSERIALIZE_PARAMETER)
1231
1237
1232
1238
return 1 ;
1233
1239
}
1234
- #line 1235 "ext/standard/var_unserializer.c"
1240
+ #line 1241 "ext/standard/var_unserializer.c"
1235
1241
yy95 :
1236
1242
yych = * ++ YYCURSOR ;
1237
1243
if (yych <= ',' ) {
@@ -1254,7 +1260,7 @@ PHPAPI int php_var_unserialize(UNSERIALIZE_PARAMETER)
1254
1260
if (yych <= '9' ) goto yy97 ;
1255
1261
if (yych != ';' ) goto yy18 ;
1256
1262
++ YYCURSOR ;
1257
- #line 482 "ext/standard/var_unserializer.re"
1263
+ #line 488 "ext/standard/var_unserializer.re"
1258
1264
{
1259
1265
long id ;
1260
1266
@@ -1275,9 +1281,9 @@ PHPAPI int php_var_unserialize(UNSERIALIZE_PARAMETER)
1275
1281
1276
1282
return 1 ;
1277
1283
}
1278
- #line 1279 "ext/standard/var_unserializer.c"
1284
+ #line 1285 "ext/standard/var_unserializer.c"
1279
1285
}
1280
- #line 831 "ext/standard/var_unserializer.re"
1286
+ #line 837 "ext/standard/var_unserializer.re"
1281
1287
1282
1288
1283
1289
return 0 ;
0 commit comments