You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@apr.apache.org by ro...@apache.org on 2005/08/19 06:03:06 UTC

svn commit: r233425 - in /apr/apr-util/trunk: CHANGES misc/apr_date.c test/Makefile.in test/abts_tests.h test/testdaterfc.c test/testutil.h

Author: rooneg
Date: Thu Aug 18 21:03:03 2005
New Revision: 233425

URL: http://svn.apache.org/viewcvs?rev=233425&view=rev
Log:
Fix the parsing of several types of RFC style dates and add a new one.

* misc/apr_date.c
  (apr_date_parse_rfc): correct the gmt offset for two formats, tweak some
   comments, add a new date format, simplify gmtstr parsing.

* test/Makefile.in
  (testall_OBJECTS): add testdaterfc.lo.

* test/testdaterfc.c: new file.

* test/abts_tests.h
  (alltests): add testdaterfc.

* test/testutil.h
  (testdaterfc): new function prototype.

* CHANGES: document change.

Submitted By: Maxime Petazzoni <maxime.petazzoni bulix.org>
Tweaked By: Garrett Rooney

Added:
    apr/apr-util/trunk/test/testdaterfc.c
Modified:
    apr/apr-util/trunk/CHANGES
    apr/apr-util/trunk/misc/apr_date.c
    apr/apr-util/trunk/test/Makefile.in
    apr/apr-util/trunk/test/abts_tests.h
    apr/apr-util/trunk/test/testutil.h

Modified: apr/apr-util/trunk/CHANGES
URL: http://svn.apache.org/viewcvs/apr/apr-util/trunk/CHANGES?rev=233425&r1=233424&r2=233425&view=diff
==============================================================================
--- apr/apr-util/trunk/CHANGES (original)
+++ apr/apr-util/trunk/CHANGES Thu Aug 18 21:03:03 2005
@@ -1,3 +1,8 @@
+Changes with APR-util 1.2.2
+
+  *) Fix GMT offset for several date formats and add a new format.
+     [Maxime Petazzoni <maxime.petazzoni bulix.org>]
+
 Changes with APR-util 1.2.0
 
   *) Fix apr_rmm_realloc() offset calculation bug.  [Keith Kelleman

Modified: apr/apr-util/trunk/misc/apr_date.c
URL: http://svn.apache.org/viewcvs/apr/apr-util/trunk/misc/apr_date.c?rev=233425&r1=233424&r2=233425&view=diff
==============================================================================
--- apr/apr-util/trunk/misc/apr_date.c (original)
+++ apr/apr-util/trunk/misc/apr_date.c Thu Aug 18 21:03:03 2005
@@ -361,7 +361,7 @@
 
         monstr = date + 3;
         timstr = date + 12;
-        gmtstr = date + 20;
+        gmtstr = date + 21;
 
         TIMEPARSE_STD(ds, timstr);
     }
@@ -418,7 +418,9 @@
     }
     else if (apr_date_checkmask(date, "## @$$ ## ##:##:## *")) {
         /* This is the old RFC 1123 date format - many many years ago, people
-         * used two-digit years.  Oh, how foolish.  */
+         * used two-digit years.  Oh, how foolish.
+         *
+         * Two-digit day, two-digit year version. */
         ds.tm_year = ((date[7] - '0') * 10) + (date[8] - '0');
 
         if (ds.tm_year < 70)
@@ -432,9 +434,29 @@
 
         TIMEPARSE_STD(ds, timstr);
     } 
+    else if (apr_date_checkmask(date, " # @$$ ## ##:##:## *")) {
+        /* This is the old RFC 1123 date format - many many years ago, people
+         * used two-digit years.  Oh, how foolish.
+         *
+         * Space + one-digit day, two-digit year version.*/
+        ds.tm_year = ((date[7] - '0') * 10) + (date[8] - '0');
+
+        if (ds.tm_year < 70)
+            ds.tm_year += 100;
+
+        ds.tm_mday = (date[1] - '0');
+
+        monstr = date + 3;
+        timstr = date + 10;
+        gmtstr = date + 19;
+
+        TIMEPARSE_STD(ds, timstr);
+    } 
     else if (apr_date_checkmask(date, "# @$$ ## ##:##:## *")) {
         /* This is the old RFC 1123 date format - many many years ago, people
-         * used two-digit years.  Oh, how foolish.  */
+         * used two-digit years.  Oh, how foolish.
+         *
+         * One-digit day, two-digit year version. */
         ds.tm_year = ((date[6] - '0') * 10) + (date[7] - '0');
 
         if (ds.tm_year < 70)
@@ -521,7 +543,7 @@
 
         monstr = date + 3;
         timstr = date + 12;
-        gmtstr = date + 20;
+        gmtstr = date + 21;
 
         TIMEPARSE_STD(ds, timstr);
     }
@@ -583,22 +605,21 @@
      * If there is any confusion, tm_gmtoff will remain 0.
      */
     ds.tm_gmtoff = 0;
-    if (gmtstr && *gmtstr != '\0') {
-        /* Do we have a GMT? */
-        if (*(++gmtstr) != '\0') {
-            int offset;
-            switch (*(gmtstr++)) {
-            case '-':
-                offset = atoi(gmtstr);
-                ds.tm_gmtoff -= (offset / 100) * 60 * 60;
-                ds.tm_gmtoff -= (offset % 100) * 60;
-                break;
-            case '+':
-                offset = atoi(gmtstr);
-                ds.tm_gmtoff += (offset / 100) * 60 * 60;
-                ds.tm_gmtoff += (offset % 100) * 60;
-                break;
-            }
+
+    /* Do we have a timezone ? */
+    if (gmtstr) {
+        int offset;
+        switch (*gmtstr) {
+        case '-':
+            offset = atoi(gmtstr+1);
+            ds.tm_gmtoff -= (offset / 100) * 60 * 60;
+            ds.tm_gmtoff -= (offset % 100) * 60;
+            break;
+        case '+':
+            offset = atoi(gmtstr+1);
+            ds.tm_gmtoff += (offset / 100) * 60 * 60;
+            ds.tm_gmtoff += (offset % 100) * 60;
+            break;
         }
     }
 

Modified: apr/apr-util/trunk/test/Makefile.in
URL: http://svn.apache.org/viewcvs/apr/apr-util/trunk/test/Makefile.in?rev=233425&r1=233424&r2=233425&view=diff
==============================================================================
--- apr/apr-util/trunk/test/Makefile.in (original)
+++ apr/apr-util/trunk/test/Makefile.in Thu Aug 18 21:03:03 2005
@@ -74,7 +74,8 @@
 	$(LINK) $(APRUTIL_LDFLAGS) $(testxlate_OBJECTS) $(testxlate_LDADD) $(PROGRAM_DEPENDENCIES)
 
 testall_OBJECTS = teststrmatch.lo testuri.lo testuuid.lo abts.lo testutil.lo \
-	testbuckets.lo testpass.lo testmd4.lo testmd5.lo testldap.lo testdbd.lo
+	testbuckets.lo testpass.lo testmd4.lo testmd5.lo testldap.lo \
+	testdaterfc.lo testdbd.lo
 testall_LDADD =  $(TARGET_LIB_PATH)
 testall: $(testall_OBJECTS) $(testall_LDADD)
 	$(LINK) $(APRUTIL_LDFLAGS) $(testall_OBJECTS) $(testall_LDADD) $(PROGRAM_DEPENDENCIES)

Modified: apr/apr-util/trunk/test/abts_tests.h
URL: http://svn.apache.org/viewcvs/apr/apr-util/trunk/test/abts_tests.h?rev=233425&r1=233424&r2=233425&view=diff
==============================================================================
--- apr/apr-util/trunk/test/abts_tests.h (original)
+++ apr/apr-util/trunk/test/abts_tests.h Thu Aug 18 21:03:03 2005
@@ -31,7 +31,8 @@
     {testmd4},
     {testmd5},
     {testldap},
-    {testdbd}
+    {testdbd},
+    {testdaterfc}
 };
 
 #endif /* APR_TEST_INCLUDES */

Added: apr/apr-util/trunk/test/testdaterfc.c
URL: http://svn.apache.org/viewcvs/apr/apr-util/trunk/test/testdaterfc.c?rev=233425&view=auto
==============================================================================
--- apr/apr-util/trunk/test/testdaterfc.c (added)
+++ apr/apr-util/trunk/test/testdaterfc.c Thu Aug 18 21:03:03 2005
@@ -0,0 +1,61 @@
+/* Copyright 2000-2005 The Apache Software Foundation or its licensors, as
+ * applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "testutil.h"
+#include "apr_date.h"
+
+struct datetest {
+  const char *input;
+  const char *output;
+} tests[] = {
+  { "Mon, 27 Feb 1995 20:49:44 -0800",  "Tue, 28 Feb 1995 04:49:44 GMT" },
+  { "Fri,  1 Jul 2005 11:34:25 -0400",  "Fri, 01 Jul 2005 15:34:25 GMT" },
+  { "Monday, 27-Feb-95 20:49:44 -0800", "Tue, 28 Feb 1995 04:49:44 GMT" },
+  { "Tue, 4 Mar 1997 12:43:52 +0200",   "Tue, 04 Mar 1997 10:43:52 GMT" },
+  { "Mon, 27 Feb 95 20:49:44 -0800",    "Tue, 28 Feb 1995 04:49:44 GMT" },
+  { "Tue,  4 Mar 97 12:43:52 +0200",    "Tue, 04 Mar 1997 10:43:52 GMT" },
+  { "Tue, 4 Mar 97 12:43:52 +0200",     "Tue, 04 Mar 1997 10:43:52 GMT" },
+  { "Mon, 27 Feb 95 20:49 GMT",         "Mon, 27 Feb 1995 20:49:00 GMT" },
+  { "Tue, 4 Mar 97 12:43 GMT",          "Tue, 04 Mar 1997 12:43:00 GMT" },
+  { NULL, NULL }
+};
+
+static void test_date_rfc(abts_case *tc, void *data)
+{
+    apr_time_t date;
+    int i = 0;
+
+    while (tests[i].input) {
+        char str_date[APR_RFC822_DATE_LEN] = { 0 };
+
+        date = apr_date_parse_rfc(tests[i].input);
+
+        apr_rfc822_date(str_date, date);
+
+        ABTS_STR_EQUAL(tc, str_date, tests[i].output);
+
+        i++;
+    }
+}
+
+abts_suite *testdaterfc(abts_suite *suite)
+{
+    suite = ADD_SUITE(suite);
+
+    abts_run_test(suite, test_date_rfc, NULL);
+
+    return suite;
+}

Modified: apr/apr-util/trunk/test/testutil.h
URL: http://svn.apache.org/viewcvs/apr/apr-util/trunk/test/testutil.h?rev=233425&r1=233424&r2=233425&view=diff
==============================================================================
--- apr/apr-util/trunk/test/testutil.h (original)
+++ apr/apr-util/trunk/test/testutil.h Thu Aug 18 21:03:03 2005
@@ -52,5 +52,6 @@
 abts_suite *testmd5(abts_suite *suite);
 abts_suite *testldap(abts_suite *suite);
 abts_suite *testdbd(abts_suite *suite);
+abts_suite *testdaterfc(abts_suite *suite);
 
 #endif /* APR_TEST_INCLUDES */