php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #47048 Segfault with new pg_meta_data
Submitted: 2009-01-09 11:38 UTC Modified: 2009-01-18 23:52 UTC
Votes:4
Avg. Score:5.0 ± 0.0
Reproduced:0 of 0 (0.0%)
From: ml-php dot net at bettercom dot de Assigned:
Status: Closed Package: PostgreSQL related
PHP Version: 5.2.8 OS: FreeBSD 7.0-RELEASE
Private report: No CVE-ID: None
 [2009-01-09 11:38 UTC] ml-php dot net at bettercom dot de
Description:
------------
The last changes php_pgsql_meta_data cause segfaults in client and 
mod_php5

Reproduce code:
---------------
<?php
  $dbconn = pg_connect("dbname=*** user=***") or die("Could not connect");

  $meta = pg_meta_data($dbconn, 'a_table');
  if (is_array($meta)) {
    var_dump($meta);
  }
?>


Actual result:
--------------
(gdb) bt
#0  0x28606b20 in php_pgsql_meta_data () 
from /usr/local/lib/php/20060613/pgsql.so
#1  0x2860c49b in zif_pg_meta_data () 
from /usr/local/lib/php/20060613/pgsql.so
#2  0x0818be08 in zend_do_fcall_common_helper_SPEC ()
#3  0x0817d639 in execute ()
#4  0x0815ffc2 in zend_execute_scripts ()
#5  0x0811e7b5 in php_execute_script ()
#6  0x081db5e7 in main ()


Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2009-01-10 20:57 UTC] felipe@php.net
I can't reproduce it on Linux.

PostgreSQL Support => enabled
PostgreSQL(libpq) Version => 8.3.5
Multibyte character support => enabled
SSL support => enabled
Active Persistent Links => 0
Active Links => 0

 [2009-01-13 18:36 UTC] iliaa@php.net
What version of PostgreSQL library & server are you using?
 [2009-01-14 06:33 UTC] ml-php dot net at bettercom dot de
postgres-8.3.5 is the version I'm using here (server & libs)
 [2009-01-16 11:30 UTC] jani@php.net
Compile PHP using --enable-debug option and provide a new, useful backtrace.
 [2009-01-17 21:06 UTC] webs dot support at gmail dot com
(gdb) where
#0  0x0000000804d338e1 in php_pgsql_meta_data () from /usr/local/lib/php/20060613-debug/pgsql.so
#1  0x0000000804d344e9 in zif_pg_meta_data () from /usr/local/lib/php/20060613-debug/pgsql.so
#2  0x00000000005c7e29 in zend_do_fcall_common_helper_SPEC (execute_data=0x7fffffffcf50) at zend_vm_execute.h:200
#3  0x00000000005cea3f in ZEND_DO_FCALL_SPEC_CONST_HANDLER (execute_data=0x7fffffffcf50) at zend_vm_execute.h:1729
#4  0x00000000005c7864 in execute (op_array=0x929588) at zend_vm_execute.h:92
#5  0x000000000059b830 in zend_execute_scripts (type=8, retval=0x0, file_count=3) at /usr/ports/lang/php5/work/php-5.2.8/Zend/zend.c:1134
#6  0x000000000053aecb in php_execute_script (primary_file=0x7fffffffe890) at /usr/ports/lang/php5/work/php-5.2.8/main/main.c:2023
#7  0x0000000000629957 in main (argc=2, argv=0x7fffffffea10) at /usr/ports/lang/php5/work/php-5.2.8/sapi/cli/php_cli.c:1133
 [2009-01-17 21:59 UTC] igulyaev at gmail dot com
part of pgsql.c

        src = estrdup(table_name);
        tmp_name = php_strtok_r(src, ".", &tmp_name2);

        if (!*tmp_name2) {
                /* Default schema */
                tmp_name2 = tmp_name;
                tmp_name = "public";
        }

in condition tmp_name2 is NULL if table_name without scheme name
 [2009-01-17 22:56 UTC] felipe@php.net
It works fine for me, see:


teste=# SELECT table_schema, table_name FROM information_schema.tables WHERE table_schema = 'public';
 table_schema | table_name 
--------------+------------
 public       | id

var_dump(pg_meta_data($x, 'id'));

array(1) {
  ["id"]=>
  array(6) {
    ["num"]=>
    int(1)
    ["type"]=>
    string(4) "int4"
    ["len"]=>
    int(4)
    ["not null"]=>
    bool(false)
    ["has default"]=>
    bool(false)
    ["array dims"]=>
    int(0)
  }
}

 [2009-01-18 20:23 UTC] webs dot support at gmail dot com
Felipe, check your code for the operating system FreeBSD 7.0 and you catch a bug.
 [2009-01-18 23:52 UTC] felipe@php.net
This bug has been fixed in CVS.

Snapshots of the sources are packaged every three hours; this change
will be in the next snapshot. You can grab the snapshot at
http://snaps.php.net/.
 
Thank you for the report, and for helping us make PHP better.

Thanks gentlemen.
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Sun Dec 22 06:01:30 2024 UTC