diff options
author | 2022-08-08 15:54:13 +0800 | |
---|---|---|
committer | 2022-08-08 00:54:13 -0700 | |
commit | 463f2b7dabcc3fa9d90a14b88ce81262abdd71c7 (patch) | |
tree | ff88ccd489f9cf10a62b78ea73f6d7313aecb301 /src/bun.js/bindings/sqlite/JSSQLStatement.cpp | |
parent | a6b089bd175e69bb96d1615bf07ff3f6e88dfa12 (diff) | |
download | bun-463f2b7dabcc3fa9d90a14b88ce81262abdd71c7.tar.gz bun-463f2b7dabcc3fa9d90a14b88ce81262abdd71c7.tar.zst bun-463f2b7dabcc3fa9d90a14b88ce81262abdd71c7.zip |
fix segfault for query().all() with more than 64 properties (#1025)
* fix segfault for query().all() with more than 64 properties
* Update src/bun.js/bindings/sqlite/JSSQLStatement.cpp
Co-authored-by: Jarred Sumner <jarred@jarredsumner.com>
Diffstat (limited to 'src/bun.js/bindings/sqlite/JSSQLStatement.cpp')
-rw-r--r-- | src/bun.js/bindings/sqlite/JSSQLStatement.cpp | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/src/bun.js/bindings/sqlite/JSSQLStatement.cpp b/src/bun.js/bindings/sqlite/JSSQLStatement.cpp index 7f90360f6..98a4e729e 100644 --- a/src/bun.js/bindings/sqlite/JSSQLStatement.cpp +++ b/src/bun.js/bindings/sqlite/JSSQLStatement.cpp @@ -886,10 +886,17 @@ static inline JSC::JSValue constructResultObject(JSC::JSGlobalObject* lexicalGlo int count = columnNames.size(); auto& vm = lexicalGlobalObject->vm(); + // 64 is the maximum we can preallocate here + // see https://github.com/oven-sh/bun/issues/987 #if SQL_USE_PROTOTYPE == 1 - JSC::JSObject* result = JSC::JSFinalObject::create(vm, castedThis->_prototype.get()->structure()); + JSC::JSObject* result; + if (count <= 64) { + result = JSC::JSFinalObject::create(vm, castedThis->_prototype.get()->structure()); + } else { + result = JSC::JSFinalObject::create(vm, JSC::JSFinalObject::createStructure(vm, lexicalGlobalObject, lexicalGlobalObject->objectPrototype(), count)); + } #else - JSC::JSObject* result = JSC::JSFinalObject::create(vm, JSC::JSFinalObject::createStructure(vm, lexicalGlobalObject, lexicalGlobalObject->objectPrototype(), count)); + JSC::JSObject* result = JSC::JSFinalObject::create(vm, JSC::JSFinalObject::createStructure(vm, lexicalGlobalObject, lexicalGlobalObject->objectPrototype(), std::min(count, 64))); #endif auto* stmt = castedThis->stmt; |