diff src/lib-sql/sql-api.c @ 3879:928229f8b3e6 HEAD

deinit, unref, destroy, close, free, etc. functions now take a pointer to their data pointer, and set it to NULL. This makes double-frees less likely to cause security holes.
author Timo Sirainen <tss@iki.fi>
date Sat, 14 Jan 2006 20:47:20 +0200
parents 3dd0ab18d8da
children b967ffb7e3a6
line wrap: on
line diff
--- a/src/lib-sql/sql-api.c	Sat Jan 14 19:23:22 2006 +0200
+++ b/src/lib-sql/sql-api.c	Sat Jan 14 20:47:20 2006 +0200
@@ -26,9 +26,10 @@
 	i_fatal("Unknown database driver '%s'", db_driver);
 }
 
-void sql_deinit(struct sql_db *db)
+void sql_deinit(struct sql_db **db)
 {
-	db->deinit(db);
+	(*db)->deinit(*db);
+	*db = NULL;
 }
 
 enum sql_db_flags sql_get_flags(struct sql_db *db)
@@ -127,20 +128,29 @@
 	return db->transaction_begin(db);
 }
 
-void sql_transaction_commit(struct sql_transaction_context *ctx,
+void sql_transaction_commit(struct sql_transaction_context **_ctx,
 			    sql_commit_callback_t *callback, void *context)
 {
+	struct sql_transaction_context *ctx = *_ctx;
+
+	*_ctx = NULL;
 	ctx->db->transaction_commit(ctx, callback, context);
 }
 
-int sql_transaction_commit_s(struct sql_transaction_context *ctx,
+int sql_transaction_commit_s(struct sql_transaction_context **_ctx,
 			     const char **error_r)
 {
+	struct sql_transaction_context *ctx = *_ctx;
+
+	*_ctx = NULL;
 	return ctx->db->transaction_commit_s(ctx, error_r);
 }
 
-void sql_transaction_rollback(struct sql_transaction_context *ctx)
+void sql_transaction_rollback(struct sql_transaction_context **_ctx)
 {
+	struct sql_transaction_context *ctx = *_ctx;
+
+	*_ctx = NULL;
 	ctx->db->transaction_rollback(ctx);
 }