Desciption: Deal with the "use after free" error

occurs while debugging ark_js_vm executable on
windows.

Details: Enclose the part where the LocalScope
object should take effect with a pair of braces.
Thus, the destructor of the LocalScope object
will be called at the right brace which is above
the JSNApi::DestroyJSVM() function.

Issue: https://gitee.com/openharmony/ark_js_runtime/issues/I5C7XG

Signed-off-by: Gongyuhang <gongyuhang5@huawei.com>
This commit is contained in:
Gongyuhang 2022-06-14 16:13:59 +08:00
parent 43e0608f7d
commit 496687fe52
2 changed files with 34 additions and 29 deletions

View File

@ -110,29 +110,32 @@ int Main(const int argc, const char **argv)
return -1;
}
LocalScope scope(vm);
std::string entry = entrypoint.GetValue();
arg_list_t pandaFileNames = files.GetValue();
std::string triple = runtimeOptions.GetTargetTriple();
std::string outputFileName = runtimeOptions.GetAOTOutputFile();
size_t optLevel = runtimeOptions.GetOptLevel();
BytecodeStubCSigns::Initialize();
CommonStubCSigns::Initialize();
RuntimeStubCSigns::Initialize();
{
LocalScope scope(vm);
std::string entry = entrypoint.GetValue();
arg_list_t pandaFileNames = files.GetValue();
std::string triple = runtimeOptions.GetTargetTriple();
std::string outputFileName = runtimeOptions.GetAOTOutputFile();
size_t optLevel = runtimeOptions.GetOptLevel();
BytecodeStubCSigns::Initialize();
CommonStubCSigns::Initialize();
RuntimeStubCSigns::Initialize();
std::string logMethods = vm->GetJSOptions().GetlogCompiledMethods();
AotLog log(logMethods);
AOTFileGenerator generator(&log, vm);
PassManager passManager(vm, entry, triple, optLevel, &log);
for (const auto &fileName : pandaFileNames) {
COMPILER_LOG(INFO) << "AOT start to execute ark file: " << fileName;
if (passManager.Compile(fileName, generator) == false) {
ret = false;
break;
std::string logMethods = vm->GetJSOptions().GetlogCompiledMethods();
AotLog log(logMethods);
AOTFileGenerator generator(&log, vm);
PassManager passManager(vm, entry, triple, optLevel, &log);
for (const auto &fileName : pandaFileNames) {
COMPILER_LOG(INFO) << "AOT start to execute ark file: " << fileName;
if (passManager.Compile(fileName, generator) == false) {
ret = false;
break;
}
}
generator.SaveAOTFile(outputFileName);
generator.GenerateSnapshotFile();
}
generator.SaveAOTFile(outputFileName);
generator.GenerateSnapshotFile();
JSNApi::DestroyJSVM(vm);
paParser.DisableTail();
return ret ? 0 : -1;

View File

@ -109,16 +109,18 @@ int Main(const int argc, const char **argv)
return -1;
}
LocalScope scope(vm);
std::string entry = entrypoint.GetValue();
{
LocalScope scope(vm);
std::string entry = entrypoint.GetValue();
arg_list_t fileNames = files.GetValue();
for (const auto &fileName : fileNames) {
auto res = JSNApi::Execute(vm, fileName, entry);
if (!res) {
std::cerr << "Cannot execute panda file '" << fileName << "' with entry '" << entry << "'" << std::endl;
ret = false;
break;
arg_list_t fileNames = files.GetValue();
for (const auto &fileName : fileNames) {
auto res = JSNApi::Execute(vm, fileName, entry);
if (!res) {
std::cerr << "Cannot execute panda file '" << fileName << "' with entry '" << entry << "'" << std::endl;
ret = false;
break;
}
}
}