Reviewed by Maciej.
authorsullivan <sullivan@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 19 Jul 2004 23:43:54 +0000 (23:43 +0000)
committersullivan <sullivan@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 19 Jul 2004 23:43:54 +0000 (23:43 +0000)
        - bulletproofed array.slice() against NAN arguments. Harri noticed this
        vulnerability in my patch for 3714644

        * kjs/array_object.cpp:
        (ArrayProtoFuncImp::call):
        handle NAN parameters passed to slice() by clamping to 0 and length.

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

JavaScriptCore/ChangeLog
JavaScriptCore/kjs/array_object.cpp

index 59766c36b1cb64f784a3b91a6471c322387b90a0..bfc5ab62b5c9416c93aebc309f8def78415809b4 100644 (file)
@@ -1,3 +1,14 @@
+2004-07-19  John Sullivan  <sullivan@apple.com>
+
+        Reviewed by Maciej.
+        
+        - bulletproofed array.slice() against NAN arguments. Harri noticed this
+        vulnerability in my patch for 3714644
+
+        * kjs/array_object.cpp:
+        (ArrayProtoFuncImp::call):
+        handle NAN parameters passed to slice() by clamping to 0 and length.
+
 2004-07-19  Richard Williamson   <rjw@apple.com>
 
        Fixed 3733349.  Prevent Java applet callbacks into JavaScript after applet
index a6844276a7de979006ca4c6bf808035161db8831..4219d3181fec135e7521d527054a6ee4d4b81dae 100644 (file)
@@ -583,6 +583,9 @@ Value ArrayProtoFuncImp::call(ExecState *exec, Object &thisObj, const List &args
     double begin = 0;
     if (args[0].type() != UndefinedType) {
         begin = args[0].toInteger(exec);
+        if (isnan(begin)) {
+            begin = 0;
+        }
         if (begin < 0) {
             begin += length;
             if (begin < 0)
@@ -595,7 +598,9 @@ Value ArrayProtoFuncImp::call(ExecState *exec, Object &thisObj, const List &args
     double end = length;
     if (args[1].type() != UndefinedType) {
       end = args[1].toInteger(exec);
-      if (end < 0) {
+      if (isnan(end)) {
+        end = length;
+      } else if (end < 0) {
         end += length;
         if (end < 0)
           end = 0;