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
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: ml-php dot net at bettercom dot de
New email:
PHP Version: OS:

 

 [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: Thu Nov 21 14:01:29 2024 UTC