summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRemi Collet <remi@php.net>2015-05-20 08:08:41 +0200
committerRemi Collet <remi@php.net>2015-05-20 08:08:41 +0200
commit2cc4e69cc6d8dbc4b3568ad3dd583324a7c11d64 (patch)
treede81a30d5e522eab337519c5ab989b1fa015b42d
parent58e5e006e540dbec3f4c17cbd8f640e5f03a38d6 (diff)
downloadphp-git-2cc4e69cc6d8dbc4b3568ad3dd583324a7c11d64.tar.gz
Fixed Bug #69667 segfault in php_pgsql_meta_data
Incomplete fix for #68741
-rw-r--r--ext/pgsql/pg_insert_002.phpt27
-rw-r--r--ext/pgsql/pgsql.c9
2 files changed, 34 insertions, 2 deletions
diff --git a/ext/pgsql/pg_insert_002.phpt b/ext/pgsql/pg_insert_002.phpt
new file mode 100644
index 0000000000..1393f5f330
--- /dev/null
+++ b/ext/pgsql/pg_insert_002.phpt
@@ -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
diff --git a/ext/pgsql/pgsql.c b/ext/pgsql/pgsql.c
index 23d55cb184..5418b3c211 100644
--- a/ext/pgsql/pgsql.c
+++ b/ext/pgsql/pgsql.c
@@ -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" */