Bladeren bron

Module api bugs (#6992)

* Check for errored module before getting Namespace

* Check for missing fetchImportedModuleFromScriptCallback
Richard 1 jaar geleden
bovenliggende
commit
682026b607
3 gewijzigde bestanden met toevoegingen van 24 en 19 verwijderingen
  1. 18 16
      lib/Jsrt/Core/JsrtContextCore.cpp
  2. 1 2
      lib/Jsrt/Core/JsrtContextCore.h
  3. 5 1
      lib/Jsrt/Core/JsrtCore.cpp

+ 18 - 16
lib/Jsrt/Core/JsrtContextCore.cpp

@@ -1,5 +1,6 @@
 //-------------------------------------------------------------------------------------------------------
 //-------------------------------------------------------------------------------------------------------
 // Copyright (C) Microsoft. All rights reserved.
 // Copyright (C) Microsoft. All rights reserved.
+// Copyright (c) ChakraCore Project Contributors. All rights reserved.
 // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
 // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
 //-------------------------------------------------------------------------------------------------------
 //-------------------------------------------------------------------------------------------------------
 #include "Runtime.h"
 #include "Runtime.h"
@@ -105,26 +106,27 @@ void JsrtContextCore::OnScriptLoad(Js::JavascriptFunction * scriptFunction, Js::
 
 
 HRESULT ChakraCoreHostScriptContext::FetchImportedModule(Js::ModuleRecordBase* referencingModule, LPCOLESTR specifier, Js::ModuleRecordBase** dependentModuleRecord)
 HRESULT ChakraCoreHostScriptContext::FetchImportedModule(Js::ModuleRecordBase* referencingModule, LPCOLESTR specifier, Js::ModuleRecordBase** dependentModuleRecord)
 {
 {
-    return FetchImportedModuleHelper(
-        [=](Js::JavascriptString *specifierVar, JsModuleRecord *dependentRecord) -> JsErrorCode
+    if (fetchImportedModuleCallback == nullptr)
+    {
+        return E_INVALIDARG;
+    }
+    Js::JavascriptString* specifierVar = Js::JavascriptString::NewCopySz(specifier, GetScriptContext());
+    JsModuleRecord dependentRecord = JS_INVALID_REFERENCE;
+    {
+        AUTO_NO_EXCEPTION_REGION;
+        JsErrorCode errorCode = fetchImportedModuleCallback(referencingModule, specifierVar, &dependentRecord);
+        if (errorCode == JsNoError)
         {
         {
-            return fetchImportedModuleCallback(referencingModule, specifierVar, dependentRecord);
-        }, specifier, dependentModuleRecord);
+            *dependentModuleRecord = static_cast<Js::ModuleRecordBase*>(dependentRecord);
+            return NOERROR;
+        }
+    }
+    return E_INVALIDARG;
 }
 }
 
 
 HRESULT ChakraCoreHostScriptContext::FetchImportedModuleFromScript(JsSourceContext dwReferencingSourceContext, LPCOLESTR specifier, Js::ModuleRecordBase** dependentModuleRecord)
 HRESULT ChakraCoreHostScriptContext::FetchImportedModuleFromScript(JsSourceContext dwReferencingSourceContext, LPCOLESTR specifier, Js::ModuleRecordBase** dependentModuleRecord)
 {
 {
-    return FetchImportedModuleHelper(
-        [=](Js::JavascriptString *specifierVar, JsModuleRecord *dependentRecord) -> JsErrorCode
-    {
-        return fetchImportedModuleFromScriptCallback(dwReferencingSourceContext, specifierVar, dependentRecord);
-    }, specifier, dependentModuleRecord);
-}
-
-template<typename Fn>
-HRESULT ChakraCoreHostScriptContext::FetchImportedModuleHelper(Fn fetch, LPCOLESTR specifier, Js::ModuleRecordBase** dependentModuleRecord)
-{
-    if (fetchImportedModuleCallback == nullptr)
+    if (fetchImportedModuleFromScriptCallback == nullptr)
     {
     {
         return E_INVALIDARG;
         return E_INVALIDARG;
     }
     }
@@ -132,7 +134,7 @@ HRESULT ChakraCoreHostScriptContext::FetchImportedModuleHelper(Fn fetch, LPCOLES
     JsModuleRecord dependentRecord = JS_INVALID_REFERENCE;
     JsModuleRecord dependentRecord = JS_INVALID_REFERENCE;
     {
     {
         AUTO_NO_EXCEPTION_REGION;
         AUTO_NO_EXCEPTION_REGION;
-        JsErrorCode errorCode = fetch(specifierVar, &dependentRecord);
+        JsErrorCode errorCode = fetchImportedModuleFromScriptCallback(dwReferencingSourceContext, specifierVar, &dependentRecord);
         if (errorCode == JsNoError)
         if (errorCode == JsNoError)
         {
         {
             *dependentModuleRecord = static_cast<Js::ModuleRecordBase*>(dependentRecord);
             *dependentModuleRecord = static_cast<Js::ModuleRecordBase*>(dependentRecord);

+ 1 - 2
lib/Jsrt/Core/JsrtContextCore.h

@@ -1,5 +1,6 @@
 //-------------------------------------------------------------------------------------------------------
 //-------------------------------------------------------------------------------------------------------
 // Copyright (C) Microsoft. All rights reserved.
 // Copyright (C) Microsoft. All rights reserved.
+// Copyright (c) ChakraCore Project Contributors. All rights reserved.
 // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
 // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
 //-------------------------------------------------------------------------------------------------------
 //-------------------------------------------------------------------------------------------------------
 #pragma once
 #pragma once
@@ -266,8 +267,6 @@ public:
 #endif
 #endif
 
 
 private:
 private:
-    template<typename Fn>
-    HRESULT FetchImportedModuleHelper(Fn fetch, LPCOLESTR specifier, Js::ModuleRecordBase** dependentModuleRecord);
     FetchImportedModuleCallBack fetchImportedModuleCallback;
     FetchImportedModuleCallBack fetchImportedModuleCallback;
     FetchImportedModuleFromScriptCallBack fetchImportedModuleFromScriptCallback;
     FetchImportedModuleFromScriptCallBack fetchImportedModuleFromScriptCallback;
     NotifyModuleReadyCallback notifyModuleReadyCallback;
     NotifyModuleReadyCallback notifyModuleReadyCallback;

+ 5 - 1
lib/Jsrt/Core/JsrtCore.cpp

@@ -1,6 +1,6 @@
 //-------------------------------------------------------------------------------------------------------
 //-------------------------------------------------------------------------------------------------------
 // Copyright (C) Microsoft. All rights reserved.
 // Copyright (C) Microsoft. All rights reserved.
-// Copyright (c) 2021 ChakraCore Project Contributors. All rights reserved.
+// Copyright (c) ChakraCore Project Contributors. All rights reserved.
 // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
 // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
 //-------------------------------------------------------------------------------------------------------
 //-------------------------------------------------------------------------------------------------------
 #include "JsrtPch.h"
 #include "JsrtPch.h"
@@ -268,6 +268,10 @@ CHAKRA_API JsGetModuleNamespace(_In_ JsModuleRecord requestModule, _Outptr_resul
     {
     {
         return JsErrorModuleNotEvaluated;
         return JsErrorModuleNotEvaluated;
     }
     }
+    if (moduleRecord->GetErrorObject() != nullptr)
+    {
+        return JsErrorInvalidArgument;
+    }
     *moduleNamespace = static_cast<JsValueRef>(moduleRecord->GetNamespace());
     *moduleNamespace = static_cast<JsValueRef>(moduleRecord->GetNamespace());
     return JsNoError;
     return JsNoError;
 }
 }