]> granicus.if.org Git - php/commitdiff
Fixed Bug #69667 segfault in php_pgsql_meta_data
authorRemi Collet <remi@php.net>
Wed, 20 May 2015 06:08:41 +0000 (08:08 +0200)
committerRemi Collet <remi@php.net>
Wed, 20 May 2015 06:08:41 +0000 (08:08 +0200)
Incomplete fix for #68741

ext/pgsql/pg_insert_002.phpt [new file with mode: 0644]
ext/pgsql/pgsql.c

diff --git a/ext/pgsql/pg_insert_002.phpt b/ext/pgsql/pg_insert_002.phpt
new file mode 100644 (file)
index 0000000..1393f5f
--- /dev/null
@@ -0,0 +1,27 @@
+--TEST--
+PostgreSQL pg_select() - basic test using schema
+--SKIPIF--
+<?php include("skipif.inc"); ?>
+--FILE--
+<?php
+
+include('config.inc');
+
+$conn = pg_connect($conn_str);
+
+foreach (array('', '.', '..') as $table) {
+       var_dump(pg_insert($conn, '',  array('id' => 1, 'id2' => 1)));
+}
+?>
+Done
+--EXPECTF--
+
+Warning: pg_insert(): The table name must be specified in %s on line %d
+bool(false)
+
+Warning: pg_insert(): The table name must be specified in %s on line %d
+bool(false)
+
+Warning: pg_insert(): The table name must be specified in %s on line %d
+bool(false)
+Done
\ No newline at end of file
index 23d55cb184c8e16aff76ed35bfbadd76228f1c7e..5418b3c211d193ec9b80d31d768f90f8f6688693 100644 (file)
@@ -5120,7 +5120,11 @@ PHP_PGSQL_API int php_pgsql_meta_data(PGconn *pg_link, const char *table_name, z
 
        src = estrdup(table_name);
        tmp_name = php_strtok_r(src, ".", &tmp_name2);
-       
+       if (!tmp_name) {
+               efree(src);
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "The table name must be specified");
+               return FAILURE;
+       }
        if (!tmp_name2 || !*tmp_name2) {
                /* Default schema */
                tmp_name2 = tmp_name;
@@ -6130,7 +6134,8 @@ static int do_exec(smart_str *querystr, int expect, PGconn *pg_link, ulong opt T
 
 static inline void build_tablename(smart_str *querystr, PGconn *pg_link, const char *table)
 {
-       char *table_copy, *escaped, *token, *tmp;
+       char *table_copy, *escaped, *tmp;
+       const char *token;
        size_t len;
 
        /* schame.table should be "schame"."table" */