Ignore:
Timestamp:
May 21, 2008, 12:15:01 PM (17 years ago)
Author:
Darin Adler
Message:

JavaScriptCore:

2008-05-21 Darin Adler <Darin Adler>

Reviewed by Anders.

  • fix <rdar://problem/5952721> bug in JavaScript arguments object property lookup

Test: fast/js/arguments-bad-index.html

  • kjs/function.cpp: (KJS::IndexToNameMap::IndexToNameMap): Use unsigned instead of int. (KJS::IndexToNameMap::isMapped): Use unsigned instead of int, and also use the strict version of the numeric conversion function, since we don't want to allow trailing junk. (KJS::IndexToNameMap::unMap): Ditto. (KJS::IndexToNameMap::operator[]): Ditto.
  • kjs/function.h: Changed IndexToNameMap::size type from int to unsigned.

LayoutTests:

2008-05-21 Darin Adler <Darin Adler>

Reviewed by Anders.

  • test for <rdar://problem/5952721> bug in JavaScript arguments object property lookup
  • fast/js/arguments-bad-index-expected.txt: Added.
  • fast/js/arguments-bad-index.html: Added.
  • fast/js/resources/arguments-bad-index.js: Added.
File:
1 edited

Legend:

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

    r33038 r33972  
    226226  this->size = args.size();
    227227 
    228   int i = 0;
     228  unsigned i = 0;
    229229  List::const_iterator end = args.end();
    230230  for (List::const_iterator it = args.begin(); it != end; ++i, ++it)
     
    232232}
    233233
    234 IndexToNameMap::~IndexToNameMap() {
     234IndexToNameMap::~IndexToNameMap()
     235{
    235236  delete [] _map;
    236237}
     
    239240{
    240241  bool indexIsNumber;
    241   int indexAsNumber = index.toUInt32(&indexIsNumber);
     242  unsigned indexAsNumber = index.toStrictUInt32(&indexIsNumber);
    242243 
    243244  if (!indexIsNumber)
     
    256257{
    257258  bool indexIsNumber;
    258   int indexAsNumber = index.toUInt32(&indexIsNumber);
     259  unsigned indexAsNumber = index.toStrictUInt32(&indexIsNumber);
    259260
    260261  ASSERT(indexIsNumber && indexAsNumber < size);
     
    263264}
    264265
    265 Identifier& IndexToNameMap::operator[](int index)
    266 {
    267   return _map[index];
    268 }
    269 
    270266Identifier& IndexToNameMap::operator[](const Identifier& index)
    271267{
    272268  bool indexIsNumber;
    273   int indexAsNumber = index.toUInt32(&indexIsNumber);
     269  unsigned indexAsNumber = index.toStrictUInt32(&indexIsNumber);
    274270
    275271  ASSERT(indexIsNumber && indexAsNumber < size);
    276272 
    277   return (*this)[indexAsNumber];
     273  return _map[indexAsNumber];
    278274}
    279275
Note: See TracChangeset for help on using the changeset viewer.