From 8b4e51dfee9dbeef0ae43a044a74606b51ea8acf Mon Sep 17 00:00:00 2001 From: "rogerl%netscape.com" Date: Mon, 30 Aug 1999 22:05:56 +0000 Subject: [PATCH] Changed handling of undefined limit and negative limit values to String.split() git-svn-id: svn://10.0.0.236/trunk@45175 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/js/src/jsstr.c | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/mozilla/js/src/jsstr.c b/mozilla/js/src/jsstr.c index b9fc5a187c4..1d4a586ce39 100644 --- a/mozilla/js/src/jsstr.c +++ b/mozilla/js/src/jsstr.c @@ -1413,7 +1413,8 @@ str_split(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) JSRegExp *re; JSSubString *sep, tmp; jsdouble d; - jsint len, limit, i, j, sublen; + jsint i, j, sublen; + uint32 len, limit; const jschar *substr; str = js_ValueToString(cx, OBJECT_TO_JSVAL(obj)); @@ -1457,20 +1458,17 @@ str_split(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) } /* Use the second argument as the split limit, if given. */ - /* XXX our v2 ecma spec checks against given, undefined. */ - limited = (argc > 1); + limited = (argc > 1) && !JSVAL_IS_VOID(argv[1]); limit = 0; /* Avoid warning. */ if (limited) { - if (!js_ValueToNumber(cx, argv[1], &d)) + if (!js_ValueToNumber(cx, argv[1], &d)) return JS_FALSE; /* Clamp limit between 0 and 1 + string length. */ - d = js_DoubleToInteger(d); - if (d < 0) - d = 0; - else if (d > str->length) - d = 1 + str->length; - limit = (jsint)d; + if (!js_DoubleToECMAUint32(cx, d, &limit)) + return JS_FALSE; + if (limit > str->length) + limit = 1 + str->length; } if (reobj) {