Does it make sense to change mapping->get or introduce a new method so that it never returns 0?
Are there no tricky cases where lowercasing an upper case letter results in more than one letter? Should the test case cover a case where a character becomes 3 characters when upper cased? Otherwise LGTM. We should address the double allocation issue in another change. On Mon, Oct 13, 2008 at 10:36 AM, <[EMAIL PROTECTED]>wrote: > Reviewers: Erik Corry, > > Description: > Fixed bug 114 > > Please review this at http://codereview.chromium.org/7263 > > Affected files: > M src/runtime.cc > A test/mjsunit/regress/regress-114.js > > > Index: src/runtime.cc > diff --git a/src/runtime.cc b/src/runtime.cc > index > f3fb849de4dd81aad03cda7f96053aa8b822b2c5..75285e10a0dd58e9bccf1e0b112cf5c360e18fdd > 100644 > --- a/src/runtime.cc > +++ b/src/runtime.cc > @@ -2156,12 +2156,14 @@ static Object* ConvertCase(Arguments args, > // "realloc" it and probably, in the vast majority of cases, > // extend the existing string to be able to hold the full > // result. > - int current_length = i + char_length + mapping->get(next, 0, chars); > + int next_length = mapping->get(next, 0, chars); > + if (next_length == 0) next_length = 1; > + int current_length = i + char_length + next_length; > while (buffer->has_more()) { > current = buffer->GetNext(); > int char_length = mapping->get(current, 0, chars); > if (char_length == 0) char_length = 1; > - current += char_length; > + current_length += char_length; > } > length = current_length; > goto try_convert; > Index: test/mjsunit/regress/regress-114.js > diff --git a/test/mjsunit/regress/regress-114.js > b/test/mjsunit/regress/regress-114.js > new file mode 100644 > index > 0000000000000000000000000000000000000000..f14b1c09792a2713f70d02129d89eadfa1baf17b > --- /dev/null > +++ b/test/mjsunit/regress/regress-114.js > @@ -0,0 +1,30 @@ > +// Copyright 2008 the V8 project authors. All rights reserved. > +// Redistribution and use in source and binary forms, with or without > +// modification, are permitted provided that the following conditions are > +// met: > +// > +// * Redistributions of source code must retain the above copyright > +// notice, this list of conditions and the following disclaimer. > +// * Redistributions in binary form must reproduce the above > +// copyright notice, this list of conditions and the following > +// disclaimer in the documentation and/or other materials provided > +// with the distribution. > +// * Neither the name of Google Inc. nor the names of its > +// contributors may be used to endorse or promote products derived > +// from this software without specific prior written permission. > +// > +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS > +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT > +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR > +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT > +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, > +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT > +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, > +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY > +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE > +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > + > +assertEquals("FRIEDRICHSTRASSE 14", "friedrichstra\xDFe > 14".toUpperCase()); > +assertEquals("---SSSSSS---", "---\xDF\xDF\xDF---".toUpperCase()); > +assertEquals("(SS)", "(\xDF)".toUpperCase()); > > > -- Erik Corry, Software Engineer Google Denmark ApS. CVR nr. 28 86 69 84 c/o Philip & Partners, 7 Vognmagergade, P.O. Box 2227, DK-1018 Copenhagen K, Denmark. --~--~---------~--~----~------------~-------~--~----~ v8-dev mailing list [email protected] http://groups.google.com/group/v8-dev -~----------~----~----~----~------~----~------~--~---
