cvs: php-src(PHP_4_3) / NEWS /ext/pgsql pgsql.c
| From: | Ilia Alshanetsky | Date: | Thu, 18 Mar 2004 01:35:51 +0000 |
| Subject: | cvs: php-src(PHP_4_3) / NEWS /ext/pgsql pgsql.c | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-26700@lists.php.net to get a copy of this message | ||
iliaa Wed Mar 17 20:35:51 2004 EDT
Modified files: (Branch: PHP_4_3)
/php-src NEWS
/php-src/ext/pgsql pgsql.c
Log:
MFH: Fixed bug #27300 (Improved regex for pg_convert()).
http://cvs.php.net/diff.php/php-src/NEWS?r1=1.1247.2.603&r2=1.1247.2.604&ty=u
Index: php-src/NEWS
diff -u php-src/NEWS:1.1247.2.603 php-src/NEWS:1.1247.2.604
--- php-src/NEWS:1.1247.2.603 Wed Mar 17 12:26:13 2004
+++ php-src/NEWS Wed Mar 17 20:35:49 2004
@@ -38,6 +38,8 @@
- Fixed bug #27337 (missing sapi_shutdown() in sapi/isapi causes memory leak).
(Jani, msisolak at yahoo dot com)
- Fixed bug #27328 (ftp extension relies on 32-bit longs). (Sara)
+- Fixed bug #27300 (Improved regex for pg_convert()).
+ (benjcarson at digitaljunkies dot ca, Ilia)
- Fixed bug #27295 (memory leak inside sscanf()). (Ilia)
- Fixed bug #27293 (two crashes inside image2wbmp()). (Ilia)
- Fixed bug #27291 (get_browser matches browscap.ini patterns incorrectly).
http://cvs.php.net/diff.php/php-src/ext/pgsql/pgsql.c?r1=1.244.2.33&r2=1.244.2.34&ty=u
Index: php-src/ext/pgsql/pgsql.c
diff -u php-src/ext/pgsql/pgsql.c:1.244.2.33 php-src/ext/pgsql/pgsql.c:1.244.2.34
--- php-src/ext/pgsql/pgsql.c:1.244.2.33 Wed Jan 28 21:55:33 2004
+++ php-src/ext/pgsql/pgsql.c Wed Mar 17 20:35:50 2004
@@ -19,7 +19,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: pgsql.c,v 1.244.2.33 2004/01/29 02:55:33 iliaa Exp $ */
+/* $Id: pgsql.c,v 1.244.2.34 2004/03/18 01:35:50 iliaa Exp $ */
#include <stdlib.h>
@@ -3853,16 +3853,63 @@
ZVAL_STRING(new_val, "NULL", 1);
}
else {
- /* FIXME: better regex must be used */
- if (php_pgsql_convert_match(Z_STRVAL_PP(val), "^[+-]{0,1}[
\\t]+((second|seconds|minute|minute|hour|hour|day|days|week|weeks|month|monthes|year|years|decade|decades|century|centuries|millennium|millenniums){1,1}[
\\t]+)+([ \\t]+ago){0,1}$", 1 TSRMLS_CC) == FAILURE &&
- php_pgsql_convert_match(Z_STRVAL_PP(val), "^@[ \\t]+[+-]{0,1}[
\\t]+(second|seconds|minute|minute|hour|hour|day|days|week|weeks|month|monthes|year|years|decade|decades|century|centuries|millennium|millenniums){1,1}[
\\t]+)+([ \\t]+ago$", 1 TSRMLS_CC) == FAILURE) {
+
+ /* From the Postgres docs:
+
+ interval values can be written with the following syntax:
+ [@] quantity unit [quantity unit...] [direction]
+
+ Where: quantity is a number (possibly signed); unit is second, minute, hour,
+ day, week, month, year, decade, century, millennium, or abbreviations or
+ plurals of these units [note not *all* abbreviations] ; direction can be
+ ago or empty. The at sign (@) is optional noise.
+
+ ...
+
+ Quantities of days, hours, minutes, and seconds can be specified without explicit
+ unit markings. For example, '1 12:59:10' is read the same as '1 day 12
hours 59 min 10
+ sec'.
+ */
+ if (php_pgsql_convert_match(Z_STRVAL_PP(val),
+ "^(@?[ \\t]+)?("
+
+ /* Textual time units and their abbreviations: */
+ "(([-+]?[ \\t]+)?"
+ "[0-9]+(\\.[0-9]*)?[ \\t]*"
+ "(millenniums|millennia|millennium|mil|mils|"
+ "centuries|century|cent|c|"
+ "decades|decade|dec|decs|"
+ "years|year|y|"
+ "months|month|mon|"
+ "weeks|week|w|"
+ "days|day|d|"
+ "hours|hour|hr|hrs|h|"
+ "minutes|minute|mins|min|m|"
+ "seconds|second|secs|sec|s))+|"
+
+ /* Textual time units plus (dd)* hh[:mm[:ss]] */
+ "((([-+]?[ \\t]+)?"
+ "[0-9]+(\\.[0-9]*)?[ \\t]*"
+ "(millenniums|millennia|millennium|mil|mils|"
+ "centuries|century|cent|c|"
+ "decades|decade|dec|decs|"
+ "years|year|y|"
+ "months|month|mon|"
+ "weeks|week|w|"
+ "days|day|d))+"
+ "([-+]?[ \\t]+"
+ "([0-9]+[ \\t]+)+" /* dd */
+ "(([0-9]{1,2}:){0,2}[0-9]{0,2})" /* hh:[mm:[ss]] */
+ ")?))"
+ "([ \\t]+ago)?$",
+ 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);
}
- }
+ }
break;
case IS_NULL: