ID: 35891 User updated by: taneli at crasman dot fi Reported By: taneli at crasman dot fi Status: Wont fix Bug Type: Scripting Engine problem Operating System: Linux PHP Version: 5.1.1, 4.4.1 New Comment:
That would be just fine if there was a method to check PHP's syntax (other than "php -l") and/or the entire script would terminate properly (the script continues to run even if eval()'ed code contains a parse error). Of course, I don't see why a *parse* error should leave any engine to an unstable state. Apparently this is reason why user error handlers were disabled for the more serious errors? Previous Comments: ------------------------------------------------------------------------ [2006-01-04 14:51:54] [EMAIL PROTECTED] This is expected. After parse error (wherever it happens) the engine is in unstable state and is unable to gracefully free all the memory allocated before. Just don't do it [tm]. ------------------------------------------------------------------------ [2006-01-04 13:59:02] taneli at crasman dot fi Also present in PHP 4.4.1. BTW: Worst CAPTCHA images, ever. ------------------------------------------------------------------------ [2006-01-04 13:53:57] taneli at crasman dot fi Description: ------------ Running unparsable code - which shouldn't be done, of course, but - causes a memory leak. Proper, parsable code does not cause memory leaks. Reproduce code: --------------- <?{ echo "Erroneous code eval():\n"; echo "Memory used before: " . memory_get_usage() . "\n"; for ($i = 0; $i < 1000; $i++) { eval('$foo = 1; $bar = 2; asdf'); echo "Loop $i, memory used: " . memory_get_usage() . "\n"; } echo "Memory used after: " . memory_get_usage() . "\n"; echo "\nProper code eval():\n"; echo "Memory used before: " . memory_get_usage() . "\n"; for ($i = 0; $i < 1000; $i++) { eval('$foo = 1; $bar = 2;'); echo "Loop $i, memory used: " . memory_get_usage() . "\n"; } echo "Memory used after: " . memory_get_usage() . "\n"; }?> Expected result: ---------------- Erroneous code eval(): Memory used before: 42568 Loop 1, memory used: 42568 ... Loop 999, memory used: 42568 Memory used after: 42568 Proper code eval(): Memory used before: 42568 Loop 1, memory used: 42568 ... Loop 999, memory used: 42568 Memory used after: 42568 Actual result: -------------- Erroneous code eval(): Memory used before: 42568 Loop 0, memory used: 49960 Loop 1, memory used: 57040 Loop 2, memory used: 64088 Loop 3, memory used: 71136 ... Loop 999, memory used: 7073088 Memory used after: 7073064 Proper code eval(): Memory used before: 7073064 Loop 0, memory used: 7073376 ... Loop 999, memory used: 7073376 Memory used after: 7073352 ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=35891&edit=1