Bug #61968 [Opn]: Crash in certain script using GD in Moodle

From: Date: Sat, 01 Sep 2012 11:25:23 +0000
Subject: Bug #61968 [Opn]: Crash in certain script using GD in Moodle
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-173086@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=61968&edit=1

 ID:                 61968
 Updated by:         pajoye@php.net
 Reported by:        k-yamashita at ver2 dot jp
 Summary:            Crash in certain script using GD in Moodle
 Status:             Open
 Type:               Bug
-Package:            GD related
+Package:            Scripting Engine problem
 Operating System:   Windows 7 x86
 PHP Version:        5.4.2
 Block user comment: N
 Private report:     N

 New Comment:

Don't see how it is related to GD, there is no trace of GD code in the backtrace.


Previous Comments:
------------------------------------------------------------------------
[2012-09-01 08:23:34] mihalych at vsepofigu dot ru

And now the same problem on FreeBSD 7.4-RELEASE-p9, PHP 5.3.16 with Suhosin-Patch

------------------------------------------------------------------------
[2012-06-26 14:31:30] mihalych at vsepofigu dot ru

Got the same issue with PHP 5.3.14 on openSUSE Tumbleweed. But it's not GD related.

Backtrace:

#0  zval_mark_grey (pz=<optimized out>) at /usr/src/debug/php-5.3.14/Zend/zend_gc.c:372
#1  0xb67c742d in gc_mark_roots () at /usr/src/debug/php-5.3.14/Zend/zend_gc.c:435
#2  gc_collect_cycles () at /usr/src/debug/php-5.3.14/Zend/zend_gc.c:664
#3  0xb67a63f5 in zend_deactivate () at /usr/src/debug/php-5.3.14/Zend/zend.c:901
#4  0xb6746aa9 in php_request_shutdown (dummy=0x0) at /usr/src/debug/php-5.3.14/main/main.c:1661
#5  0xb683ab44 in php_apache_request_dtor (r=<optimized out>) at
/usr/src/debug/php-5.3.14/sapi/apache2handler/sapi_apache2.c:509
#6  php_handler (r=0xb6f05058) at /usr/src/debug/php-5.3.14/sapi/apache2handler/sapi_apache2.c:681

Code which crashes:

<?php
ini_set('display_errors', true);
error_reporting(E_ALL);

class Plugin
{
	private $name;

	public function __construct()
	{
		$GLOBALS['app']->getFoo()->activePlugin = $this->name;
	}
}

class Plugins
{
	private $plugin;

	public function init()
	{
		$this->plugin = new Plugin();
	}

}

class LegacyApplication
{
	private $plugins;

	function init()
	{
		$this->plugins = new Plugins;
		$this->plugins->init();
	}
}

class Foo
{
	public $activePlugin;

	private $bar = array();

	public function init()
	{
		$this->bar []= 'bar';
	}
}

class Application
{
	private $foo;

	public function main()
	{
		$GLOBALS['LegacyObject'] = new LegacyApplication;
		Application::getLegacyApplication()->init();
		$this->foo = new Foo();
		$this->foo->init();
	}

	public static function getLegacyApplication()
	{
		return $GLOBALS['LegacyObject'];
	}

	public function getFoo()
	{
		return $this->foo;
	}
}

$app = new Application();
$app->main();

echo 'OK';
?>

------------------------------------------------------------------------
[2012-05-07 16:54:54] k-yamashita at ver2 dot jp

Description:
------------
PHP 5.4.1 and 5.4.2 crashes at a page of learning management system Moodle (http://moodle.org/)
drawing a graph using GD.

1. Install Moodle.
2. Log in as admin and create at least one student user.
3. Create a course.
4. Enter edit mode and add a quiz to the course.
5. Log in as a student user, take the quiz just created.
6. Log in as admin, see the quiz report.

Page URL is <moodle>/mod/quiz/report.php?id=<module id>&mode=overview.
Embedded graph image is rendered by
<moodle>/mod/quiz/report/overview/overviewgraph.php?id=<quiz id>.
PHP 5.3.8 didn't have this issue.

My environment:
OS: Windows 7 x86 Home Premium
Server package: XAMPP 1.7.7 (Apache 2.2.21, MySQL 5.5.16)
PHP: replaced original 5.3.8 with 5.4.1 and 5.4.2
PHP extensions: php_gd2.dll, php_mysqli.dll
Moodle: any of 1.9.14, 2.0.8, 2.2.2


Test script:
---------------
Tried to reproduce by separating concerning library files only and copied the object properties by
var_export but didn't reproduce (graph is displayed without crash).

Actual result:
--------------
php5ts.dll stops with APPCRASH c0000005. Access to both report page and graph only causes crash.

Weirdly if I add "exit();" at the end of the script overviewgraph.php, it doesn't
crash.

Callgraph shown when debugging with Visual Studio:
(行=line, バイト=byte)
>	php5ts.dll!zval_mark_grey(_zval_struct * pz, void * * * tsrm_ls)  行 425	C
 	php5ts.dll!gc_mark_roots(void * * * tsrm_ls)  行 501 + 0x7 バイト	C
 	php5ts.dll!gc_collect_cycles(void * * * tsrm_ls)  + 0x15c1a1 バイト	C
 	php5ts.dll!zend_deactivate(void * * * tsrm_ls)  行 944 + 0x6 バイト	C
 	php5ts.dll!php_request_shutdown(void * dummy)  行 1784	C
 	php5apache2_2.dll!php_handler(request_rec * r)  行 680	C
 	libhttpd.dll!6ff02515() 	
 	[下のフレームは間違っているか、または見つかりません。libhttpd.dll
に対して読み込まれたシンボルはありません。]	
 	libhttpd.dll!6ff0297c() 	
 	libhttpd.dll!6ff0ff7c() 	
 	libhttpd.dll!6ff0b092() 	
 	libhttpd.dll!6ff05305() 	
 	libhttpd.dll!6ff055d2() 	
 	libhttpd.dll!6ff1ea89() 	
 	msvcr90.dll!6ffb3433() 	
 	msvcr90.dll!6ffb34c7() 	
 	kernel32.dll!7655ed6c() 	
 	ntdll.dll!778f377b() 	
 	ntdll.dll!778f374e() 	



------------------------------------------------------------------------



-- 
Edit this bug report at https://bugs.php.net/bug.php?id=61968&edit=1


Thread (7 messages)

« previous php.bugs (#173086) next »