aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorandroid-build-team Robot <android-build-team-robot@google.com>2019-06-12 09:56:46 +0000
committerandroid-build-team Robot <android-build-team-robot@google.com>2019-06-12 09:56:46 +0000
commit07f6e2d2fb3484a86337d6f32063c3d06c68cfc0 (patch)
tree5d13e7fa4a9f0026540613b74318c9597a440aeb
parentd735970ceec445c8b4cc6e4041a621774c738b63 (diff)
parent32b25b2def7f6fec12df7e22e24e16edf7b57890 (diff)
downloadchromium-libpac-07f6e2d2fb3484a86337d6f32063c3d06c68cfc0.tar.gz
Merge cherrypicks of [7995446, 7995447, 7996042, 7996138, 7995448, 7995449, 7995789, 7995790, 7995450, 7996029, 7996030, 7996139, 7996140, 7996141, 7996142, 7996143, 7996144, 7995544, 7995545, 7995546, 7995547, 7995548, 7995549, 7995550, 7996145, 7996146, 7996032, 7996147, 7996148, 7996149, 7996150, 7994747, 7994748, 7995451, 7994749, 7994750, 7995966, 7995967, 7994751, 7996151, 7996152, 7996153] into pi-qpr3-b-releaseandroid-9.0.0_r47pie-qpr3-b-release
Change-Id: If673feada04b11f12b10440724b9c46066f91499
-rw-r--r--src/proxy_resolver_v8.cc4
-rw-r--r--test/js-unittest/b_132073833.js21
-rw-r--r--test/proxy_resolver_v8_unittest.cc14
-rw-r--r--test/proxy_test_script.h27
4 files changed, 64 insertions, 2 deletions
diff --git a/src/proxy_resolver_v8.cc b/src/proxy_resolver_v8.cc
index f978694..0504b03 100644
--- a/src/proxy_resolver_v8.cc
+++ b/src/proxy_resolver_v8.cc
@@ -762,6 +762,10 @@ int ProxyResolverV8::SetPacScript(const android::String16& script_data) {
if (script_data.size() == 0)
return ERR_PAC_SCRIPT_FAILED;
+ // Disable JIT
+ static const char kNoOpt[] = "--no-opt";
+ v8::V8::SetFlagsFromString(kNoOpt, strlen(kNoOpt));
+
// Try parsing the PAC script.
ArrayBufferAllocator allocator;
v8::Isolate::CreateParams create_params;
diff --git a/test/js-unittest/b_132073833.js b/test/js-unittest/b_132073833.js
new file mode 100644
index 0000000..79d1967
--- /dev/null
+++ b/test/js-unittest/b_132073833.js
@@ -0,0 +1,21 @@
+function FindProxyForURL(url, host){
+ function opt() {
+ opt['x'] = 1.1;
+ try {
+ Object.create(object);
+ } catch (e) {
+ }
+
+ for (let i = 0; i < 100000; i++) {
+
+ }
+ }
+
+ opt();
+ object = opt;
+ opt();
+
+ return "DIRECT";
+}
+
+var object; \ No newline at end of file
diff --git a/test/proxy_resolver_v8_unittest.cc b/test/proxy_resolver_v8_unittest.cc
index be7ecee..73e4405 100644
--- a/test/proxy_resolver_v8_unittest.cc
+++ b/test/proxy_resolver_v8_unittest.cc
@@ -558,5 +558,19 @@ TEST(ProxyResolverV8Test, GetterChangesElementKind) {
EXPECT_EQ("DIRECT", proxies[0]);
}
+TEST(ProxyResolverV8Test, B_132073833) {
+ ProxyResolverV8WithMockBindings resolver(new MockJSBindings());
+ int result = resolver.SetPacScript(String16(B_132073833_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 80c96c7..aa10016 100644
--- a/test/proxy_test_script.h
+++ b/test/proxy_test_script.h
@@ -4,6 +4,29 @@
#ifndef PROXY_TEST_SCRIPT_H_
#define PROXY_TEST_SCRIPT_H_
+#define B_132073833_JS \
+ "function FindProxyForURL(url, host){\n" \
+ " function opt() {\n" \
+ " opt['x'] = 1.1;\n" \
+ " try {\n" \
+ " Object.create(object);\n" \
+ " } catch (e) {\n" \
+ " }\n" \
+ "\n" \
+ " for (let i = 0; i < 100000; i++) {\n" \
+ "\n" \
+ " }\n" \
+ " }\n" \
+ "\n" \
+ " opt();\n" \
+ " object = opt;\n" \
+ " opt();\n" \
+ "\n" \
+ " return \"DIRECT\";\n" \
+ "}\n" \
+ "\n" \
+ "var object;\n" \
+
#define BINDING_FROM_GLOBAL_JS \
"// Calls a bindings outside of FindProxyForURL(). This causes the code to\n" \
"// get exercised during initialization.\n" \
@@ -80,7 +103,7 @@
#define CHANGE_ELEMENT_KIND_JS \
"// PAC script with getter that changes element kind.\n" \
- " \n" \
+ "\n" \
"function FindProxyForURL(url, host) {\n" \
" let arr = [];\n" \
" arr[1000] = 0x1234;\n" \
@@ -91,7 +114,7 @@
" });\n" \
"\n" \
" let results = Object.entries(arr);\n" \
- " let str = results.toString(); \n" \
+ " let str = results.toString();\n" \
" return \"DIRECT\";\n" \
"}\n" \