]> granicus.if.org Git - php/commitdiff
- MFH: Fixed bug #48693 (Double declaration of __lambda_func when lambda wrongly...
authorFelipe Pena <felipe@php.net>
Sun, 28 Jun 2009 01:16:36 +0000 (01:16 +0000)
committerFelipe Pena <felipe@php.net>
Sun, 28 Jun 2009 01:16:36 +0000 (01:16 +0000)
NEWS
Zend/tests/bug48693.phpt [new file with mode: 0644]
Zend/zend_builtin_functions.c

diff --git a/NEWS b/NEWS
index eed220fa757cde7950fcd8534632246a8500295c..b20f2b6ce79a44b8dbf12e27e0366d2618066f39 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,6 +1,8 @@
 PHP                                                                        NEWS
 |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
 ?? ??? 2009, PHP 5.2.11
+- Fixed bug #48693 (Double declaration of __lambda_func when lambda wrongly
+  formatted). (peter at lvp-media dot com, Felipe)
 - Fixed bug #48661 (phpize is broken with non-bash shells). (Jani)
 - Fixed bug #48636 (Error compiling of ext/date on netware). (guenter at
   php.net, Ilia)
diff --git a/Zend/tests/bug48693.phpt b/Zend/tests/bug48693.phpt
new file mode 100644 (file)
index 0000000..e574346
--- /dev/null
@@ -0,0 +1,28 @@
+--TEST--
+Bug #48693 (Double declaration of __lambda_func when lambda wrongly formatted)
+--FILE--
+<?php
+
+$x = create_function('', 'return 1; }');
+$y = create_function('', 'function a() { }; return 2;');
+$z = create_function('', '{');
+$w = create_function('', 'return 3;');
+
+var_dump(
+       $x,
+       $y(),
+       $z,
+       $w(),
+       $y != $z
+);
+
+?>
+--EXPECTF--
+Parse error: syntax error, unexpected '}' in %s(%d) : runtime-created function on line 1
+
+Parse error: syntax error, unexpected $end in %s(%d) : runtime-created function on line 1
+bool(false)
+int(2)
+bool(false)
+int(3)
+bool(true)
index 185fb361c486b8a8bc4259d4e9cbfe19aa3129b5..25cb220ea570a2ae31aa7ae3f0ea33527077339b 100644 (file)
@@ -1516,6 +1516,7 @@ ZEND_FUNCTION(create_function)
                zend_hash_del(EG(function_table), LAMBDA_TEMP_FUNCNAME, sizeof(LAMBDA_TEMP_FUNCNAME));
                RETURN_STRINGL(function_name, function_name_length, 0);
        } else {
+               zend_hash_del(EG(function_table), LAMBDA_TEMP_FUNCNAME, sizeof(LAMBDA_TEMP_FUNCNAME));
                RETURN_FALSE;
        }
 }