From d263616525450026bc36b263d2777fd092cf432b Mon Sep 17 00:00:00 2001 From: Anatol Belski Date: Fri, 15 Apr 2016 13:38:49 +0200 Subject: [PATCH] Fixed #71062 pg_convert() doesn't accept ISO 8601 for datatype timestamp --- ext/pgsql/pgsql.c | 2 +- ext/pgsql/tests/bug71062.phpt | 39 +++++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 ext/pgsql/tests/bug71062.phpt diff --git a/ext/pgsql/pgsql.c b/ext/pgsql/pgsql.c index 21321e4a95..84a443e1b0 100644 --- a/ext/pgsql/pgsql.c +++ b/ext/pgsql/pgsql.c @@ -6183,7 +6183,7 @@ PHP_PGSQL_API int php_pgsql_convert(PGconn *pg_link, const char *table_name, con ZVAL_STRINGL(&new_val, "NOW()", sizeof("NOW()")-1); } else { /* better regex? */ - if (php_pgsql_convert_match(Z_STRVAL_P(val), Z_STRLEN_P(val), "^([0-9]{4}[/-][0-9]{1,2}[/-][0-9]{1,2})([ \\t]+(([0-9]{1,2}:[0-9]{1,2}){1}(:[0-9]{1,2}){0,1}(\\.[0-9]+){0,1}([ \\t]*([+-][0-9]{1,4}(:[0-9]{1,2}){0,1}|[-a-zA-Z_/+]{1,50})){0,1})){0,1}$", 1) == FAILURE) { + if (php_pgsql_convert_match(Z_STRVAL_P(val), Z_STRLEN_P(val), "^([0-9]{4}[/-][0-9]{1,2}[/-][0-9]{1,2})(([ \\t]+|T)(([0-9]{1,2}:[0-9]{1,2}){1}(:[0-9]{1,2}){0,1}(\\.[0-9]+){0,1}([ \\t]*([+-][0-9]{1,4}(:[0-9]{1,2}){0,1}|[-a-zA-Z_/+]{1,50})){0,1})){0,1}$", 1) == FAILURE) { err = 1; } else { ZVAL_STRING(&new_val, Z_STRVAL_P(val)); diff --git a/ext/pgsql/tests/bug71062.phpt b/ext/pgsql/tests/bug71062.phpt new file mode 100644 index 0000000000..56e350daad --- /dev/null +++ b/ext/pgsql/tests/bug71062.phpt @@ -0,0 +1,39 @@ +--TEST-- +Bug #71062 pg_convert() doesn't accept ISO 8601 for datatype timestamp +--SKIPIF-- + +--FILE-- +format(DateTime::ISO8601); + +// ISO 8601 with the 'T' removed +$modified_format = 'Y-m-d H:i:sO'; +$date_string_modified_iso8601 = date_create('8 Dec 2015 5:38')->format($modified_format); + +printf("trying format %s \n", DateTime::ISO8601); +pg_convert($db, $table, ['test_field' => $date_string_php_iso8601]); + +printf("trying format %s \n", $modified_format); +pg_convert($db, $table, ['test_field' => $date_string_modified_iso8601]); + +print "done\n"; + +pg_query($db, "DROP TABLE $table"); + +?> +==OK== +--EXPECT-- +trying format Y-m-d\TH:i:sO +trying format Y-m-d H:i:sO +done +==OK== -- 2.40.0