diff --git a/src/node_cjs_lexer.cc b/src/node_cjs_lexer.cc index a35a081f640479..88ab272a6f5505 100644 --- a/src/node_cjs_lexer.cc +++ b/src/node_cjs_lexer.cc @@ -67,25 +67,26 @@ void Parse(const FunctionCallbackInfo& args) { const auto& analysis = result.value(); - // Convert exports to JS Set + // Convert exports to JS Set, omitting any name that cannot be turned into a + // V8 string (e.g. on string allocation failure) instead of aborting. Local exports_set = Set::New(isolate); for (const auto& exp : analysis.exports) { Local exp_str; - if (!CreateString(isolate, exp).ToLocal(&exp_str) || + if (CreateString(isolate, exp).ToLocal(&exp_str) && exports_set->Add(context, exp_str).IsEmpty()) { return; } } - // Convert reexports to JS array using batch creation + // Convert reexports to JS array, omitting any name that cannot be turned into + // a V8 string. LocalVector reexports_vec(isolate); reexports_vec.reserve(analysis.re_exports.size()); for (const auto& reexp : analysis.re_exports) { Local reexp_str; - if (!CreateString(isolate, reexp).ToLocal(&reexp_str)) { - return; + if (CreateString(isolate, reexp).ToLocal(&reexp_str)) { + reexports_vec.push_back(reexp_str); } - reexports_vec.push_back(reexp_str); } // Create result array [exports (Set), reexports (Array)]