diff options
Diffstat (limited to 'ext/pgsql')
| -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 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 + |
