[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdelibs/kjs
From:       George Staikos <staikos () kde ! org>
Date:       2005-09-30 21:15:17
Message-ID: 1128114917.345395.26533.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 465795 by staikos:

merge NAN support from jscore.  Have not run regression on this yet, but I'm
pretty sure it's safe since it's fine in jscore and looks sane.  Harri: safe
to backport to 3.5 and 3.4?


 M  +22 -13    date_object.cpp  


--- trunk/KDE/kdelibs/kjs/date_object.cpp #465794:465795
@@ -535,19 +535,28 @@
     else
       value = prim.toNumber(exec);
   } else {
-    struct tm t;
-    memset(&t, 0, sizeof(t));
-    int year = args[0].toInt32(exec);
-    // TODO: check for NaN
-    t.tm_year = (year >= 0 && year <= 99) ? year : year - 1900;
-    t.tm_mon = args[1].toInt32(exec);
-    t.tm_mday = (numArgs >= 3) ? args[2].toInt32(exec) : 1;
-    t.tm_hour = (numArgs >= 4) ? args[3].toInt32(exec) : 0;
-    t.tm_min = (numArgs >= 5) ? args[4].toInt32(exec) : 0;
-    t.tm_sec = (numArgs >= 6) ? args[5].toInt32(exec) : 0;
-    t.tm_isdst = -1;
-    int ms = (numArgs >= 7) ? args[6].toInt32(exec) : 0;
-    value = makeTime(&t, ms, false);
+    if (isNaN(args[0].toNumber(exec))
+        || isNaN(args[1].toNumber(exec))
+        || (numArgs >= 3 && isNaN(args[2].toNumber(exec)))
+        || (numArgs >= 4 && isNaN(args[3].toNumber(exec)))
+        || (numArgs >= 5 && isNaN(args[4].toNumber(exec)))
+        || (numArgs >= 6 && isNaN(args[5].toNumber(exec)))
+        || (numArgs >= 7 && isNaN(args[6].toNumber(exec)))) {
+      value = NaN;
+    } else {
+      struct tm t;
+      memset(&t, 0, sizeof(t));
+      int year = args[0].toInt32(exec);
+      t.tm_year = (year >= 0 && year <= 99) ? year : year - 1900;
+      t.tm_mon = args[1].toInt32(exec);
+      t.tm_mday = (numArgs >= 3) ? args[2].toInt32(exec) : 1;
+      t.tm_hour = (numArgs >= 4) ? args[3].toInt32(exec) : 0;
+      t.tm_min = (numArgs >= 5) ? args[4].toInt32(exec) : 0;
+      t.tm_sec = (numArgs >= 6) ? args[5].toInt32(exec) : 0;
+      t.tm_isdst = -1;
+      int ms = (numArgs >= 7) ? args[6].toInt32(exec) : 0;
+      value = makeTime(&t, ms, false);
+    }
   }
 
   Object proto = exec->lexicalInterpreter()->builtinDatePrototype();
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic