Skip to content

Commit b4f1bb4

Browse files
committed
Fix pathological BailOut for chakraLibrary.isArray
1 parent 3a1764f commit b4f1bb4

File tree

2 files changed

+8
-12
lines changed

2 files changed

+8
-12
lines changed

lib/Runtime/Library/JavascriptLibrary.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
//-------------------------------------------------------------------------------------------------------
22
// Copyright (C) Microsoft Corporation and contributors. All rights reserved.
3-
// Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved.
3+
// Copyright (c) 2022 ChakraCore Project Contributors. All rights reserved.
44
// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
55
//-------------------------------------------------------------------------------------------------------
66

@@ -1707,6 +1707,7 @@ namespace Js
17071707
JsBuiltInEngineInterfaceExtensionObject* builtInExtension = RecyclerNew(recycler, JsBuiltInEngineInterfaceExtensionObject, scriptContext);
17081708
engineInterfaceObject->SetEngineExtension(EngineInterfaceExtensionKind_JsBuiltIn, builtInExtension);
17091709
this->isArrayFunction = this->DefaultCreateFunction(&JavascriptArray::EntryInfo::IsArray, 1, nullptr, nullptr, PropertyIds::isArray);
1710+
builtinFuncs[BuiltinFunction::JavascriptArray_IsArray] = this->isArrayFunction;
17101711
#endif
17111712

17121713
#endif
@@ -1902,7 +1903,6 @@ namespace Js
19021903
library->AddMember(arrayConstructor, PropertyIds::name, scriptContext->GetPropertyString(PropertyIds::Array), PropertyConfigurable);
19031904

19041905
#ifdef ENABLE_JS_BUILTINS
1905-
builtinFuncs[BuiltinFunction::JavascriptArray_IsArray] = library->isArrayFunction;
19061906
library->AddMember(arrayConstructor, PropertyIds::isArray, library->isArrayFunction);
19071907
#else
19081908
library->AddFunctionToLibraryObject(arrayConstructor, PropertyIds::isArray, &JavascriptArray::EntryInfo::IsArray, 1);

lib/Runtime/Library/JsBuiltInEngineInterfaceExtensionObject.cpp

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
//-------------------------------------------------------------------------------------------------------
22
// Copyright (C) Microsoft. All rights reserved.
3-
// Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved.
3+
// Copyright (c) 2022 ChakraCore Project Contributors. All rights reserved.
44
// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
55
//-------------------------------------------------------------------------------------------------------
66
#include "RuntimeLibraryPch.h"
@@ -135,21 +135,17 @@ namespace Js
135135
// Clear ReentrancyLock bit as initialization code doesn't have any side effect
136136
scriptContext->GetThreadContext()->SetNoJsReentrancy(false);
137137
#endif
138+
// specify which set of BuiltIns are currently being loaded
139+
current = file;
140+
138141
// Clear disable implicit call bit as initialization code doesn't have any side effect
139142
{
140143
ThreadContext::AutoRestoreImplicitFlags autoRestoreImplicitFlags(scriptContext->GetThreadContext(), scriptContext->GetThreadContext()->GetImplicitCallFlags(), scriptContext->GetThreadContext()->GetDisableImplicitFlags());
141144
scriptContext->GetThreadContext()->ClearDisableImplicitFlags();
142145
JavascriptFunction::CallRootFunctionInScript(functionGlobal, Js::Arguments(callInfo, args));
143-
}
144146

145-
Js::ScriptFunction *functionBuiltins = scriptContext->GetLibrary()->CreateScriptFunction(jsBuiltInByteCode->GetNestedFunctionForExecution(0));
146-
functionBuiltins->SetPrototype(scriptContext->GetLibrary()->nullValue);
147-
148-
current = file;
149-
// Clear disable implicit call bit as initialization code doesn't have any side effect
150-
{
151-
ThreadContext::AutoRestoreImplicitFlags autoRestoreImplicitFlags(scriptContext->GetThreadContext(), scriptContext->GetThreadContext()->GetImplicitCallFlags(), scriptContext->GetThreadContext()->GetDisableImplicitFlags());
152-
scriptContext->GetThreadContext()->ClearDisableImplicitFlags();
147+
Js::ScriptFunction *functionBuiltins = scriptContext->GetLibrary()->CreateScriptFunction(jsBuiltInByteCode->GetNestedFunctionForExecution(0));
148+
functionBuiltins->SetPrototype(scriptContext->GetLibrary()->nullValue);
153149
JavascriptFunction::CallRootFunctionInScript(functionBuiltins, Js::Arguments(callInfo, args));
154150
}
155151

0 commit comments

Comments
 (0)