|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2000-06-02 17:57 UTC] dave dot dunkin at vista dot com
We use mod_perl as well as PHP and access an Oracle8 database from both. We started getting segfaults from PHP when we started accessing the database from mod_perl. The problem occurs when a connection to the database is opened from mod_perl, then a LOB is accessed in PHP. When the PHP tries an ocilogoff, a segfault comes out of the Oracle library. PHP 3.0.13-16 Apache 1.3.9 mod_perl 1.23-24 Linux 2.2.14 glibc 2.1.3 Oracle8i client 8.1.5.0.0 (with header patches so PHP compiles) > [root@webserver004-bham apache]# gdb /usr/local/apache/bin/httpd > GNU gdb 19991004 > Copyright 1998 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-redhat-linux"... > (gdb) attach 25639 > Attaching to program: /usr/local/apache/bin/httpd, Pid 25639 > Reading symbols from /usr/oracle/lib/libclntsh.so.8.0...done. > Reading symbols from /lib/libm.so.6...done. > Reading symbols from /lib/libcrypt.so.1...done. > Reading symbols from /lib/libdb.so.3...done. > Reading symbols from /lib/libc.so.6...done. > Reading symbols from /lib/libdl.so.2...done. > Reading symbols from /lib/libpthread.so.0...done. > Reading symbols from /lib/ld-linux.so.2...done. > Reading symbols from /lib/libnss_files.so.2...done. > Reading symbols from /usr/lib/gconv/ISO8859-1.so...done. > Reading symbols from /usr/local/apache/libexec/mod_vhost_alias.so...done. > Reading symbols from /usr/local/apache/libexec/mod_env.so...done. > Reading symbols from /usr/local/apache/libexec/mod_log_config.so...done. > Reading symbols from /usr/local/apache/libexec/mod_mime.so...done. > Reading symbols from /usr/local/apache/libexec/mod_negotiation.so...done. > Reading symbols from /usr/local/apache/libexec/mod_status.so...done. > Reading symbols from /usr/local/apache/libexec/mod_include.so...done. > Reading symbols from /usr/local/apache/libexec/mod_autoindex.so...done. > Reading symbols from /usr/local/apache/libexec/mod_dir.so...done. > Reading symbols from /usr/local/apache/libexec/mod_cgi.so...done. > Reading symbols from /usr/local/apache/libexec/mod_asis.so...done. > Reading symbols from /usr/local/apache/libexec/mod_imap.so...done. > Reading symbols from /usr/local/apache/libexec/mod_actions.so...done. > Reading symbols from /usr/local/apache/libexec/mod_userdir.so...done. > ---Type <return> to continue, or q <return> to quit--- > Reading symbols from /usr/local/apache/libexec/mod_alias.so...done. > Reading symbols from /usr/local/apache/libexec/mod_access.so...done. > Reading symbols from /usr/local/apache/libexec/mod_auth.so...done. > Reading symbols from /usr/local/apache/libexec/mod_setenvif.so...done. > Reading symbols from /usr/local/apache/libexec/mod_rewrite.so...done. > Reading symbols from /usr/local/apache/libexec/libphp3.so...done. > Reading symbols from /usr/lib/libgd.so.1...done. > Reading symbols from /usr/lib/libgdbm.so.2...done. > Reading symbols from /lib/libpam.so.0...done. > Reading symbols from /lib/libresolv.so.2...done. > Reading symbols from /usr/local/apache/libexec/libperl.so...done. > Reading symbols from /lib/libnsl.so.1...done. > Reading symbols from /usr/local/apache/libexec/raven_ssl.so...done. > Reading symbols from /usr/lib/perl5/5.00503/i386-linux/auto/Data/Dumper/Dumper.so...done. > Reading symbols from /usr/lib/perl5/5.00503/i386-linux/auto/B/B.so...done. > Reading symbols from /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/Symbol/Symbol.so...done. > Reading symbols from /usr/lib/perl5/site_perl/5.005/i386-linux/auto/DBI/DBI.so...done. > Reading symbols from /usr/lib/perl5/site_perl/5.005/i386-linux/auto/DBD/Oracle/Oracle.so...done. > Reading symbols from /usr/oracle/lib/libskgxp8.so...done. > Reading symbols from /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Digest/MD5/M---Type <return> to continue, or q <return> to quit--- > D5.so...done. > Reading symbols from /usr/lib/perl5/5.00503/i386-linux/auto/Socket/Socket.so... > done. > Reading symbols from /lib/libnss_nisplus.so.2...done. > Reading symbols from /lib/libnss_nis.so.2...done. > Reading symbols from /lib/libnss_dns.so.2...done. > 0x4065317e in __select () from /lib/libc.so.6 > (gdb) c > Continuing. > > Program received signal SIGSEGV, Segmentation fault. > 0x40169775 in kpufdesc () from /usr/oracle/lib/libclntsh.so.8.0 > (gdb) bt > #0 0x40169775 in kpufdesc () from /usr/oracle/lib/libclntsh.so.8.0 > #1 0x40187946 in OCIDescriptorFree () from /usr/oracle/lib/libclntsh.so.8.0 > #2 0x4085b188 in _oci8_free_descr (descr=0x8d155f8) at functions/oci8.c:1894 > #3 0x408342ca in _php3_hash_destroy (ht=0x8d17e48) at php3_hash.c:668 > #4 0x40859a1c in _oci8_close_conn (connection=0x8d164d8) > at functions/oci8.c:632 > #5 0x4083b1c5 in list_entry_destructor (ptr=0x8d15e10) at list.c:96 > #6 0x408341c2 in _php3_hash_del_key_or_index (ht=0x408b8420, arKey=0x0, > nKeyLength=0, h=19, flag=1) at php3_hash.c:633 > #7 0x4083b139 in php3_list_do_delete (list=0x408b8420, id=19) at list.c:72 > #8 0x4085d581 in php3_oci8_logout (ht=0x8d161e0, return_value=0x408b6eb4, > list=0x408b8420, plist=0x408b83e0) at functions/oci8.c:3349 > #9 0x4087b7bd in phpparse () at control_structures_inline.h:929 > #10 0x40832e40 in php3_parse (yyin=0x87a6bf0) at main.c:1538 > #11 0x4083311c in apache_php3_module_main (r=0x87b2cb4, fd=27, > display_source_mode=0, preprocessed=0) at main.c:1892 > #12 0x4082fe81 in send_php3 () from /usr/local/apache/libexec/libphp3.so > #13 0x4082ff07 in send_parsed_php3 () from /usr/local/apache/libexec/libphp3.so > #14 0x8054553 in ap_invoke_handler () > #15 0x8067cb9 in process_request_internal () > #16 0x8067d1c in ap_process_request () > #17 0x805f62e in child_main () > #18 0x805f88c in make_child () > #19 0x805f939 in startup_children () > ---Type <return> to continue, or q <return> to quit--- > #20 0x805ff66 in standalone_main () > #21 0x80606e3 in main () > #22 0x405be9cb in __libc_start_main (main=0x80603ac <main>, argc=2, > argv=0xbffff9a4, init=0x804ea4c <_init>, fini=0x80962cc <_fini>, > rtld_fini=0x4000ae60 <_dl_fini>, stack_end=0xbffff99c) > at ../sysdeps/generic/libc-start.c:92 PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Sat Oct 25 10:00:01 2025 UTC |
The following scripts will reproduce the problem: lobtest.php3: <?php //ociinternaldebug(1); echo "connecting to the database<br>\n"; flush(); $conn = ociplogon("scott", "tiger", "dbhost"); echo "creating table 'lobs'<br>\n"; flush(); $sql = "create table lobs (lob CLOB)"; $stmt = ociparse($conn, $sql); ociexecute($stmt); ocifreestatement($stmt); echo "inserting 'test' into 'lob' in 'lobs'<br>\n"; flush(); $sql = "insert into lobs (lob) values (EMPTY_CLOB()) returning lob into :lob"; $clob = ocinewdescriptor($conn, OCI_D_LOB); $stmt = ociparse($conn, $sql); ocibindbyname($stmt, ":lob", &$clob, -1, OCI_B_CLOB); ociexecute($stmt, OCI_DEFAULT); $clob->save("test"); ocicommit($conn); flush(); ocifreedescriptor($clob); ocifreestatement($stmt); /* echo "retreiving 'lob' from 'lobs'<br>\n"; flush(); $sql = "select lob from lobs"; $stmt = ociparse($conn, $sql); ociexecute($stmt); ocifetchinto($stmt, &$row, OCI_ASSOC); $lob = $row["LOB"]->load(); ocifreestatement($stmt); echo "value of 'lob': ".$lob."<br>\n"; flush(); */ echo "dropping table 'lobs'<br>\n"; flush(); $sql = "drop table lobs"; $stmt = ociparse($conn, $sql); ociexecute($stmt); ocifreestatement($stmt); echo "disconnecting from the database<br>\n"; flush(); ocilogoff($conn); ociinternaldebug(0); ?> dbdconnect.cgi: #!/usr/bin/perl use DBI; use DBD::Oracle; $ENV{ORACLE_HOME} = "/usr/oracle"; print "Content-Type: text/plain\n\n"; print "Connecting to the database\n"; my $dbh = DBI->connect("dbi:Oracle:", "scott/tiger\@dbhost", ""); print "Connected.\n"; print "Disconnecting.\n"; $dbh->disconnect(); print "Disconnected.\n"; exit(0); dbdconnect.cgi MUST be run in mod_perl for the failure to occur. It works okay as a CGI. To reproduce the problem, run lobtest.php3 (to show that it works) then dbdconnect.cgi, then lobtest.php3 again. mod_perl is compiled: perl Makefile.PL ALL_HOOKS=1 EVERYTHING=1 USE_APXS=1 WITH_APXS=/usr/local/apache/bin/apxs PHP is compiled: ./configure --with-oracle --with-apxs=/usr/local/apache/bin/apxs --with-config-file-path=/usr/local/apache DBI version 1.13 DBD::Oracle version 1.03 We are also using Raven SSL 1.4.1.