Hello !
When testing one application that uses sqlite3 with "-fsanitize=address" I
was getting an error:
==1310==ERROR: AddressSanitizer: heap-use-after-free on address
And after study the code I found that the problem is in the function
openDatabase in src/main.c , it only happens when SQLITE_HAS_CODEC is
defined.
And because "zOpen" was passed to "free" some lines up we have the problem.
One solution I found is to move the call to "free(zOpen);" to just before
return;
---------
--- /home/xxxxx/dev/sqlite3-00/src/main.c
+++ /home/xxxxx/sqlite3-00/src/main2.c
@@ -2969,7 +2969,6 @@
?? sqlite3_wal_autocheckpoint(db, SQLITE_DEFAULT_WAL_AUTOCHECKPOINT);
?
?opendb_out:
-? sqlite3_free(zOpen);
?? if( db ){
???? assert( db->mutex!=0 || isThreadsafe==0
??????????? || sqlite3GlobalConfig.bFullMutex==0 );
@@ -3006,6 +3005,8 @@
???? }
?? }
?#endif
+? /*moved here because when SQLITE_HAS_CODEC is defined it access zOpen*/
+? sqlite3_free(zOpen);
?? return rc & 0xff;
?}
-------
Cheers !
?