Ignore:
Timestamp:
Nov 17, 2003, 9:40:43 PM (22 years ago)
Author:
mjs
Message:

Patch from Harri, reviewed by me.

  • fixed 3487375 - backwards array slice causes infinite loop
  • kjs/array_object.cpp: (ArrayProtoFuncImp::call):
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/kjs/array_object.cpp

    r5436 r5565  
    579579    Object resObj = Object::dynamicCast(exec->interpreter()->builtinArray().construct(exec,List::empty()));
    580580    result = resObj;
    581     int begin = args[0].toUInt32(exec);
     581    int begin = args[0].toInteger(exec);
    582582    if ( begin < 0 )
    583583      begin = maxInt( begin + length, 0 );
     
    587587    if (args[1].type() != UndefinedType)
    588588    {
    589       end = args[1].toUInt32(exec);
     589      end = args[1].toInteger(exec);
    590590      if ( end < 0 )
    591591        end = maxInt( end + length, 0 );
     
    595595
    596596    //printf( "Slicing from %d to %d \n", begin, end );
    597     for(unsigned int k = 0; k < (unsigned int) end-begin; k++) {
    598       if (thisObj.hasProperty(exec,k+begin)) {
    599         Value obj = thisObj.get(exec, k+begin);
    600         resObj.put(exec, k, obj);
    601       }
    602     }
    603     resObj.put(exec, lengthPropertyName, Number(end - begin), DontEnum | DontDelete);
     597    int n = 0;
     598    for(int k = begin; k < end; k++, n++) {
     599      if (thisObj.hasProperty(exec, k)) {
     600        Value obj = thisObj.get(exec, k);
     601        resObj.put(exec, n, obj);
     602      }
     603    }
     604    resObj.put(exec, lengthPropertyName, Number(n), DontEnum | DontDelete);
    604605    break;
    605606  }
Note: See TracChangeset for help on using the changeset viewer.