iliaa Wed Mar 17 20:34:59 2004 EDT
Modified files:
/php-src/ext/pgsql pgsql.c
Log:
Fixed bug #27300 (Improved regex for pg_convert()).
# Patch by benjcarson at digitaljunkies dot ca
http://cvs.php.net/diff.php/php-src/ext/pgsql/pgsql.c?r1=1.308&r2=1.309&ty=u
Index: php-src/ext/pgsql/pgsql.c
diff -u php-src/ext/pgsql/pgsql.c:1.308 php-src/ext/pgsql/pgsql.c:1.309
--- php-src/ext/pgsql/pgsql.c:1.308 Mon Mar 15 15:16:52 2004
+++ php-src/ext/pgsql/pgsql.c Wed Mar 17 20:34:58 2004
@@ -19,7 +19,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: pgsql.c,v 1.308 2004/03/15 20:16:52 helly Exp $ */
+/* $Id: pgsql.c,v 1.309 2004/03/18 01:34:58 iliaa Exp $ */
#include <stdlib.h>
@@ -3998,16 +3998,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), "[EMAIL PROTECTED] \\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:
+ [EMAIL PROTECTED] 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:-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
