com php-src: Make sure lengths and refs are unsigned in unserialize(): ext/standard/var_unserializer.c ext/standard/var_unseri alizer.re

[email protected] (Nikita Popov)
Newsgroups php.cvs
Message-ID <[email protected]>
Commit:    8522e2894edd52322148945261433e79a3ec3f88
Author:    Nikita Popov <[email protected]>         Thu, 23 Mar 2017 22:30:59 +0100
Parents:   6a1d4cd47a6ff20ae1619e0f8ec6de1eaa869258
Branches:  master

Link:       http://git.php.net/?p=php-src.git;a=commitdiff;h=8522e2894edd52322148945261433e79a3ec3f88

Log:
Make sure lengths and refs are unsigned in unserialize()

Changed paths:
  M  ext/standard/var_unserializer.c
  M  ext/standard/var_unserializer.re
diff_8522e2894edd52322148945261433e79a3ec3f88.txt (text/plain, 15.7 KB)
diff --git a/ext/standard/var_unserializer.c b/ext/standard/var_unserializer.c
index c175727..a1f505c 100644
--- a/ext/standard/var_unserializer.c
+++ b/ext/standard/var_unserializer.c
@@ -361,10 +361,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') {
@@ -618,7 +614,7 @@ static int php_var_unserialize_internal(UNSERIALIZE_PARAMETER)
 	start = cursor;
 
 
-#line 622 "ext/standard/var_unserializer.c"
+#line 618 "ext/standard/var_unserializer.c"
 {
 	YYCTYPE yych;
 	static const unsigned char yybm[] = {
@@ -676,9 +672,9 @@ static int php_var_unserialize_internal(UNSERIALIZE_PARAMETER)
 yy2:
 	++YYCURSOR;
 yy3:
-#line 1005 "ext/standard/var_unserializer.re"
+#line 1001 "ext/standard/var_unserializer.re"
 	{ return 0; }
-#line 682 "ext/standard/var_unserializer.c"
+#line 678 "ext/standard/var_unserializer.c"
 yy4:
 	yych = *(YYMARKER = ++YYCURSOR);
 	if (yych == ':') goto yy17;
@@ -725,288 +721,236 @@ yy14:
 	goto yy3;
 yy15:
 	++YYCURSOR;
-#line 999 "ext/standard/var_unserializer.re"
+#line 995 "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 735 "ext/standard/var_unserializer.c"
+#line 731 "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 677 "ext/standard/var_unserializer.re"
+#line 673 "ext/standard/var_unserializer.re"
 	{
 	*p = YYCURSOR;
 	ZVAL_NULL(rval);
 	return 1;
 }
-#line 753 "ext/standard/var_unserializer.c"
+#line 748 "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) < 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 626 "ext/standard/var_unserializer.re"
+#line 622 "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;
 	}
@@ -1025,44 +969,44 @@ yy63:
 
 	return 1;
 }
-#line 1029 "ext/standard/var_unserializer.c"
-yy65:
+#line 973 "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 683 "ext/standard/var_unserializer.re"
+#line 679 "ext/standard/var_unserializer.re"
 	{
 	*p = YYCURSOR;
 	ZVAL_BOOL(rval, parse_iv(start + 2));
 	return 1;
 }
-#line 1046 "ext/standard/var_unserializer.c"
-yy69:
+#line 990 "ext/standard/var_unserializer.c"
+yy62:
 	++YYCURSOR;
 	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 731 "ext/standard/var_unserializer.re"
+#line 727 "ext/standard/var_unserializer.re"
 	{
 #if SIZEOF_ZEND_LONG == 4
 use_double:
@@ -1071,29 +1015,29 @@ use_double:
 	ZVAL_DOUBLE(rval, zend_strtod((const char *)start + 2, NULL));
 	return 1;
 }
-#line 1075 "ext/standard/var_unserializer.c"
-yy73:
+#line 1019 "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 689 "ext/standard/var_unserializer.re"
+#line 685 "ext/standard/var_unserializer.re"
 	{
 #if SIZEOF_ZEND_LONG == 4
 	int digits = YYCURSOR - start - 3;
@@ -1119,21 +1063,21 @@ yy76:
 	ZVAL_LONG(rval, parse_iv(start + 2));
 	return 1;
 }
-#line 1123 "ext/standard/var_unserializer.c"
-yy78:
+#line 1067 "ext/standard/var_unserializer.c"
+yy71:
 	yych = *++YYCURSOR;
-	if (yych == '"') goto yy92;
+	if (yych == '"') goto yy85;
 	goto yy18;
-yy79:
+yy72:
 	++YYCURSOR;
-#line 652 "ext/standard/var_unserializer.re"
+#line 648 "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;
 	}
@@ -1151,14 +1095,14 @@ yy79:
 
 	return 1;
 }
-#line 1155 "ext/standard/var_unserializer.c"
-yy81:
+#line 1099 "ext/standard/var_unserializer.c"
+yy74:
 	yych = *++YYCURSOR;
-	if (yych == '"') goto yy94;
+	if (yych == '"') goto yy87;
 	goto yy18;
-yy82:
+yy75:
 	++YYCURSOR;
-#line 847 "ext/standard/var_unserializer.re"
+#line 843 "ext/standard/var_unserializer.re"
 	{
 	size_t len, len2, len3, maxlen;
 	zend_long elements;
@@ -1310,10 +1254,10 @@ yy82:
 
 	return object_common2(UNSERIALIZE_PASSTHRU, elements);
 }
-#line 1314 "ext/standard/var_unserializer.c"
-yy84:
+#line 1258 "ext/standard/var_unserializer.c"
+yy77:
 	++YYCURSOR;
-#line 772 "ext/standard/var_unserializer.re"
+#line 768 "ext/standard/var_unserializer.re"
 	{
 	size_t len, maxlen;
 	zend_string *str;
@@ -1347,10 +1291,10 @@ yy84:
 	ZVAL_STR(rval, str);
 	return 1;
 }
-#line 1351 "ext/standard/var_unserializer.c"
-yy86:
+#line 1295 "ext/standard/var_unserializer.c"
+yy79:
 	++YYCURSOR;
-#line 806 "ext/standard/var_unserializer.re"
+#line 802 "ext/standard/var_unserializer.re"
 	{
 	zend_long elements = parse_iv(start + 2);
 	/* use iv() not uiv() in order to check data range */
@@ -1380,26 +1324,26 @@ yy86:
 
 	return finish_nested_data(UNSERIALIZE_PASSTHRU);
 }
-#line 1384 "ext/standard/var_unserializer.c"
-yy88:
+#line 1328 "ext/standard/var_unserializer.c"
+yy81:
 	yych = *++YYCURSOR;
 	if (yych <= '/') goto yy18;
 	if (yych >= ':') goto yy18;
-yy89:
+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 yy96;
+	if (yych == ';') goto yy89;
 	goto yy18;
-yy92:
+yy85:
 	++YYCURSOR;
-#line 836 "ext/standard/var_unserializer.re"
+#line 832 "ext/standard/var_unserializer.re"
 	{
 	long elements;
     if (!var_hash) return 0;
@@ -1410,10 +1354,10 @@ yy92:
 	}
 	return object_common2(UNSERIALIZE_PASSTHRU, elements);
 }
-#line 1414 "ext/standard/var_unserializer.c"
-yy94:
+#line 1358 "ext/standard/var_unserializer.c"
+yy87:
 	++YYCURSOR;
-#line 740 "ext/standard/var_unserializer.re"
+#line 736 "ext/standard/var_unserializer.re"
 	{
 	size_t len, maxlen;
 	char *str;
@@ -1445,10 +1389,10 @@ yy94:
 	ZVAL_STRINGL(rval, str, len);
 	return 1;
 }
-#line 1449 "ext/standard/var_unserializer.c"
-yy96:
+#line 1393 "ext/standard/var_unserializer.c"
+yy89:
 	++YYCURSOR;
-#line 715 "ext/standard/var_unserializer.re"
+#line 711 "ext/standard/var_unserializer.re"
 	{
 	*p = YYCURSOR;
 
@@ -1464,9 +1408,9 @@ yy96:
 
 	return 1;
 }
-#line 1468 "ext/standard/var_unserializer.c"
+#line 1412 "ext/standard/var_unserializer.c"
 }
-#line 1007 "ext/standard/var_unserializer.re"
+#line 1003 "ext/standard/var_unserializer.re"
 
 
 	return 0;
diff --git a/ext/standard/var_unserializer.re b/ext/standard/var_unserializer.re
index 0176e22..38d02cb 100644
--- a/ext/standard/var_unserializer.re
+++ b/ext/standard/var_unserializer.re
@@ -316,7 +316,7 @@ static inline int unserialize_allowed_class(
 
 
 /*!re2c
-uiv = [+]? [0-9]+;
+uiv = [0-9]+;
 iv = [+-]? [0-9]+;
 nv = [+-]? ([0-9]* "." [0-9]+|[0-9]+ "." [0-9]*);
 nvexp = (iv | nv) [eE] iv;
@@ -365,10 +365,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') {
@@ -623,13 +619,13 @@ static int php_var_unserialize_internal(UNSERIALIZE_PARAMETER)
 
 /*!re2c
 
-"R:" iv ";"		{
+"R:" uiv ";"		{
 	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;
 	}
@@ -649,13 +645,13 @@ static int php_var_unserialize_internal(UNSERIALIZE_PARAMETER)
 	return 1;
 }
 
-"r:" iv ";"		{
+"r:" uiv ";"		{
 	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;
 	}
@@ -833,7 +829,7 @@ use_double:
 	return finish_nested_data(UNSERIALIZE_PASSTHRU);
 }
 
-"o:" iv ":" ["] {
+"o:" uiv ":" ["] {
 	long elements;
     if (!var_hash) return 0;
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.