Skip to content

Commit

Permalink
Merge pull request #5284 from ftapajos/master
Browse files Browse the repository at this point in the history
Solves omlibdbi+sqlite3 dirname problem without creating use-after-free problem
  • Loading branch information
rgerhards committed Dec 8, 2023
2 parents 0d1e6af + 68491c2 commit 7610a08
Showing 1 changed file with 9 additions and 3 deletions.
12 changes: 9 additions & 3 deletions plugins/omlibdbi/omlibdbi.c
Original file line number Diff line number Diff line change
Expand Up @@ -290,9 +290,15 @@ static rsRetVal initConn(instanceData *pData, int bSilent)
int is_sqlite2 = !strcmp((const char *)pData->drvrName, "sqlite");
int is_sqlite3 = !strcmp((const char *)pData->drvrName, "sqlite3");
if(is_sqlite2 || is_sqlite3) {
dbi_conn_set_option(pData->conn, is_sqlite3 ? "sqlite3_dbdir" : "sqlite_dbdir",
dirname((char *)pData->dbName));
dbi_conn_set_option(pData->conn, "dbname", basename((char *)pData->dbName ));
char *const dn_org = strdup((char*)pData->dbName);
char *const dn = dirname(dn_org);
dbi_conn_set_option(pData->conn, is_sqlite3 ? "sqlite3_dbdir" : "sqlite_dbdir",dn);
free(dn_org); /* Free original buffer - dirname may return different pointer */

char *tmp = strdup((char*)pData->dbName);
char *bn = basename(tmp);
dbi_conn_set_option(pData->conn, "dbname", bn);
free(tmp);
} else {
dbi_conn_set_option(pData->conn, "dbname", (char*) pData->dbName);
}
Expand Down

0 comments on commit 7610a08

Please sign in to comment.