From 42183d3219a91d729c989de2b09b78d17f61d312 Mon Sep 17 00:00:00 2001 From: Rubin Xu Date: Mon, 3 Jun 2019 17:42:47 +0100 Subject: [DO NOT MERGE] Disable optimizing compiler for pac file Bug: 132073833 Test: m -j proxy_resolver_v8_unittest && adb sync && adb shell \ /data/nativetest64/proxy_resolver_v8_unittest/proxy_resolver_v8_unittest Change-Id: If09d635d48aff0671f955dc6f1edc50fcda773f8 --- src/proxy_resolver_v8.cc | 4 ++++ test/js-unittest/b_132073833.js | 21 +++++++++++++++++++++ test/proxy_resolver_v8_unittest.cc | 14 ++++++++++++++ test/proxy_test_script.h | 27 +++++++++++++++++++++++++-- 4 files changed, 64 insertions(+), 2 deletions(-) create mode 100644 test/js-unittest/b_132073833.js 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 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" \ -- cgit v1.2.3 From 7da0d1fa9f0a38bd7dc9c9ded5408a2cc646b349 Mon Sep 17 00:00:00 2001 From: Rubin Xu Date: Mon, 3 Jun 2019 17:42:47 +0100 Subject: [DO NOT MERGE] Disable optimizing compiler for pac file Bug: 132073833 Test: m -j proxy_resolver_v8_unittest && adb sync && adb shell \ /data/nativetest64/proxy_resolver_v8_unittest/proxy_resolver_v8_unittest Change-Id: If09d635d48aff0671f955dc6f1edc50fcda773f8 --- src/proxy_resolver_v8.cc | 4 ++++ test/js-unittest/b_132073833.js | 21 +++++++++++++++++++++ test/proxy_resolver_v8_unittest.cc | 14 ++++++++++++++ test/proxy_test_script.h | 27 +++++++++++++++++++++++++-- 4 files changed, 64 insertions(+), 2 deletions(-) create mode 100644 test/js-unittest/b_132073833.js 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 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" \ -- cgit v1.2.3 From 779c011de1421b5a7257c6e1d391943f1df59832 Mon Sep 17 00:00:00 2001 From: Rubin Xu Date: Mon, 3 Jun 2019 17:42:47 +0100 Subject: [DO NOT MERGE] Disable optimizing compiler for pac file Bug: 132073833 Test: m -j proxy_resolver_v8_unittest && adb sync && adb shell \ /data/nativetest64/proxy_resolver_v8_unittest/proxy_resolver_v8_unittest Change-Id: If09d635d48aff0671f955dc6f1edc50fcda773f8 --- src/proxy_resolver_v8.cc | 4 ++++ test/js-unittest/b_132073833.js | 21 +++++++++++++++++++++ test/proxy_resolver_v8_unittest.cc | 14 ++++++++++++++ test/proxy_test_script.h | 27 +++++++++++++++++++++++++-- 4 files changed, 64 insertions(+), 2 deletions(-) create mode 100644 test/js-unittest/b_132073833.js 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 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" \ -- cgit v1.2.3 From d0ca65eb819fd8251549bea374ef2c3418c15748 Mon Sep 17 00:00:00 2001 From: Rubin Xu Date: Mon, 3 Jun 2019 17:42:47 +0100 Subject: Disable optimizing compiler for pac file Bug: 132073833 Test: m -j proxy_resolver_v8_unittest && adb sync && adb shell \ /data/nativetest64/proxy_resolver_v8_unittest/proxy_resolver_v8_unittest Change-Id: If09d635d48aff0671f955dc6f1edc50fcda773f8 --- src/proxy_resolver_v8.cc | 8 +++++--- test/js-unittest/b_132073833.js | 21 +++++++++++++++++++++ test/proxy_resolver_v8_unittest.cc | 14 ++++++++++++++ test/proxy_test_script.h | 24 ++++++++++++++++++++++++ 4 files changed, 64 insertions(+), 3 deletions(-) create mode 100644 test/js-unittest/b_132073833.js diff --git a/src/proxy_resolver_v8.cc b/src/proxy_resolver_v8.cc index 227fea3..289102e 100644 --- a/src/proxy_resolver_v8.cc +++ b/src/proxy_resolver_v8.cc @@ -760,9 +760,11 @@ int ProxyResolverV8::SetPacScript(const std::u16string& script_data) { if (script_data.length() == 0) return ERR_PAC_SCRIPT_FAILED; - // To help debugging v8 initialization issues, uncomment the following lines - // static const char kOptions[] = "--log_all --print_all_exceptions"; - // v8::V8::SetFlagsFromString(kOptions, strlen(kOptions)); + // To help debugging v8 initialization issues, add "--log_all --print_all_exceptions" + // to the options + // Disable JIT + static const char kNoOpt[] = "--no-opt"; + v8::V8::SetFlagsFromString(kNoOpt, strlen(kNoOpt)); // Try parsing the PAC script. ArrayBufferAllocator allocator; 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 b549cda..66b2a23 100644 --- a/test/proxy_resolver_v8_unittest.cc +++ b/test/proxy_resolver_v8_unittest.cc @@ -629,5 +629,19 @@ TEST(ProxyResolverV8Test, GetterChangesElementKind) { EXPECT_EQ("DIRECT", proxies[0]); } +TEST(ProxyResolverV8Test, B_132073833) { + ProxyResolverV8WithMockBindings resolver(new MockJSBindings()); + int result = resolver.SetPacScript(SCRIPT(B_132073833_JS)); + EXPECT_EQ(OK, result); + + // Execute FindProxyForURL(). + result = resolver.GetProxyForURL(kQueryUrl, kQueryHost, &kResults); + + EXPECT_EQ(OK, result); + std::vector 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 092e262..0d1b77e 100644 --- a/test/proxy_test_script.h +++ b/test/proxy_test_script.h @@ -4,6 +4,30 @@ #ifndef PROXY_TEST_SCRIPT_H_ #define PROXY_TEST_SCRIPT_H_ +#define B_132073833_JS \ + u""\ + "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 \ u""\ "// Calls a bindings outside of FindProxyForURL(). This causes the code to\n" \ -- cgit v1.2.3