Edit report at http://bugs.php.net/bug.php?id=51062&edit=1
ID: 51062 Updated by: s...@php.net Reported by: seanius at debian dot org Summary: DBA DB4 build uses mismatched headers & libraries Status: Bogus Type: Bug Package: DBM/DBA related Operating System: Debian PHP Version: 5.3.1 Assigned To: sixd New Comment: The change is in: http://svn.php.net/viewvc?view=revision&revision=295844 Previous Comments: ------------------------------------------------------------------------ [2010-03-05 06:39:12] s...@php.net I added DB 4.7 & DB 4.8 to the autodetect list in config.m4 for PHP 5.2.14-dev, PHP 5.3.3-dev and PHP 6. This changes the default behavior and may help many cases. It certainly allowed DBA DB4 to work when I had 4.7 headers and 4.7 & 4.6 libraries, and built using "--with-db4". Without the change I saw the corrupted output you reported. Config.m4 still doesn't check the library version matches the header version. ------------------------------------------------------------------------ [2010-02-19 08:57:34] seanius at debian dot org actually it's fairly common (at least on debian-derived systems, couldn't speak for others) to have multiple versions of libdb installed. The problem is that the code that does the testing of headers will match against a generic "db.h" and then will happily link against any other version of libdb that it finds (and it doesn't seem to be searching includes/libs in the same order). i'd argue that the configure detection ought to be a bit more thorough in this regard but won't press the point. ------------------------------------------------------------------------ [2010-02-19 08:46:22] j...@php.net -Status: Open +Status: Bogus No need for several reports on basically same issue, and regarding the header issues: That's nothing we can or will do about. If you mess your system with multiple libs and headers, that's your problem. ------------------------------------------------------------------------ [2010-02-17 22:40:04] seanius at debian dot org some more investigation reveals that the problem was caused by having db4.8 headers alongside db4.6 and db4.8 runtime libraries (i.e. having installed libdb4.6, libdb4.8, and libdv-dev (which is 4.8 in latest debian/ubuntu)). the build scripts find the the headers from the db4.8 package, and the 4.6 libraries since there is no code for testing for versions > 4.6. strangely enough it's able to build/link. having the libdb4.6 headers installed instead of the 4.8 headers removes the problem and the tests pass, but i would argue that this is still a bug. namely: * php doesn't support building against db4.8 (i could report a seperate bug about this if it's better) * php wrongly builds against headers for one version of libdb and links against another. ------------------------------------------------------------------------ [2010-02-16 21:52:06] seanius at debian dot org Description: ------------ Tested against the debian 5.3.1 packages as well as a recent 5.3 snapshot. fails on a variety of BE/LE and 32/64bit archs. note that the failure is different from the snapshot (Segfaults in some cases) and from 5.3.1 (various warnings about invalid parameters). i don't want to flood the description so i'll only include the 5.3 snapshot output here. ===================================================================== PHP : ./sapi/cli/php PHP_SAPI : cli PHP_VERSION : 5.3.3-dev ZEND_VERSION: 2.3.0 PHP_OS : Linux - Linux rangda 2.6.32-trunk-amd64 #1 SMP Sun Jan 10 22:40:40 UTC 2010 x86_64 INI actual : /home/sean/Download/php5.3-201002160730 More .INIs : CWD : /home/sean/Download/php5.3-201002160730 Extra dirs : VALGRIND : Not used ===================================================================== Running selected tests. TEST 1/25 [ext/dba/tests/bug36436.phpt] ========DIFF======== 001+ DB->sync: method not permitted before handle's open method 002+ Segmentation fault 001- resource(%d) of type (dba persistent) 002- string(3) "XYZ" 003- string(1) "X" 004- string(1) "Y" 005- ===DONE=== ========DONE======== FAIL Bug #36436 (DBA problem with Berkeley DB4) [ext/dba/tests/bug36436.phpt] TEST 2/25 [ext/dba/tests/bug48240.phpt] ========DIFF======== 001+ DB->sync: method not permitted before handle's open method 002- ===DONE=== 003+ Segmentation fault ========DONE======== FAIL Bug #48240 (DBA Segmentation fault dba_nextkey) [ext/dba/tests/bug48240.phpt] TEST 3/25 [ext/dba/tests/bug49125.phpt] ========DIFF======== 001+ DB->sync: method not permitted before handle's open method 001- bool(true) 002+ Segmentation fault ========DONE======== FAIL Bug #49125 (Error in dba_exists C code) [ext/dba/tests/bug49125.phpt] PASS DBA File Creation Test [ext/dba/tests/dba001.phpt] PASS DBA Insert/Fetch Test [ext/dba/tests/dba002.phpt] PASS DBA Insert/Replace/Fetch Test [ext/dba/tests/dba003.phpt] PASS DBA Multiple Insert/Fetch Test [ext/dba/tests/dba004.phpt] PASS DBA FirstKey/NextKey Loop Test With 5 Items [ext/dba/tests/dba005.phpt] PASS DBA FirstKey/NextKey with 2 deletes [ext/dba/tests/dba006.phpt] PASS DBA Multiple File Creation Test [ext/dba/tests/dba007.phpt] PASS DBA magic_quotes_runtime Test [ext/dba/tests/dba008.phpt] PASS DBA dba_popen Test [ext/dba/tests/dba009.phpt] PASS DBA CDB handler test [ext/dba/tests/dba_cdb.phpt] PASS DBA CDB_MAKE handler test [ext/dba/tests/dba_cdb_make.phpt] PASS DBA CDB handler test (read only) [ext/dba/tests/dba_cdb_read.phpt] SKIP DBA DB1 handler test [ext/dba/tests/dba_db1.phpt] reason: DB1 handler not available SKIP DBA DB2 handler test [ext/dba/tests/dba_db2.phpt] reason: DB2 handler not available SKIP DBA DB3 handler test [ext/dba/tests/dba_db3.phpt] reason: DB3 handler not available TEST 19/25 [ext/dba/tests/dba_db4.phpt] ========DIFF======== 002+ DB->sync: method not permitted before handle's open method 003+ DB->get: method not permitted before handle's open method 004+ DB->get: method not permitted before handle's open method 005+ DB->fd: method not permitted before handle's open method 006+ 0Segmentation fault 002- 3NYNYY 003- Content String 2 004- Content 2 replaced 005- Read during write: not allowed 006- Content 2 replaced 2nd time 007- The 6th value 008- array(3) { 009- ["key number 6"]=> 010- string(13) "The 6th value" 011- ["key2"]=> 012- string(27) "Content 2 replaced 2nd time" 013- ["key5"]=> 014- string(23) "The last content string" 015- } 016- --NO-LOCK-- 017- 3NYNYY 018- Content String 2 019- Content 2 replaced 020- Read during write: not allowed 021- Content 2 replaced 2nd time 022- The 6th value 023- array(3) { 024- ["key number 6"]=> 025- string(13) "The 6th value" 026- ["key2"]=> 027- string(27) "Content 2 replaced 2nd time" 028- ["key5"]=> 029- string(23) "The last content string" 030- } 031- ===DONE=== ========DONE======== FAIL DBA DB4 handler test [ext/dba/tests/dba_db4.phpt] SKIP DBA DBM handler test [ext/dba/tests/dba_dbm.phpt] reason: DBM handler not available PASS DBA FlatFile handler test [ext/dba/tests/dba_flatfile.phpt] SKIP DBA GDBM handler test [ext/dba/tests/dba_gdbm.phpt] reason: GDBM handler not available PASS DBA INIFILE handler test [ext/dba/tests/dba_inifile.phpt] SKIP DBA NDBM handler test [ext/dba/tests/dba_ndbm.phpt] reason: NDBM handler not available SKIP DBA QDBM handler test [ext/dba/tests/dba_qdbm.phpt] reason: QDBM handler not available ===================================================================== Number of tests : 25 18 Tests skipped : 7 ( 28.0%) -------- Tests warned : 0 ( 0.0%) ( 0.0%) Tests failed : 4 ( 16.0%) ( 22.2%) Expected fail : 0 ( 0.0%) ( 0.0%) Tests passed : 14 ( 56.0%) ( 77.8%) --------------------------------------------------------------------- Time taken : 0 seconds ===================================================================== ===================================================================== FAILED TEST SUMMARY --------------------------------------------------------------------- Bug #36436 (DBA problem with Berkeley DB4) [ext/dba/tests/bug36436.phpt] Bug #48240 (DBA Segmentation fault dba_nextkey) [ext/dba/tests/bug48240.phpt] Bug #49125 (Error in dba_exists C code) [ext/dba/tests/bug49125.phpt] DBA DB4 handler test [ext/dba/tests/dba_db4.phpt] ===================================================================== Reproduce code: --------------- ext/dba/tests/bug36436.phpt ext/dba/tests/bug48240.phpt ext/dba/tests/bug49125.phpt ext/dba/tests/dba_db4.phpt Expected result: ---------------- PASS Actual result: -------------- FAIL (incl segfaults) ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/bug.php?id=51062&edit=1