]> granicus.if.org Git - php/commitdiff
Don't try to serialize references.
authorSascha Schumann <sas@php.net>
Fri, 29 Sep 2000 18:48:40 +0000 (18:48 +0000)
committerSascha Schumann <sas@php.net>
Fri, 29 Sep 2000 18:48:40 +0000 (18:48 +0000)
Circular references would otherwise kill PHP, as the serializer
would overrun the stack.

ext/standard/var.c

index ac0dadc839218092a1dde0e4ceffe790323992b9..8338959088dd01fb180eb7d7530054f4b21a4212 100644 (file)
@@ -300,25 +300,27 @@ void php_var_serialize(pval *buf, pval **struc)
                                                continue;
                                        }
 
-                                       switch (i) {
-                                               case HASH_KEY_IS_LONG:
-                                                       MAKE_STD_ZVAL(d);       
-                                                       d->type = IS_LONG;
-                                                       d->value.lval = index;
-                                                       php_var_serialize(buf, &d);
-                                                       FREE_ZVAL(d);
-                                                       break;
-                                               case HASH_KEY_IS_STRING:
-                                                       MAKE_STD_ZVAL(d);       
-                                                       d->type = IS_STRING;
-                                                       d->value.str.val = key;
-                                                       d->value.str.len = strlen(key);
-                                                       php_var_serialize(buf, &d);
-                                                       efree(key);
-                                                       FREE_ZVAL(d);
-                                                       break;
+                                       if (!(*data)->is_ref) {
+                                               switch (i) {
+                                                       case HASH_KEY_IS_LONG:
+                                                               MAKE_STD_ZVAL(d);       
+                                                               d->type = IS_LONG;
+                                                               d->value.lval = index;
+                                                               php_var_serialize(buf, &d);
+                                                               FREE_ZVAL(d);
+                                                               break;
+                                                       case HASH_KEY_IS_STRING:
+                                                               MAKE_STD_ZVAL(d);       
+                                                               d->type = IS_STRING;
+                                                               d->value.str.val = key;
+                                                               d->value.str.len = strlen(key);
+                                                               php_var_serialize(buf, &d);
+                                                               efree(key);
+                                                               FREE_ZVAL(d);
+                                                               break;
+                                               }
+                                               php_var_serialize(buf, data);
                                        }
-                                       php_var_serialize(buf, data);
                                }
                        }
                        STR_CAT(buf, "}", 1);