Skip to content

Commit ecd238a

Browse files
targoslouwers
authored andcommitted
sqlite: return results with null prototype
These objects are dictionaries, and a query can return columns with special names like `__proto__` (which would be ignored without this change). Also construct the object by passing vectors of properties for better performance and improve error handling by using `MaybeLocal`. PR-URL: nodejs#54350 Reviewed-By: Benjamin Gruenbaum <[email protected]> Reviewed-By: Yagiz Nizipli <[email protected]> Reviewed-By: Franziska Hinkelmann <[email protected]> Reviewed-By: James M Snell <[email protected]>
1 parent 89ed690 commit ecd238a

1 file changed

Lines changed: 8 additions & 17 deletions

File tree

src/node_sqlite.cc

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -757,32 +757,23 @@ void StatementSync::All(const FunctionCallbackInfo<Value>& args) {
757757
auto reset = OnScopeLeave([&]() { sqlite3_reset(stmt->statement_); });
758758
int num_cols = sqlite3_column_count(stmt->statement_);
759759
LocalVector<Value> rows(isolate);
760-
LocalVector<Name> row_keys(isolate);
761760
while ((r = sqlite3_step(stmt->statement_)) == SQLITE_ROW) {
762-
if (row_keys.size() == 0) {
763-
row_keys.reserve(num_cols);
764-
765-
for (int i = 0; i < num_cols; ++i) {
766-
Local<Name> key;
767-
if (!stmt->ColumnNameToName(i).ToLocal(&key)) return;
768-
row_keys.emplace_back(key);
769-
}
770-
}
771-
761+
LocalVector<Name> row_keys(isolate);
762+
row_keys.reserve(num_cols);
772763
LocalVector<Value> row_values(isolate);
773764
row_values.reserve(num_cols);
774765

775-
for (size_t i = 0; i < row_keys.size(); ++i) {
766+
for (int i = 0; i < num_cols; ++i) {
767+
Local<Name> key;
768+
if (!stmt->ColumnNameToName(i).ToLocal(&key)) return;
776769
Local<Value> val;
777770
if (!stmt->ColumnToValue(i).ToLocal(&val)) return;
771+
row_keys.emplace_back(key);
778772
row_values.emplace_back(val);
779773
}
780774

781-
Local<Object> row = Object::New(isolate,
782-
Null(isolate),
783-
row_keys.data(),
784-
row_values.data(),
785-
row_keys.size());
775+
Local<Object> row = Object::New(
776+
isolate, Null(isolate), row_keys.data(), row_values.data(), num_cols);
786777
rows.emplace_back(row);
787778
}
788779

0 commit comments

Comments
 (0)