Version 5.1.281.26 (cherry-pick) Merged 401450493efc424cd20f914e6df6f69f3d7b8fbc Security: type confusion lead to information leak in decodeURI BUG=chromium:602970 LOG=N R=yangguo@chromium.org Review URL: https://codereview.chromium.org/1936083002 . Cr-Commit-Position: refs/branch-heads/5.1@{#30} Cr-Branched-From: 167dc63b4c9a1d0f0fe1b19af93644ac9a561e83-refs/heads/5.1.281@{#1} Cr-Branched-From: 03953f52bd4a184983a551927c406be6489ef89b-refs/heads/master@{#35282}
diff --git a/include/v8-version.h b/include/v8-version.h index 9bf4167..8a60369 100644 --- a/include/v8-version.h +++ b/include/v8-version.h
@@ -11,7 +11,7 @@ #define V8_MAJOR_VERSION 5 #define V8_MINOR_VERSION 1 #define V8_BUILD_NUMBER 281 -#define V8_PATCH_LEVEL 25 +#define V8_PATCH_LEVEL 26 // Use 1 for candidates and 0 otherwise. // (Boolean macro values are not supported by all preprocessors.)
diff --git a/src/js/uri.js b/src/js/uri.js index 712d7e60..dca83c9 100644 --- a/src/js/uri.js +++ b/src/js/uri.js
@@ -15,7 +15,6 @@ // Imports var GlobalObject = global.Object; -var GlobalArray = global.Array; var InternalArray = utils.InternalArray; var MakeURIError; @@ -76,7 +75,7 @@ var x = (cc >> 12) & 0xF; var y = (cc >> 6) & 63; var z = cc & 63; - var octets = new GlobalArray(3); + var octets = new InternalArray(3); if (cc <= 0x007F) { octets[0] = cc; } else if (cc <= 0x07FF) { @@ -96,7 +95,7 @@ var x = cc1 & 3; var y = (cc2 >> 6) & 0xF; var z = cc2 & 63; - var octets = new GlobalArray(4); + var octets = new InternalArray(4); octets[0] = (u >> 2) + 240; octets[1] = (((u & 3) << 4) | w) + 128; octets[2] = ((x << 4) | y) + 128; @@ -248,7 +247,7 @@ var n = 0; while (((cc << ++n) & 0x80) != 0) { } if (n == 1 || n > 4) throw MakeURIError(); - var octets = new GlobalArray(n); + var octets = new InternalArray(n); octets[0] = cc; if (k + 3 * (n - 1) >= uriLength) throw MakeURIError(); for (var i = 1; i < n; i++) {
diff --git a/test/mjsunit/regress/regress-602970.js b/test/mjsunit/regress/regress-602970.js new file mode 100644 index 0000000..927d3bf --- /dev/null +++ b/test/mjsunit/regress/regress-602970.js
@@ -0,0 +1,17 @@ +// Copyright 2016 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --debug-code + +// flag --debug-code ensures that we'll abort with a failed smi check without +// the fix. + +var num = new Number(10); +Array.prototype.__defineGetter__(0,function(){ + return num; +}) +Array.prototype.__defineSetter__(0,function(value){ +}) +var str=decodeURI("%E7%9A%84"); +assertEquals(0x7684, str.charCodeAt(0));