Index: src/inspector/v8-debugger.cc |
diff --git a/src/inspector/v8-debugger.cc b/src/inspector/v8-debugger.cc |
index 82d470383513f929bb142b68b21360eb029c385f..d393f81ad4a38a3a5ebf6ce4a92973c0fe91646b 100644 |
--- a/src/inspector/v8-debugger.cc |
+++ b/src/inspector/v8-debugger.cc |
@@ -791,16 +791,30 @@ v8::Local<v8::Value> V8Debugger::collectionEntries( |
v8::Local<v8::Value> argv[] = {object}; |
v8::Local<v8::Value> entriesValue = |
callDebuggerMethod("getCollectionEntries", 1, argv).ToLocalChecked(); |
- v8::Local<v8::Value> copied; |
- if (!copyValueFromDebuggerContext(m_isolate, debuggerContext(), context, |
- entriesValue) |
- .ToLocal(&copied) || |
- !copied->IsArray()) |
+ if (!entriesValue->IsArray()) return v8::Undefined(m_isolate); |
+ |
+ v8::Local<v8::Array> entries = entriesValue.As<v8::Array>(); |
+ v8::Local<v8::Array> copiedArray = |
+ v8::Array::New(m_isolate, entries->Length()); |
+ if (!copiedArray->SetPrototype(context, v8::Null(m_isolate)).FromMaybe(false)) |
return v8::Undefined(m_isolate); |
- if (!markArrayEntriesAsInternal(context, v8::Local<v8::Array>::Cast(copied), |
+ for (uint32_t i = 0; i < entries->Length(); ++i) { |
+ v8::Local<v8::Value> item; |
+ if (!entries->Get(debuggerContext(), i).ToLocal(&item)) |
+ return v8::Undefined(m_isolate); |
+ v8::Local<v8::Value> copied; |
+ if (!copyValueFromDebuggerContext(m_isolate, debuggerContext(), context, |
+ item) |
+ .ToLocal(&copied)) |
+ return v8::Undefined(m_isolate); |
+ if (!createDataProperty(context, copiedArray, i, copied).FromMaybe(false)) |
+ return v8::Undefined(m_isolate); |
+ } |
+ if (!markArrayEntriesAsInternal(context, |
+ v8::Local<v8::Array>::Cast(copiedArray), |
V8InternalValueType::kEntry)) |
return v8::Undefined(m_isolate); |
- return copied; |
+ return copiedArray; |
} |
v8::Local<v8::Value> V8Debugger::generatorObjectLocation( |