diff options
author | Rubin Xu <rubinxu@google.com> | 2020-05-04 19:14:20 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2020-05-04 19:14:20 +0000 |
commit | 96c75dc8d8e4f38505197f6fb25b2e66303a9d85 (patch) | |
tree | 2377c537550a7a7c490d7adb887c79d87d2feb87 | |
parent | baadb5f0f3715af3709ed21ad7c21428d7ae125d (diff) | |
parent | 3157132735a73978fb4220e009ea92e4d75b16ac (diff) | |
download | chromium-libpac-96c75dc8d8e4f38505197f6fb25b2e66303a9d85.tar.gz |
Cherry-pick "Refactor Regexp.prototype" am: 780b5e3420 am: fd88a6d57e am: 40be1f0a48 am: 8419031c72 am: 3157132735
Change-Id: I7e74e62ef198f7b151ef86c34de475001185fc9c
-rw-r--r-- | test/js-unittest/b_147664838.js | 21 | ||||
-rw-r--r-- | test/proxy_resolver_v8_unittest.cc | 13 | ||||
-rw-r--r-- | test/proxy_test_script.h | 24 |
3 files changed, 58 insertions, 0 deletions
diff --git a/test/js-unittest/b_147664838.js b/test/js-unittest/b_147664838.js new file mode 100644 index 0000000..d1d8b72 --- /dev/null +++ b/test/js-unittest/b_147664838.js @@ -0,0 +1,21 @@ +function FindProxyForURL(url, host){ + let re = /x/y; + let cnt = 0; + let str = re[Symbol.replace]("x", { + toString: () => { + cnt++; + if (cnt == 2) { + re.lastIndex = {valueOf: () => { + re.x = 42; + return 0; + }}; + } + return 'y$'; + } + }); + if (str != "y$") { + throw "regex mutated"; + return "FAIL"; + } + return "DIRECT"; +}
\ No newline at end of file diff --git a/test/proxy_resolver_v8_unittest.cc b/test/proxy_resolver_v8_unittest.cc index 3f6d20f..8469cab 100644 --- a/test/proxy_resolver_v8_unittest.cc +++ b/test/proxy_resolver_v8_unittest.cc @@ -657,6 +657,19 @@ TEST(ProxyResolverV8Test, B_139806216) { EXPECT_EQ("DIRECT", proxies[0]); } +TEST(ProxyResolverV8Test, B_147664838) { + ProxyResolverV8WithMockBindings resolver(new MockJSBindings()); + int result = resolver.SetPacScript(SCRIPT(B_147664838_JS)); + EXPECT_EQ(OK, result); + + // Execute FindProxyForURL(). + result = resolver.GetProxyForURL(kQueryUrl, kQueryHost, &kResults); + + EXPECT_EQ(OK, result); + std::vector<std::string> proxies = string16ToProxyList(kResults); + EXPECT_EQ(1U, proxies.size()); + EXPECT_EQ("DIRECT", proxies[0]); +} } // namespace } // namespace net diff --git a/test/proxy_test_script.h b/test/proxy_test_script.h index 500a57a..2a86491 100644 --- a/test/proxy_test_script.h +++ b/test/proxy_test_script.h @@ -35,6 +35,30 @@ " return \"DIRECT\";\n" \ "}\n" \ +#define B_147664838_JS \ + u""\ + "function FindProxyForURL(url, host){\n" \ + " let re = /x/y;\n" \ + " let cnt = 0;\n" \ + " let str = re[Symbol.replace](\"x\", {\n" \ + " toString: () => {\n" \ + " cnt++;\n" \ + " if (cnt == 2) {\n" \ + " re.lastIndex = {valueOf: () => {\n" \ + " re.x = 42;\n" \ + " return 0;\n" \ + " }};\n" \ + " }\n" \ + " return 'y$';\n" \ + " }\n" \ + " });\n" \ + " if (str != \"y$\") {\n" \ + " throw \"regex mutated\";\n" \ + " return \"FAIL\";\n" \ + " }\n" \ + " return \"DIRECT\";\n" \ + "}\n" \ + #define BINDING_FROM_GLOBAL_JS \ u""\ "// Calls a bindings outside of FindProxyForURL(). This causes the code to\n" \ |