diff options
author | Rubin Xu <rubinxu@google.com> | 2020-05-04 19:33:09 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2020-05-04 19:33:09 +0000 |
commit | e8640cee53e13f9dcf2a0f7f322f828d5ea5df16 (patch) | |
tree | fe51293053ab8126dc79b35f5f1c9406c5eb7158 | |
parent | e0e56273f3d535f4cc9a99f49592496836b2ed05 (diff) | |
parent | 96c75dc8d8e4f38505197f6fb25b2e66303a9d85 (diff) | |
download | chromium-libpac-android11-mainline-os-statsd-release.tar.gz |
Cherry-pick "Refactor Regexp.prototype" am: 780b5e3420 am: fd88a6d57e am: 40be1f0a48 am: 8419031c72 am: 3157132735 am: 96c75dc8d8android-mainline-11.0.0_r44android-mainline-11.0.0_r35android-mainline-11.0.0_r34android-mainline-11.0.0_r32android-mainline-11.0.0_r31android-mainline-11.0.0_r30android-mainline-11.0.0_r28android-mainline-11.0.0_r20android-mainline-11.0.0_r18android-mainline-11.0.0_r17android-mainline-11.0.0_r16android-mainline-11.0.0_r15android-mainline-11.0.0_r14android-mainline-11.0.0_r13android-mainline-11.0.0_r12android11-mainline-os-statsd-releaseandroid11-mainline-extservices-releaseandroid11-mainline-conscrypt-releaseandroid11-dev
Change-Id: Ib30a498c30b8bf8637a3aef49f22457b550dbe22
-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" \ |