From 7667f8efc6ee9727cbd7af26e5f62f9cebd8a25e Mon Sep 17 00:00:00 2001 From: Xinchen Hui Date: Sat, 14 Feb 2015 22:14:31 +0800 Subject: [PATCH] Fixed bug #68638 (pg_update() fails to store infinite values) --- NEWS | 4 ++++ ext/pgsql/pgsql.c | 15 +++++++-------- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/NEWS b/NEWS index 30302e64f7..a0ffd3e08c 100644 --- a/NEWS +++ b/NEWS @@ -14,6 +14,10 @@ PHP NEWS . Fix bug #61285, #68329, #68046, #41631: encrypted streams don't observe socket timeouts (Brad Broerman) +- pgsql: + . Fixed bug #68638 (pg_update() fails to store infinite values). + (william dot welter at 4linux dot com dot br, Laruence) + - CGI: . Fixed bug #69015 (php-cgi's getopt does not see $argv). (Laruence) diff --git a/ext/pgsql/pgsql.c b/ext/pgsql/pgsql.c index 68459f1376..2f12fd1829 100644 --- a/ext/pgsql/pgsql.c +++ b/ext/pgsql/pgsql.c @@ -5357,9 +5357,6 @@ static int php_pgsql_convert_match(const char *str, size_t str_len, const char * regerr = regexec(&re, str, re.re_nsub+1, subs, 0); if (regerr == REG_NOMATCH) { -#ifdef PHP_DEBUG - php_error_docref(NULL TSRMLS_CC, E_NOTICE, "'%s' does not match with '%s'", str, regex); -#endif ret = FAILURE; } else if (regerr) { @@ -5607,14 +5604,16 @@ 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_PP(val), Z_STRLEN_PP(val), "^([+-]{0,1}[0-9]+)|([+-]{0,1}[0-9]*[\\.][0-9]+)|([+-]{0,1}[0-9]+[\\.][0-9]*)|([+-]{0,1}(inf)(inity){0,1})$", 1 TSRMLS_CC) == FAILURE) { - err = 1; + if (php_pgsql_convert_match(Z_STRVAL_PP(val), Z_STRLEN_PP(val), "^([+-]{0,1}[0-9]+)|([+-]{0,1}[0-9]*[\\.][0-9]+)|([+-]{0,1}[0-9]+[\\.][0-9]*)$", 0 TSRMLS_CC) == FAILURE) { + if (php_pgsql_convert_match(Z_STRVAL_PP(val), Z_STRLEN_PP(val), "^[+-]{0,1}(inf)(inity){0,1}$", 1 TSRMLS_CC) == FAILURE) { + err = 1; + } else { + ZVAL_STRING(new_val, Z_STRVAL_PP(val), 1); + php_pgsql_add_quotes(new_val, 1 TSRMLS_CC); + } } else { ZVAL_STRING(new_val, Z_STRVAL_PP(val), 1); - if(strcasestr(Z_STRVAL_PP(val),"inf")!=0){ - php_pgsql_add_quotes(new_val, 1 TSRMLS_CC); - } } } break; -- 2.40.0