diff --git a/libsql-ffi/bundled/SQLite3MultipleCiphers/src/sqlite3.c b/libsql-ffi/bundled/SQLite3MultipleCiphers/src/sqlite3.c index d5a72ca3c3..c840cb8032 100644 --- a/libsql-ffi/bundled/SQLite3MultipleCiphers/src/sqlite3.c +++ b/libsql-ffi/bundled/SQLite3MultipleCiphers/src/sqlite3.c @@ -127426,12 +127426,20 @@ SQLITE_PRIVATE KeyInfo *sqlite3KeyInfoOfIndex(Parse *pParse, Index *pIdx){ pKey = sqlite3KeyInfoAlloc(pParse->db, nCol, 0); } if( pKey ){ - iDb = sqlite3SchemaToIndex(pParse->db, pIdx->pSchema); assert( sqlite3KeyInfoIsWriteable(pKey) ); - pKey->zIndexName = sqlite3DbStrDup(pParse->db, pIdx->zName); + + iDb = sqlite3SchemaToIndex(pParse->db, pIdx->pSchema); if( 0 <= iDb && iDb < pParse->db->nDb ){ pKey->zDbSName = sqlite3DbStrDup(pParse->db, pParse->db->aDb[iDb].zDbSName); + if( pKey->zDbSName == NULL ){ + goto out_nomem; + } } + pKey->zIndexName = sqlite3DbStrDup(pParse->db, pIdx->zName); + if( pKey->zIndexName == NULL ){ + goto out_nomem; + } + for(i=0; iazColl[i]; pKey->aColl[i] = zColl==sqlite3StrBINARY ? 0 : @@ -127457,6 +127465,11 @@ SQLITE_PRIVATE KeyInfo *sqlite3KeyInfoOfIndex(Parse *pParse, Index *pIdx){ } } return pKey; +out_nomem: + if( pKey != NULL ){ + sqlite3KeyInfoUnref(pKey); + } + return sqlite3OomFault(pParse->db); } #ifndef SQLITE_OMIT_CTE diff --git a/libsql-ffi/bundled/src/sqlite3.c b/libsql-ffi/bundled/src/sqlite3.c index d5a72ca3c3..c840cb8032 100644 --- a/libsql-ffi/bundled/src/sqlite3.c +++ b/libsql-ffi/bundled/src/sqlite3.c @@ -127426,12 +127426,20 @@ SQLITE_PRIVATE KeyInfo *sqlite3KeyInfoOfIndex(Parse *pParse, Index *pIdx){ pKey = sqlite3KeyInfoAlloc(pParse->db, nCol, 0); } if( pKey ){ - iDb = sqlite3SchemaToIndex(pParse->db, pIdx->pSchema); assert( sqlite3KeyInfoIsWriteable(pKey) ); - pKey->zIndexName = sqlite3DbStrDup(pParse->db, pIdx->zName); + + iDb = sqlite3SchemaToIndex(pParse->db, pIdx->pSchema); if( 0 <= iDb && iDb < pParse->db->nDb ){ pKey->zDbSName = sqlite3DbStrDup(pParse->db, pParse->db->aDb[iDb].zDbSName); + if( pKey->zDbSName == NULL ){ + goto out_nomem; + } } + pKey->zIndexName = sqlite3DbStrDup(pParse->db, pIdx->zName); + if( pKey->zIndexName == NULL ){ + goto out_nomem; + } + for(i=0; iazColl[i]; pKey->aColl[i] = zColl==sqlite3StrBINARY ? 0 : @@ -127457,6 +127465,11 @@ SQLITE_PRIVATE KeyInfo *sqlite3KeyInfoOfIndex(Parse *pParse, Index *pIdx){ } } return pKey; +out_nomem: + if( pKey != NULL ){ + sqlite3KeyInfoUnref(pKey); + } + return sqlite3OomFault(pParse->db); } #ifndef SQLITE_OMIT_CTE diff --git a/libsql-sqlite3/src/build.c b/libsql-sqlite3/src/build.c index 80a90663ce..afba9b58d7 100644 --- a/libsql-sqlite3/src/build.c +++ b/libsql-sqlite3/src/build.c @@ -5635,12 +5635,20 @@ KeyInfo *sqlite3KeyInfoOfIndex(Parse *pParse, Index *pIdx){ pKey = sqlite3KeyInfoAlloc(pParse->db, nCol, 0); } if( pKey ){ - iDb = sqlite3SchemaToIndex(pParse->db, pIdx->pSchema); assert( sqlite3KeyInfoIsWriteable(pKey) ); - pKey->zIndexName = sqlite3DbStrDup(pParse->db, pIdx->zName); + + iDb = sqlite3SchemaToIndex(pParse->db, pIdx->pSchema); if( 0 <= iDb && iDb < pParse->db->nDb ){ pKey->zDbSName = sqlite3DbStrDup(pParse->db, pParse->db->aDb[iDb].zDbSName); + if( pKey->zDbSName == NULL ){ + goto out_nomem; + } } + pKey->zIndexName = sqlite3DbStrDup(pParse->db, pIdx->zName); + if( pKey->zIndexName == NULL ){ + goto out_nomem; + } + for(i=0; iazColl[i]; pKey->aColl[i] = zColl==sqlite3StrBINARY ? 0 : @@ -5666,6 +5674,11 @@ KeyInfo *sqlite3KeyInfoOfIndex(Parse *pParse, Index *pIdx){ } } return pKey; +out_nomem: + if( pKey != NULL ){ + sqlite3KeyInfoUnref(pKey); + } + return sqlite3OomFault(pParse->db); } #ifndef SQLITE_OMIT_CTE