diff options
Diffstat (limited to 'lib/dbwrap')
-rw-r--r-- | lib/dbwrap/dbwrap.c | 6 | ||||
-rw-r--r-- | lib/dbwrap/dbwrap_tdb.c | 8 |
2 files changed, 10 insertions, 4 deletions
diff --git a/lib/dbwrap/dbwrap.c b/lib/dbwrap/dbwrap.c index 33f0b91ea03..baab0338088 100644 --- a/lib/dbwrap/dbwrap.c +++ b/lib/dbwrap/dbwrap.c @@ -562,6 +562,12 @@ NTSTATUS dbwrap_do_locked(struct db_context *db, TDB_DATA key, return NT_STATUS_NO_MEMORY; } + /* + * Invalidate rec->value, nobody shall assume it's set from + * within dbwrap_do_locked(). + */ + rec->value_valid = false; + fn(rec, rec->value, private_data); TALLOC_FREE(rec); diff --git a/lib/dbwrap/dbwrap_tdb.c b/lib/dbwrap/dbwrap_tdb.c index e855f1ed2d6..74b895a7736 100644 --- a/lib/dbwrap/dbwrap_tdb.c +++ b/lib/dbwrap/dbwrap_tdb.c @@ -214,14 +214,14 @@ static NTSTATUS db_tdb_do_locked(struct db_context *db, TDB_DATA key, rec = (struct db_record) { .db = db, .key = key, - .value = (struct TDB_DATA) { .dptr = buf, - .dsize = talloc_get_size(buf) }, - .value_valid = true, + .value_valid = false, .storev = db_tdb_storev, .delete_rec = db_tdb_delete, .private_data = ctx }; - fn(&rec, rec.value, private_data); + fn(&rec, + (TDB_DATA) { .dptr = buf, .dsize = talloc_get_size(buf) }, + private_data); tdb_chainunlock(ctx->wtdb->tdb, key); |