summaryrefslogtreecommitdiff
path: root/ext/pgsql
diff options
context:
space:
mode:
Diffstat (limited to 'ext/pgsql')
-rw-r--r--ext/pgsql/pgsql.c2
-rw-r--r--ext/pgsql/tests/bug77047.phpt40
2 files changed, 41 insertions, 1 deletions
diff --git a/ext/pgsql/pgsql.c b/ext/pgsql/pgsql.c
index 4388f6187d..66b4a15290 100644
--- a/ext/pgsql/pgsql.c
+++ b/ext/pgsql/pgsql.c
@@ -6267,7 +6267,7 @@ PHP_PGSQL_API int php_pgsql_convert(PGconn *pg_link, const char *table_name, con
ZVAL_STRINGL(&new_val, "NULL", sizeof("NULL")-1);
}
else {
-#define REGEX0 "^(([0-9]{1,2}:[0-9]{1,2}){1}(:[0-9]{1,2}){0,1})){0,1}$"
+#define REGEX0 "^(([0-9]{1,2}:[0-9]{1,2}){1}(:[0-9]{1,2}){0,1}){0,1}$"
/* FIXME: better regex must be used */
if (php_pgsql_convert_match(Z_STRVAL_P(val), Z_STRLEN_P(val), REGEX0, sizeof(REGEX0)-1, 1) == FAILURE) {
err = 1;
diff --git a/ext/pgsql/tests/bug77047.phpt b/ext/pgsql/tests/bug77047.phpt
new file mode 100644
index 0000000000..2cbc4c3dda
--- /dev/null
+++ b/ext/pgsql/tests/bug77047.phpt
@@ -0,0 +1,40 @@
+--TEST--
+Bug #77047 pg_insert has a broken regex for the 'TIME WITHOUT TIMEZONE' data type
+--SKIPIF--
+<?php
+include("skipif.inc");
+?>
+--FILE--
+<?php
+error_reporting(E_ALL);
+
+include 'config.inc';
+
+$db = pg_connect($conn_str);
+
+pg_query($db, "DROP TABLE IF EXISTS bug77047");
+pg_query($db, "CREATE TABLE bug77047 (
+ t TIME WITHOUT TIME ZONE
+ )");
+
+pg_insert($db, "bug77047", array("t" => "13:31"));
+pg_insert($db, "bug77047", array("t" => "13:31:13"));
+pg_insert($db, "bug77047", array("t" => "1:2:3"));
+pg_insert($db, "bug77047", array("t" => "xyz"));
+pg_insert($db, "bug77047", array("t" => NULL));
+pg_insert($db, "bug77047", array("t" => ""));
+
+$res = pg_query($db, "SELECT t FROM bug77047");
+while (false !== ($row = pg_fetch_row($res))) {
+ var_dump(array_pop($row));
+}
+
+?>
+--EXPECTF--
+Notice: pg_insert(): Expects NULL or string for PostgreSQL time field (t) in %s on line %d
+string(8) "13:31:00"
+string(8) "13:31:13"
+string(8) "01:02:03"
+NULL
+NULL
+