Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | For sqlite3.oo1.DB JavaScript classes, bypass execution of any on-open() SQL in SEE-capable builds because it would necessarily run before the client has an opportunity to provide their decryption key, which would leave the db handle in an unusable state and cause the ctor to throw. This currently affects only the OPFS VFSes. We may want to consider extending the ctor options object to optionally accept an SEE key and apply it when opening the db. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
5c505ee8a73f4b4a7053d98a12024d98 |
User & Date: | stephan 2024-04-22 11:48:03 |
References
2024-04-22
| ||
16:46 | Extend the JS/WASM SEE build support by (A) filtering SEE-related bits out of the JS when not building with SEE and (B) accepting an optional key/textkey/hexkey option to the sqlite3.oo1.DB and subclass constructors to create/open SEE-encrypted databases with. Demonstrate SEE in the test app using the kvvfs. This obviates the changes made in [5c505ee8a7]. (check-in: 8fbda563 user: stephan tags: trunk) | |
Context
2024-04-22
| ||
13:31 | Extra robustness in the code that causes cursors to return NULL when they are participating in an OUTER JOIN. (check-in: 672c2869 user: drh tags: trunk) | |
11:48 | For sqlite3.oo1.DB JavaScript classes, bypass execution of any on-open() SQL in SEE-capable builds because it would necessarily run before the client has an opportunity to provide their decryption key, which would leave the db handle in an unusable state and cause the ctor to throw. This currently affects only the OPFS VFSes. We may want to consider extending the ctor options object to optionally accept an SEE key and apply it when opening the db. (check-in: 5c505ee8 user: stephan tags: trunk) | |
00:42 | Continuation of the fix at [8c0f69e0e4ae0a44]: If a viaCoroutine FROM clause term is participating in a RIGHT or FULL JOIN, we have to create an always-NULL pseudo-cursor for that term when processing the RIGHT join. dbsqlfuzz 6fd1ff3a64bef4a6c092e8d757548e95698b0df5. (check-in: e1040e51 user: drh tags: trunk) | |
Changes
Changes to ext/wasm/api/sqlite3-api-oo1.js.
︙ | ︙ | |||
175 176 177 178 179 180 181 | __ptrMap.set(this, pDb); __stmtMap.set(this, Object.create(null)); try{ // Check for per-VFS post-open SQL/callback... const pVfs = capi.sqlite3_js_db_vfs(pDb); if(!pVfs) toss3("Internal error: cannot get VFS for new db handle."); const postInitSql = __vfsPostOpenSql[pVfs]; | > > > > > > > > > > > > > > > > > | | | | | | > | 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 | __ptrMap.set(this, pDb); __stmtMap.set(this, Object.create(null)); try{ // Check for per-VFS post-open SQL/callback... const pVfs = capi.sqlite3_js_db_vfs(pDb); if(!pVfs) toss3("Internal error: cannot get VFS for new db handle."); const postInitSql = __vfsPostOpenSql[pVfs]; if(postInitSql){ if(capi.sqlite3_activate_see){ /** In SEE-capable builds we have to avoid running any db code before the client has an opportunity to apply their decryption key. If we first run any db code, e.g. pragma journal_mode=..., then it will fail with SQLITE_NOTADB and the db handle will be left in an unusuable state. Note that at this point we do not actually know whether the db is encrypted, but if a client has gone out of their way to create an SEE build, it seems safe to assume that they are using the encryption. */ sqlite3.config.warn( "Disabling execution of on-open() db code "+ "because this is an SEE build. DB: "+fnJs ); }else if(postInitSql instanceof Function){ postInitSql(this, sqlite3); }else{ checkSqlite3Rc( pDb, capi.sqlite3_exec(pDb, postInitSql, 0, 0, 0) ); } } }catch(e){ this.close(); throw e; } }; |
︙ | ︙ | |||
284 285 286 287 288 289 290 | C-strings allocated via WASM. `flags` is required to be a JS string (because it's specific to this API, which is specific to JS). For purposes of passing a DB instance to C-style sqlite3 functions, the DB object's read-only `pointer` property holds its `sqlite3*` pointer value. That property can also be used to check | | > | 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 | C-strings allocated via WASM. `flags` is required to be a JS string (because it's specific to this API, which is specific to JS). For purposes of passing a DB instance to C-style sqlite3 functions, the DB object's read-only `pointer` property holds its `sqlite3*` pointer value. That property can also be used to check whether this DB instance is still open: it will evaluate to `undefined` after the DB object's close() method is called. In the main window thread, the filenames `":localStorage:"` and `":sessionStorage:"` are special: they cause the db to use either localStorage or sessionStorage for storing the database using the kvvfs. If one of these names are used, they trump any vfs name set in the arguments. */ |
︙ | ︙ |