diff options
author | Anatol Belski <ab@php.net> | 2018-11-18 12:29:34 +0100 |
---|---|---|
committer | Anatol Belski <ab@php.net> | 2018-11-18 12:29:34 +0100 |
commit | 0434141ce93d5033e47c46c78a8849ac3bfa4311 (patch) | |
tree | 27e3b0ef62254fe6d154fe9c70f332c99785099a | |
parent | a56cdd0a824d439920548aaeae757cb2341bd4ec (diff) | |
download | php-git-0434141ce93d5033e47c46c78a8849ac3bfa4311.tar.gz |
Fixed bug #77047 pg_convert has a broken regex for the 'TIME WITHOUT TIMEZONE' data type
Backport 369c991d and 282a63da to 7.1, closes #3634
-rw-r--r-- | ext/pgsql/pgsql.c | 2 | ||||
-rw-r--r-- | ext/pgsql/tests/bug77047.phpt | 40 |
2 files changed, 41 insertions, 1 deletions
diff --git a/ext/pgsql/pgsql.c b/ext/pgsql/pgsql.c index 6da01d448b..9410078812 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 } else { /* FIXME: better regex must be used */ - if (php_pgsql_convert_match(Z_STRVAL_P(val), Z_STRLEN_P(val), "^(([0-9]{1,2}:[0-9]{1,2}){1}(:[0-9]{1,2}){0,1})){0,1}$", 1) == FAILURE) { + if (php_pgsql_convert_match(Z_STRVAL_P(val), Z_STRLEN_P(val), "^(([0-9]{1,2}:[0-9]{1,2}){1}(:[0-9]{1,2}){0,1}){0,1}$", 1) == FAILURE) { err = 1; } else { 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 + |