iliaa           Fri Dec 16 22:36:49 2005 EDT

  Added files:                 (Branch: PHP_5_1)
    /php-src/ext/date/tests     bug35705.phpt 

  Modified files:              
    /php-src    NEWS 
    /php-src/ext/date/lib       parse_date.c parse_date.re 
  Log:
  Fixed bug #35705 (strtotime() fails to parse soap date format without TZ).
  
  
http://cvs.php.net/viewcvs.cgi/php-src/NEWS?r1=1.2027.2.296&r2=1.2027.2.297&diff_format=u
Index: php-src/NEWS
diff -u php-src/NEWS:1.2027.2.296 php-src/NEWS:1.2027.2.297
--- php-src/NEWS:1.2027.2.296   Fri Dec 16 20:09:16 2005
+++ php-src/NEWS        Fri Dec 16 22:36:41 2005
@@ -28,6 +28,8 @@
   connecting to 5.x server. (Andrey)
 - Fixed bug #35713 (getopt() returns array with numeric strings when passed 
   options like '-1'). (Tony)
+- Fixed bug #35705 (strtotime() fails to parse soap date format without TZ).
+  (Ilia)
 - Fixed bug #35694 (Improved error message for invalid fetch mode). (Ilia)
 - Fixed bug #35692 (iconv_mime_decode() segmentation fault; with libiconv 
   only). (Tony)
http://cvs.php.net/viewcvs.cgi/php-src/ext/date/lib/parse_date.c?r1=1.29.2.18&r2=1.29.2.19&diff_format=u
Index: php-src/ext/date/lib/parse_date.c
diff -u php-src/ext/date/lib/parse_date.c:1.29.2.18 
php-src/ext/date/lib/parse_date.c:1.29.2.19
--- php-src/ext/date/lib/parse_date.c:1.29.2.18 Tue Dec 13 02:28:34 2005
+++ php-src/ext/date/lib/parse_date.c   Fri Dec 16 22:36:41 2005
@@ -1,4 +1,4 @@
-/* Generated by re2c 0.9.11.rc1 on Mon Dec 12 21:23:34 2005 */
+/* Generated by re2c 0.9.11.rc1 on Fri Dec 16 17:30:27 2005 */
 #line 1 "ext/date/lib/parse_date.re"
 /*
    +----------------------------------------------------------------------+
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: parse_date.c,v 1.29.2.18 2005/12/13 02:28:34 iliaa Exp $ */
+/* $Id: parse_date.c,v 1.29.2.19 2005/12/16 22:36:41 iliaa Exp $ */
 
 #include "timelib.h"
 
@@ -850,7 +850,7 @@
 yy3:
        YYDEBUG(3, *YYCURSOR);
 
-#line 1321 "ext/date/lib/parse_date.re"
+#line 1323 "ext/date/lib/parse_date.re"
 {
                int tz_not_found;
                DEBUG_OUTPUT("tzcorrection | tz");
@@ -978,7 +978,7 @@
 yy8:
        YYDEBUG(8, *YYCURSOR);
 
-#line 1387 "ext/date/lib/parse_date.re"
+#line 1389 "ext/date/lib/parse_date.re"
 {
 /*             printf("unexpected character: #%d, %c ", *s->tok, *s->tok); */
                s->errors++;
@@ -2023,7 +2023,7 @@
 yy45:
        YYDEBUG(45, *YYCURSOR);
 
-#line 1376 "ext/date/lib/parse_date.re"
+#line 1378 "ext/date/lib/parse_date.re"
 {
                goto std;
        }
@@ -2039,7 +2039,7 @@
 yy48:
        YYDEBUG(48, *YYCURSOR);
 
-#line 1381 "ext/date/lib/parse_date.re"
+#line 1383 "ext/date/lib/parse_date.re"
 {
                s->pos = cursor; s->line++;
                goto std;
@@ -2252,7 +2252,7 @@
 yy68:
        YYDEBUG(68, *YYCURSOR);
 
-#line 1360 "ext/date/lib/parse_date.re"
+#line 1362 "ext/date/lib/parse_date.re"
 {
                timelib_ull i;
                DEBUG_OUTPUT("relative");
@@ -3244,7 +3244,7 @@
 yy173:
        YYDEBUG(173, *YYCURSOR);
 
-#line 1304 "ext/date/lib/parse_date.re"
+#line 1306 "ext/date/lib/parse_date.re"
 {
                timelib_sll i;
                int         behavior;
@@ -5022,7 +5022,7 @@
 yy342:
        YYDEBUG(342, *YYCURSOR);
 
-#line 1288 "ext/date/lib/parse_date.re"
+#line 1290 "ext/date/lib/parse_date.re"
 {
                const timelib_relunit* relunit;
                DEBUG_OUTPUT("daytext");
@@ -6306,7 +6306,7 @@
 yy432:
        YYDEBUG(432, *YYCURSOR);
 
-#line 1332 "ext/date/lib/parse_date.re"
+#line 1334 "ext/date/lib/parse_date.re"
 {
                int tz_not_found;
                DEBUG_OUTPUT("dateshortwithtimeshort | dateshortwithtimelong | 
dateshortwithtimelongtz");
@@ -7164,7 +7164,7 @@
 yy495:
        YYDEBUG(495, *YYCURSOR);
 
-#line 1219 "ext/date/lib/parse_date.re"
+#line 1221 "ext/date/lib/parse_date.re"
 {
                DEBUG_OUTPUT("pgtextshort");
                TIMELIB_INIT;
@@ -9028,7 +9028,7 @@
 yy597:
        YYDEBUG(597, *YYCURSOR);
 
-#line 1273 "ext/date/lib/parse_date.re"
+#line 1275 "ext/date/lib/parse_date.re"
 {
                DEBUG_OUTPUT("ago");
                TIMELIB_INIT;
@@ -13432,7 +13432,7 @@
 yy903:
        YYDEBUG(903, *YYCURSOR);
 
-#line 1245 "ext/date/lib/parse_date.re"
+#line 1247 "ext/date/lib/parse_date.re"
 {
                int tz_not_found;
                DEBUG_OUTPUT("clf");
@@ -13850,7 +13850,7 @@
 yy956:
        YYDEBUG(956, *YYCURSOR);
 
-#line 1232 "ext/date/lib/parse_date.re"
+#line 1234 "ext/date/lib/parse_date.re"
 {
                DEBUG_OUTPUT("pgtextreverse");
                TIMELIB_INIT;
@@ -13995,7 +13995,7 @@
 yy968:
        YYDEBUG(968, *YYCURSOR);
 
-#line 1264 "ext/date/lib/parse_date.re"
+#line 1266 "ext/date/lib/parse_date.re"
 {
                DEBUG_OUTPUT("year4");
                TIMELIB_INIT;
@@ -14360,7 +14360,7 @@
 yy997:
        YYDEBUG(997, *YYCURSOR);
 
-#line 1200 "ext/date/lib/parse_date.re"
+#line 1202 "ext/date/lib/parse_date.re"
 {
                timelib_sll w, d;
                DEBUG_OUTPUT("isoweek");
@@ -14386,7 +14386,7 @@
 yy999:
        YYDEBUG(999, *YYCURSOR);
 
-#line 1181 "ext/date/lib/parse_date.re"
+#line 1183 "ext/date/lib/parse_date.re"
 {
                timelib_sll w, d;
                DEBUG_OUTPUT("isoweekday");
@@ -14473,7 +14473,7 @@
 yy1003:
        YYDEBUG(1003, *YYCURSOR);
 
-#line 1168 "ext/date/lib/parse_date.re"
+#line 1170 "ext/date/lib/parse_date.re"
 {
                DEBUG_OUTPUT("pgydotd");
                TIMELIB_INIT;
@@ -14715,13 +14715,15 @@
                s->time->s = timelib_get_nr((char **) &ptr, 2);
                if (*ptr == '.') {
                        s->time->f = timelib_get_frac_nr((char **) &ptr, 9);
-                       s->time->z = timelib_get_zone((char **) &ptr, 
&s->time->dst, s->time, &tz_not_found, s->tzdb);
-                       s->errors += tz_not_found;
+                       if (*ptr) { /* timezone is optional */
+                               s->time->z = timelib_get_zone((char **) &ptr, 
&s->time->dst, s->time, &tz_not_found, s->tzdb);
+                               s->errors += tz_not_found;
+                       }
                }
                TIMELIB_DEINIT;
                return TIMELIB_XMLRPC_SOAP;
        }
-#line 12653 "ext/date/lib/parse_date.c"
+#line 12655 "ext/date/lib/parse_date.c"
 yy1022:
        YYDEBUG(1022, *YYCURSOR);
        yych = *++YYCURSOR;
@@ -15356,7 +15358,7 @@
                TIMELIB_DEINIT;
                return TIMELIB_ISO_DATE;
        }
-#line 13106 "ext/date/lib/parse_date.c"
+#line 13108 "ext/date/lib/parse_date.c"
 yy1113:
        YYDEBUG(1113, *YYCURSOR);
        yyaccept = 19;
@@ -15895,20 +15897,21 @@
        goto yy1161;
 yy1161:
        YYDEBUG(1161, *YYCURSOR);
-       ++YYCURSOR;
+       yyaccept = 20;
+       YYMARKER = ++YYCURSOR;
        if((YYLIMIT - YYCURSOR) < 6) YYFILL(6);
        yych = *YYCURSOR;
        goto yy1162;
 yy1162:
        YYDEBUG(1162, *YYCURSOR);
        if(yych <= ','){
-               if(yych != '+') goto yy52;
+               if(yych != '+') goto yy1021;
                goto yy1163;
        } else {
                if(yych <= '-') goto yy1163;
-               if(yych <= '/') goto yy52;
+               if(yych <= '/') goto yy1021;
                if(yych <= '9') goto yy1161;
-               goto yy52;
+               goto yy1021;
        }
 yy1163:
        YYDEBUG(1163, *YYCURSOR);
@@ -16469,7 +16472,7 @@
                TIMELIB_DEINIT;
                return TIMELIB_GNU_NOCOLON;
        }
-#line 14031 "ext/date/lib/parse_date.c"
+#line 14034 "ext/date/lib/parse_date.c"
 yy1206:
        YYDEBUG(1206, *YYCURSOR);
        yych = *++YYCURSOR;
@@ -16583,7 +16586,7 @@
                TIMELIB_DEINIT;
                return TIMELIB_ISO_NOCOLON;
        }
-#line 14129 "ext/date/lib/parse_date.c"
+#line 14132 "ext/date/lib/parse_date.c"
 yy1214:
        YYDEBUG(1214, *YYCURSOR);
        yyaccept = 22;
@@ -16961,7 +16964,7 @@
                TIMELIB_DEINIT;
                return TIMELIB_RELATIVE;
        }
-#line 14451 "ext/date/lib/parse_date.c"
+#line 14454 "ext/date/lib/parse_date.c"
 yy1239:
        YYDEBUG(1239, *YYCURSOR);
        yych = *++YYCURSOR;
@@ -17054,7 +17057,7 @@
                TIMELIB_DEINIT;
                return TIMELIB_RELATIVE;
        }
-#line 14526 "ext/date/lib/parse_date.c"
+#line 14529 "ext/date/lib/parse_date.c"
 yy1248:
        YYDEBUG(1248, *YYCURSOR);
        yych = *++YYCURSOR;
@@ -17077,7 +17080,7 @@
                TIMELIB_DEINIT;
                return TIMELIB_RELATIVE;
        }
-#line 14543 "ext/date/lib/parse_date.c"
+#line 14546 "ext/date/lib/parse_date.c"
 yy1251:
        YYDEBUG(1251, *YYCURSOR);
        yych = *++YYCURSOR;
@@ -17180,7 +17183,7 @@
                TIMELIB_DEINIT;
                return TIMELIB_RELATIVE;
        }
-#line 14628 "ext/date/lib/parse_date.c"
+#line 14631 "ext/date/lib/parse_date.c"
 yy1260:
        YYDEBUG(1260, *YYCURSOR);
        yych = *++YYCURSOR;
@@ -17217,7 +17220,7 @@
                TIMELIB_DEINIT;
                return TIMELIB_RELATIVE;
        }
-#line 14659 "ext/date/lib/parse_date.c"
+#line 14662 "ext/date/lib/parse_date.c"
 yy1263:
        YYDEBUG(1263, *YYCURSOR);
        yych = *++YYCURSOR;
@@ -17297,10 +17300,10 @@
                TIMELIB_DEINIT;
                return TIMELIB_RELATIVE;
        }
-#line 14721 "ext/date/lib/parse_date.c"
+#line 14724 "ext/date/lib/parse_date.c"
 }
 }
-#line 1392 "ext/date/lib/parse_date.re"
+#line 1394 "ext/date/lib/parse_date.re"
 
 }
 
http://cvs.php.net/viewcvs.cgi/php-src/ext/date/lib/parse_date.re?r1=1.26.2.15&r2=1.26.2.16&diff_format=u
Index: php-src/ext/date/lib/parse_date.re
diff -u php-src/ext/date/lib/parse_date.re:1.26.2.15 
php-src/ext/date/lib/parse_date.re:1.26.2.16
--- php-src/ext/date/lib/parse_date.re:1.26.2.15        Tue Dec 13 02:28:37 2005
+++ php-src/ext/date/lib/parse_date.re  Fri Dec 16 22:36:46 2005
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: parse_date.re,v 1.26.2.15 2005/12/13 02:28:37 iliaa Exp $ */
+/* $Id: parse_date.re,v 1.26.2.16 2005/12/16 22:36:46 iliaa Exp $ */
 
 #include "timelib.h"
 
@@ -794,7 +794,7 @@
 datenocolon      = year4 monthlz daylz;
 
 /* Special formats */
-soap             = year4 "-" monthlz "-" daylz "T" hour24lz ":" minutelz ":" 
secondlz frac tzcorrection;
+soap             = year4 "-" monthlz "-" daylz "T" hour24lz ":" minutelz ":" 
secondlz frac tzcorrection?;
 xmlrpc           = year4 monthlz daylz "T" hour24 ":" minutelz ":" secondlz;
 xmlrpcnocolon    = year4 monthlz daylz 't' hour24 minutelz secondlz;
 wddx             = year4 "-" monthlz "-" daylz "T" hour24 ":" minutelz ":" 
secondlz;
@@ -1157,8 +1157,10 @@
                s->time->s = timelib_get_nr((char **) &ptr, 2);
                if (*ptr == '.') {
                        s->time->f = timelib_get_frac_nr((char **) &ptr, 9);
-                       s->time->z = timelib_get_zone((char **) &ptr, 
&s->time->dst, s->time, &tz_not_found, s->tzdb);
-                       s->errors += tz_not_found;
+                       if (*ptr) { /* timezone is optional */
+                               s->time->z = timelib_get_zone((char **) &ptr, 
&s->time->dst, s->time, &tz_not_found, s->tzdb);
+                               s->errors += tz_not_found;
+                       }
                }
                TIMELIB_DEINIT;
                return TIMELIB_XMLRPC_SOAP;

http://cvs.php.net/viewcvs.cgi/php-src/ext/date/tests/bug35705.phpt?view=markup&rev=1.1
Index: php-src/ext/date/tests/bug35705.phpt
+++ php-src/ext/date/tests/bug35705.phpt

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to