mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-19 00:05:36 +00:00
Bug 1156720 - Firefox freezes when parsing large data in Storage Inspector. r=mratcliffe
MozReview-Commit-ID: CopXwMnhzxY
This commit is contained in:
parent
f9f09db5af
commit
e3e7f277be
@ -14,6 +14,8 @@
|
||||
|
||||
"use strict";
|
||||
|
||||
const LONG_WORD = "a".repeat(1000);
|
||||
|
||||
const testCases = [
|
||||
["cs2", [
|
||||
{name: "cs2", value: "sessionCookie"},
|
||||
@ -93,6 +95,23 @@ const testCases = [
|
||||
{name: "ss3.an", value: "object"},
|
||||
{name: "ss3.foo", value: "bar"},
|
||||
], true],
|
||||
["ss4", [
|
||||
{name: "ss4", value: "Array"},
|
||||
{name: "ss4.0", value: ""},
|
||||
{name: "ss4.1", value: "array"},
|
||||
{name: "ss4.2", value: ""},
|
||||
{name: "ss4.3", value: "with"},
|
||||
{name: "ss4.4", value: "empty"},
|
||||
{name: "ss4.5", value: "items"},
|
||||
], true],
|
||||
["ss5", [
|
||||
{name: "ss5", value: "Array"},
|
||||
{name: "ss5.0", value: LONG_WORD},
|
||||
{name: "ss5.1", value: LONG_WORD},
|
||||
{name: "ss5.2", value: LONG_WORD},
|
||||
{name: "ss5.3", value: `${LONG_WORD}&${LONG_WORD}`},
|
||||
{name: "ss5.4", value: `${LONG_WORD}&${LONG_WORD}`},
|
||||
], true],
|
||||
[["indexedDB", "http://test1.example.org", "idb1", "obj1"]],
|
||||
[1, [
|
||||
{name: 1, value: JSON.stringify({id: 1, name: "foo", email: "foo@bar.com"})}
|
||||
|
@ -32,6 +32,11 @@ localStorage.setItem("ls3", "http://foobar.com/baz.php");
|
||||
sessionStorage.setItem("ss1", "This#is#an#array");
|
||||
sessionStorage.setItem("ss2", "This~is~another~array");
|
||||
sessionStorage.setItem("ss3", "this#is~an#object~foo#bar");
|
||||
sessionStorage.setItem("ss4", "#array##with#empty#items");
|
||||
// long string that is almost an object and might trigger exponential
|
||||
// regexp backtracking
|
||||
let s = "a".repeat(1000);
|
||||
sessionStorage.setItem("ss5", `${s}=${s}=${s}=${s}&${s}=${s}&${s}`);
|
||||
console.log("added cookies and stuff from main page");
|
||||
|
||||
let idbGenerator = function*() {
|
||||
|
@ -607,8 +607,10 @@ StorageUI.prototype = {
|
||||
continue;
|
||||
}
|
||||
let p = separators[j];
|
||||
let regex = new RegExp("^([^" + kv + p + "]*" + kv + "+[^" + kv + p +
|
||||
"]*" + p + "*)+$", "g");
|
||||
let word = `[^${kv}${p}]*`;
|
||||
let keyValue = `${word}${kv}${word}`;
|
||||
let keyValueList = `${keyValue}(${p}${keyValue})*`;
|
||||
let regex = new RegExp(`^${keyValueList}$`);
|
||||
if (value.match && value.match(regex) && value.includes(kv) &&
|
||||
(value.includes(p) || value.split(kv).length == 2)) {
|
||||
return makeObject(kv, p);
|
||||
@ -617,7 +619,9 @@ StorageUI.prototype = {
|
||||
}
|
||||
// Testing for array
|
||||
for (let p of separators) {
|
||||
let regex = new RegExp("^[^" + p + "]+(" + p + "+[^" + p + "]*)+$", "g");
|
||||
let word = `[^${p}]*`;
|
||||
let wordList = `(${word}${p})+${word}`;
|
||||
let regex = new RegExp(`^${wordList}$`);
|
||||
if (value.match && value.match(regex)) {
|
||||
return value.split(p.replace(/\\*/g, ""));
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user