diff --git a/ext/pgsql/pgsql.c b/ext/pgsql/pgsql.c index 6da01d448b0..94100788126 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 00000000000..2cbc4c3ddaf --- /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-- + +--FILE-- + "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 +