#35891 [WFx]: Erroneous code thru eval() causes memory leak

From: Date: Wed, 04 Jan 2006 14:00:38 +0000
Subject: #35891 [WFx]: Erroneous code thru eval() causes memory leak
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-91461@lists.php.net to get a copy of this message
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: There used to be a php_check_syntax() function, but it only accepted files and insisted on executing the specified file. Previous Comments: ------------------------------------------------------------------------ [2006-01-04 14:58:40] taneli at crasman dot fi 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? ------------------------------------------------------------------------ [2006-01-04 14:51:54] tony2001@php.net 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

« previous php.bugs (#91461) next »