- Fixed <rdar://problem/4275206> Denver Regression: Seed: Past Editions of Opinions...
authorggaren <ggaren@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 29 Sep 2005 01:55:11 +0000 (01:55 +0000)
committerggaren <ggaren@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 29 Sep 2005 01:55:11 +0000 (01:55 +0000)
  "NAN/Undefined" for www.washingtonpost.com

        Reviewed by darin.

        * kjs/date_object.cpp:
        (KJS::KRFCDate_parseDate): If the timezone isn't specified, rather than returning
        invalidDate, substitute the local timezone. This matches the behavior of FF/IE.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@10655 268f45cc-cd09-0410-ab3c-d52691b4dbfc

JavaScriptCore/ChangeLog
JavaScriptCore/kjs/date_object.cpp

index b6ce48b8d4d0245661bfd7e6cf8f5207b88a360a..18ebae0d5bf9739d2e5b87ab0d96ffe4b11c8362 100644 (file)
@@ -1,3 +1,14 @@
+2005-09-28  Geoffrey Garen  <ggaren@apple.com>
+
+       - Fixed <rdar://problem/4275206> Denver Regression: Seed: Past Editions of Opinions display 
+         "NAN/Undefined" for www.washingtonpost.com
+         
+        Reviewed by darin.
+
+        * kjs/date_object.cpp:
+        (KJS::KRFCDate_parseDate): If the timezone isn't specified, rather than returning
+        invalidDate, substitute the local timezone. This matches the behavior of FF/IE.
+
 2005-09-28  Maciej Stachowiak  <mjs@apple.com>
 
        Patch from George Staikos, reviewed by me.
index d3171ad5a98f2f209721e4dc8b43c0b51a32f195..80ed49270e3a2b779e11edbc074313d4c1aa5a0b 100644 (file)
@@ -386,7 +386,7 @@ static int weekDay(double t)
   return wd;
 }
 
-static double timeZoneOffset(const struct tm *t)
+static long timeZoneOffset(const struct tm *t)
 {
 #if defined BSD || defined(__linux__) || defined(__APPLE__)
   return -(t->tm_gmtoff / 60);
@@ -1091,7 +1091,7 @@ double KRFCDate_parseDate(const UString &_date)
      // We ignore the weekday
      //
      double result = -1;
-     int offset = 0;
+     long offset = 0;
      bool have_tz = false;
      char *newPosStr;
      const char *dateString = _date.ascii();
@@ -1300,8 +1300,6 @@ double KRFCDate_parseDate(const UString &_date)
        dateString = newPosStr;
      }
 
-     // don't fail if the time zone is missing, some
-     // broken mail-/news-clients omit the time zone
      if (*dateString) {
        if (strncasecmp(dateString, "GMT", 3) == 0 ||
           strncasecmp(dateString, "UTC", 3) == 0) {
@@ -1344,9 +1342,21 @@ double KRFCDate_parseDate(const UString &_date)
              break;
            }
          }
-         // Bail out if we found an unknown timezone
-         if (!have_tz)
+         // If the time zone is missing or malformed, substitute the local time zone. 
+         // Some websites (4275206) omit the time zone.
+         if (!have_tz) {
+           time_t now;
+           struct tm t;
+           
+           time(&now);
+           if (now == -1)
              return invalidDate;
+           
+           localtime_r(&now, &t);
+           offset = -timeZoneOffset(&t);
+           
+           have_tz = true;
+         }
        }
      }
 
@@ -1384,7 +1394,7 @@ double KRFCDate_parseDate(const UString &_date)
        return makeTime(&t, 0, false) / 1000.0;
      }
      
-     result = ymdhms_to_seconds(year, month+1, day, hour, minute, second) - (offset*60);
+     result = ymdhms_to_seconds(year, month+1, day, hour, minute, second) - (offset * 60);
      return result;
 }