Forum Stats

  • 3,826,039 Users
  • 2,260,589 Discussions


Bug in berkeleydb SQL implementation of custom PRAGMAs

I have found a bug in the implementation of the custom PRAGMAs in the berkeleydb SQLite code.

Specifically, db-18.1.32/lang/sql/adapter/db_pragma.c in the code that configures the output column name for returning the value of a pragma.

As an example, the implementation of the "multiversion" PRAGMA, line 644:

sqlite3VdbeSetColName(v, 0, COLNAME_NAME, zLeft, SQLITE_STATIC)

The use of SQLITE_STATIC implies that the pointer to the column name will be guaranteed valid by the caller. This isn't the case, however, and as a result there is corruption in the column name.

To avoid this, I've managed to patch the code locally changing SQLITE_STATIC to SQLITE_TRANSIENT -- this tells sqlite to make a copy of the string. With this patch, the column name is set correctly and communicated correctly to the code issuing the query.

I hope you can patch this in a subsequent version.