berkeley_db: cdb_next_item() use DB_REALLOC, not DB_MALLOC
authorArt Cancro <ajc@citadel.org>
Wed, 6 Sep 2023 03:04:50 +0000 (23:04 -0400)
committerArt Cancro <ajc@citadel.org>
Wed, 6 Sep 2023 03:04:50 +0000 (23:04 -0400)
Fixes a 'Brown Paper Bug' that will leak memory ... catastrophically if ctdldump is run on a big db.

citadel/server/backends/berkeley_db/berkeley_db.c

index b36c3c1058459969d7873bd717c3c300a4392b3c..59b29ce7f78c8d78679902dbfaa1f03cd0bf2559 100644 (file)
@@ -558,8 +558,8 @@ struct cdbkeyval bdb_next_item(int cdb) {
        memset(&kv, 0, sizeof(struct cdbkeyval));
 
        // reuse memory from the previous call.
-       TSD->dbkey[cdb].flags = DB_DBT_MALLOC;
-       TSD->dbdata[cdb].flags = DB_DBT_MALLOC;
+       TSD->dbkey[cdb].flags = DB_DBT_REALLOC;
+       TSD->dbdata[cdb].flags = DB_DBT_REALLOC;
 
        assert(TSD->cursors[cdb] != NULL);
        ret = TSD->cursors[cdb]->c_get(TSD->cursors[cdb], &TSD->dbkey[cdb], &TSD->dbdata[cdb], DB_NEXT);