#35926 [Com]: Strange configuration behavior, gdb reports corrupt stack
| From: | php-bug-35926 at ryandesign dot com | Date: | Wed, 21 Jun 2006 14:34:59 +0000 |
| Subject: | #35926 [Com]: Strange configuration behavior, gdb reports corrupt stack | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-98636@lists.php.net to get a copy of this message | ||
ID: 35926
Comment by: php-bug-35926 at ryandesign dot com
Reported By: jeff95350 at yahoo dot com
Status: No Feedback
Bug Type: PHP options/info functions
Operating System: FreeBSD 5.4
PHP Version: 4.4.1
New Comment:
For --with-config-file-path, you have specified the path to
the php.ini file, but ./configure --help explains that you
must specify the path to the *directory* in which php.ini can
be found.
Previous Comments:
------------------------------------------------------------------------
[2006-01-15 01:00:04] php-bugs at lists dot php dot net
No feedback was provided for this bug for over a week, so it is
being suspended automatically. If you are able to provide the
information that was originally requested, please do so and change
the status of the bug back to "Open".
------------------------------------------------------------------------
[2006-01-07 22:56:52] sniper@php.net
Please try using this CVS snapshot:
http://snaps.php.net/php5.1-latest.tar.gz
For Windows:
http://snaps.php.net/win32/php5.1-win32-latest.zip
------------------------------------------------------------------------
[2006-01-07 22:41:29] jeff95350 at yahoo dot com
Description:
------------
PHP 4.4.1 seems to behave strangely when looking for the config file.
Below I have an example that appears to be contradictory, or at least
extremely unintuitive. PHP reports that it is using a certain
configuration file, but then ignores the contents. When I specify the
configuration file directly, it works fine.
While investigating, I also show GDB reporting a corrupted stack.
Reproduce code:
---------------
$ pwd
/home/admin/install
$ rm -rf php-4.4.1/
$ tar jxf ../download/php-4.4.1.tar.bz2
$ cd php-4.4.1/
$ ./configure --prefix=/usr/local/admin
--with-config-file-path=/usr/local/admin/etc/php.ini
--with-config-file-scan-dir=/usr/local/admin/etc/php --with-pgsql
--with-mysql --with-curl --with-gd --enable-fastcgi --with-openssl
--with-zlib --enable-bcmath --with-bz2 --enable-calendar --enable-dba
--with-db4 --with-mhash --with-mcrypt
$ make && make install
$ grep pgsql.allow_persistent /usr/local/admin/etc/php.ini
pgsql.allow_persistent = Off
$ /usr/local/admin/bin/php -i | grep Configuration
<tr><td class="e">Configuration File (php.ini) Path </td><td
class="v">/usr/local/admin/etc/php.ini </td></tr>
<h1>Configuration</h1>
Notice that php reports that it is using the config file
"/usr/local/admin/etc/php.ini", and that that config file has
pgsql.allow_persistent = Off.
Expected result:
----------------
$ /usr/local/admin/bin/php -i | grep pgsql.allow_persistent
<tr><td class="e">pgsql.allow_persistent</td><td
class="v">Off</td><td
class="v">Off</td></tr>
$ /usr/local/admin/bin/php -i \
-c /usr/local/admin/etc/php.ini \
| grep pgsql.allow_persistent
<tr><td class="e">pgsql.allow_persistent</td><td
class="v">Off</td><td
class="v">Off</td></tr>
Actual result:
--------------
Notice below how pgsql.allow_persistent is On when the config file says
it should be Off.
$ /usr/local/admin/bin/php -i | grep pgsql.allow_persistent
<tr><td class="e">pgsql.allow_persistent</td><td
class="v">On</td><td
class="v">On</td></tr>
Notice below how the config file obviously works. It's really just the
php.ini-dist with all of the "allow_persistent" settings turned Off.
Below I specify the config file explicitly and it works fine.
$ /usr/local/admin/bin/php -i \
-c /usr/local/admin/etc/php.ini \
| grep pgsql.allow_persistent
<tr><td class="e">pgsql.allow_persistent</td><td
class="v">Off</td><td
class="v">Off</td></tr>
While investigating the problem, I saw some strange results from gdb:
$ gdb /usr/local/admin/bin/php
GNU gdb 6.1.1 [FreeBSD]
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and
you are
welcome to change it and/or distribute copies of it under certain
conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for
details.
This GDB was configured as "i386-marcel-freebsd"...
(gdb) set args "-i"
(gdb) break php_init_config
Breakpoint 1 at 0x81468b8: file
/home/admin/install/php-4.4.1/main/php_ini.c, line 251.
(gdb) run
Starting program: /usr/local/admin/bin/php "-i"
Breakpoint 1, php_init_config ()
at /home/admin/install/php-4.4.1/main/php_ini.c:251
251 zend_file_handle fh = {0};
(gdb) watch free_ini_search_path
Hardware watchpoint 2: free_ini_search_path
(gdb) continue
Continuing.
Hardware watchpoint 2: free_ini_search_path
Old value = 0
New value = 1
php_init_config () at /home/admin/install/php-4.4.1/main/php_ini.c:288
288 php_ini_search_path[0] = 0;
(gdb) step
295 if (env_location[0]) {
(gdb)
315 if (strcmp(sapi_module.name, "cli") != 0) {
(gdb)
316 if (*php_ini_search_path) {
(gdb)
319 strcat(php_ini_search_path, ".");
(gdb)
331 if (sapi_module.executable_location) {
(gdb)
332 binary_location =
estrdup(sapi_module.executable_location);
(gdb)
_estrdup (s=0x81bed31 "i-fcgi")
at /home/admin/install/php-4.4.1/Zend/zend_alloc.c:360
360 {
(gdb) finish
Run till exit from #0 _estrdup (s=0x81bed31 "i-fcgi")
at /home/admin/install/php-4.4.1/Zend/zend_alloc.c:360
0x08146e94 in php_init_config ()
at /home/admin/install/php-4.4.1/main/php_ini.c:332
332 binary_location =
estrdup(sapi_module.executable_location);
Value returned is $1 = 0x822304c "/usr/local/admin/bin/php"
(gdb) step
337 if (binary_location) {
(gdb)
332 binary_location =
estrdup(sapi_module.executable_location);
(gdb)
337 if (binary_location) {
(gdb)
338 char *separator_location =
strrchr(binary_location, DEFAULT_SLASH);
(gdb)
Error evaluating expression for watchpoint 2
Previous frame identical to this frame (corrupt stack?)
Watchpoint 2 deleted.
0x281c7b07 in r_debug_state () from /libexec/ld-elf.so.1
(gdb)
It looks like there's some kind of problem there, since gdb says
"corrupt stack". I'm not particularly good with gdb, so maybe there's
nothing wrong with PHP.
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=35926&edit=1