LMPX.COM |
Home | Linux | Mysql | PHP | XML | ||
|
|
|||
From: Andre Colomb Date: Sat Oct 4 15:59:38 2008 Subject: Segfaults around GtkListStore::append()
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi again! Just took some more time to investigate on my problems with PHP-Gtk 2.0.0 and 2.0.1. Let me explain the overall situation first: I work as a programmer for a research institute, currently on a project involving PHP-Gtk. Unfortunately so far it looks like it will not be open-sourced. The problems started occuring while I was trying to go from the beta version to the 2.0.0 release and were not fixed by 2.0.1. The application makes use of the ODBC extension and displays some data in several GtkTreeViews using stock GtkTreeStore and GtkListStore as well as custom derived model classes. When running my application with PHP-Gtk starting at 2.0.0, I get an error message during startup saying that 'the instruction at "0x1008bd58" points to memory at "0x0000005d". The operation "read" could not be executed on that memory. Click OK to exit the program, Cancel to debug.' (Translated from the German error message.) I tried to narrow it down to where in the PHP source the error occurs using simple echo statements. It's been a while since then and I was assigned to a different project meanwhile, then continued development with the PHP-Gtk beta version. So I'm not quite sure about the details I found out back then. IIRC, the error occured between calls to the append() and set() methods on a regular GtkListStore object. I fetched some data from the database into an associative array, then accessed the array when passing parameters to set(). Copying the value to another variable, then passing that to set() worked around the segfault but produced garbage in the list row (and another segfault at a later query I think). Curiously, calling var_dump($database_result_row) also gave me garbage. That is, before the call to append() it contained the correct database values, but between append() and set(), the array content magically changed. So I guess that there is some kind of buffer overflow in the append() code or somewhere around it. Now I have just successfully reproduced the segfault on my laptop at home. It occurs in a different place, but also between a database query and the list store append(). The query result array is still intact. However, a few lines above, a similar construct returns NULL values or random integer values for the database row and causes the segfault to appear a few lines earlier. But only when var_dump()ing that earlier result. As you can see, the behaviour varies wildly between different machines and produces unpredictable behaviour when changing single lines of code. With the PHP-Gtk2 beta, I haven't had a single segfault so I think this is a regression. Unfortunately, it could be in a different module or even related to some other PHP extension, and just by accident always happens to show up between those calls. I'm afraid I cannot give you much more useful information right now. I'm not very experienced in Windows debugging and have no clue about the Zend internals. Also, I'm not sure whether I can provide the source code for others to reproduce the error as I haven't succeded in writing a simpler test case yet. But I'm offering to spend some time trying to nail it down and report back my results. So can someone please give me a quick introduction about PHP-Gtk debugging on a Windows XP system and the required Zend internals to find memory handling errors in some extension? Hope this won't get too complicated and time-consuming as my boss will probably not support it and tell me to stick with the beta if it works. Regards, Andre - -- Greetings... From: Andre Colomb <acolomb@schickhardt.org> -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.9 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iEYEARECAAYFAkjn50oACgkQZ6c/lG/u2qxvfgCgoYD5Y7CtoBQ/w0O0R4CYAWjX EJgAnA6NasjNQItFPTg3jSQHz2PCeDH7 =Qt64 -----END PGP SIGNATURE-----
| Navigate in group php.gtk.general at sever news.php.net | |
| Previous | Next |
| © No Copyright You are free to use Anything |
Site Maintained by PHP Developer
Powered By PHP Consultants |