summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnatol Belski <ab@php.net>2018-11-18 11:52:33 +0100
committerAnatol Belski <ab@php.net>2018-11-18 11:52:33 +0100
commit8b05bbdd0acbde83d6d2e5019d4c73141300c173 (patch)
tree6b3463f5beee3d27a1afaf8cb5a16ad0aef5ddfa
parent819f85789488601dbf6943ec690f6572160a049f (diff)
parent282a63dace099b03bb97fa2be8e8e9a48b4d69db (diff)
downloadphp-git-8b05bbdd0acbde83d6d2e5019d4c73141300c173.tar.gz
Merge branch 'PHP-7.3'
* PHP-7.3: Add test for bug #77047 FIX #77047: fixes regex for "time" data type
-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
+