[dovecot-cvs] dovecot/src/lib-storage mail-copy.c, 1.5,
1.6 mail-storage.c, 1.45, 1.46 mail-storage.h, 1.101,
1.102 mail.c, 1.3, 1.4
cras at dovecot.org
cras at dovecot.org
Sat Jan 14 20:47:43 EET 2006
- Previous message: [dovecot-cvs] dovecot/src/lib-sql driver-mysql.c, 1.12,
1.13 driver-pgsql.c, 1.7, 1.8 sql-api.c, 1.5, 1.6 sql-api.h,
1.5, 1.6
- Next message: [dovecot-cvs] dovecot/src/lib-storage/index index-mail-headers.c,
1.55, 1.56 index-mail.c, 1.88, 1.89 index-mailbox-check.c,
1.13, 1.14 index-search.c, 1.107, 1.108 index-storage.c, 1.80,
1.81 index-sync.c, 1.53, 1.54 index-transaction.c, 1.13, 1.14
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Update of /var/lib/cvs/dovecot/src/lib-storage
In directory talvi:/tmp/cvs-serv16037/lib-storage
Modified Files:
mail-copy.c mail-storage.c mail-storage.h mail.c
Log Message:
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.
Index: mail-copy.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-storage/mail-copy.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- mail-copy.c 7 Oct 2005 09:34:08 -0000 1.5
+++ mail-copy.c 14 Jan 2006 18:47:41 -0000 1.6
@@ -29,9 +29,9 @@
}
if (input->stream_errno != 0) {
- mailbox_save_cancel(ctx);
+ mailbox_save_cancel(&ctx);
return -1;
}
- return mailbox_save_finish(ctx, dest_mail);
+ return mailbox_save_finish(&ctx, dest_mail);
}
Index: mail-storage.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-storage/mail-storage.c,v
retrieving revision 1.45
retrieving revision 1.46
diff -u -d -r1.45 -r1.46
--- mail-storage.c 13 Jan 2006 20:26:24 -0000 1.45
+++ mail-storage.c 14 Jan 2006 18:47:41 -0000 1.46
@@ -145,10 +145,13 @@
return storage;
}
-void mail_storage_destroy(struct mail_storage *storage)
+void mail_storage_destroy(struct mail_storage **_storage)
{
+ struct mail_storage *storage = *_storage;
+
i_assert(storage != NULL);
+ *_storage = NULL;
storage->v.destroy(storage);
}
@@ -265,8 +268,11 @@
return ctx->storage->v.mailbox_list_next(ctx);
}
-int mail_storage_mailbox_list_deinit(struct mailbox_list_context *ctx)
+int mail_storage_mailbox_list_deinit(struct mailbox_list_context **_ctx)
{
+ struct mailbox_list_context *ctx = *_ctx;
+
+ *_ctx = NULL;
return ctx->storage->v.mailbox_list_deinit(ctx);
}
@@ -298,8 +304,11 @@
return storage->v.mailbox_open(storage, name, input, flags);
}
-int mailbox_close(struct mailbox *box)
+int mailbox_close(struct mailbox **_box)
{
+ struct mailbox *box = *_box;
+
+ *_box = NULL;
return box->v.close(box);
}
@@ -342,9 +351,12 @@
return ctx->box->v.sync_next(ctx, sync_rec_r);
}
-int mailbox_sync_deinit(struct mailbox_sync_context *ctx,
+int mailbox_sync_deinit(struct mailbox_sync_context **_ctx,
struct mailbox_status *status_r)
{
+ struct mailbox_sync_context *ctx = *_ctx;
+
+ *_ctx = NULL;
return ctx->box->v.sync_deinit(ctx, status_r);
}
@@ -362,8 +374,11 @@
}
void mailbox_keywords_free(struct mailbox_transaction_context *t,
- struct mail_keywords *keywords)
+ struct mail_keywords **_keywords)
{
+ struct mail_keywords *keywords = *_keywords;
+
+ *_keywords = NULL;
t->box->v.keywords_free(t, keywords);
}
@@ -379,8 +394,11 @@
return box->v.header_lookup_init(box, headers);
}
-void mailbox_header_lookup_deinit(struct mailbox_header_lookup_ctx *ctx)
+void mailbox_header_lookup_deinit(struct mailbox_header_lookup_ctx **_ctx)
{
+ struct mailbox_header_lookup_ctx *ctx = *_ctx;
+
+ *_ctx = NULL;
ctx->box->v.header_lookup_deinit(ctx);
}
@@ -398,8 +416,11 @@
return t->box->v.search_init(t, charset, args, sort_program);
}
-int mailbox_search_deinit(struct mail_search_context *ctx)
+int mailbox_search_deinit(struct mail_search_context **_ctx)
{
+ struct mail_search_context *ctx = *_ctx;
+
+ *_ctx = NULL;
return ctx->transaction->box->v.search_deinit(ctx);
}
@@ -415,14 +436,20 @@
return box->v.transaction_begin(box, flags);
}
-int mailbox_transaction_commit(struct mailbox_transaction_context *t,
+int mailbox_transaction_commit(struct mailbox_transaction_context **_t,
enum mailbox_sync_flags flags)
{
+ struct mailbox_transaction_context *t = *_t;
+
+ *_t = NULL;
return t->box->v.transaction_commit(t, flags);
}
-void mailbox_transaction_rollback(struct mailbox_transaction_context *t)
+void mailbox_transaction_rollback(struct mailbox_transaction_context **_t)
{
+ struct mailbox_transaction_context *t = *_t;
+
+ *_t = NULL;
t->box->v.transaction_rollback(t);
}
@@ -443,13 +470,19 @@
return ctx->transaction->box->v.save_continue(ctx);
}
-int mailbox_save_finish(struct mail_save_context *ctx, struct mail *dest_mail)
+int mailbox_save_finish(struct mail_save_context **_ctx, struct mail *dest_mail)
{
+ struct mail_save_context *ctx = *_ctx;
+
+ *_ctx = NULL;
return ctx->transaction->box->v.save_finish(ctx, dest_mail);
}
-void mailbox_save_cancel(struct mail_save_context *ctx)
+void mailbox_save_cancel(struct mail_save_context **_ctx)
{
+ struct mail_save_context *ctx = *_ctx;
+
+ *_ctx = NULL;
ctx->transaction->box->v.save_cancel(ctx);
}
Index: mail-storage.h
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-storage/mail-storage.h,v
retrieving revision 1.101
retrieving revision 1.102
diff -u -d -r1.101 -r1.102
--- mail-storage.h 13 Jan 2006 20:26:24 -0000 1.101
+++ mail-storage.h 14 Jan 2006 18:47:41 -0000 1.102
@@ -223,7 +223,7 @@
mail_storage_create(const char *name, const char *data, const char *user,
enum mail_storage_flags flags,
enum mail_storage_lock_method lock_method);
-void mail_storage_destroy(struct mail_storage *storage);
+void mail_storage_destroy(struct mail_storage **storage);
struct mail_storage *
mail_storage_create_default(const char *user, enum mail_storage_flags flags,
@@ -271,7 +271,7 @@
mail_storage_mailbox_list_next(struct mailbox_list_context *ctx);
/* Deinitialize mailbox list request. Returns FALSE if some error
occurred while listing. */
-int mail_storage_mailbox_list_deinit(struct mailbox_list_context *ctx);
+int mail_storage_mailbox_list_deinit(struct mailbox_list_context **ctx);
/* Subscribe/unsubscribe mailbox. There should be no error when
subscribing to already subscribed mailbox. Subscribing to
@@ -300,7 +300,7 @@
enum mailbox_open_flags flags);
/* Close the box. Returns -1 if some cleanup errors occurred, but
the mailbox was closed anyway. */
-int mailbox_close(struct mailbox *box);
+int mailbox_close(struct mailbox **box);
/* Returns storage of given mailbox */
struct mail_storage *mailbox_get_storage(struct mailbox *box);
@@ -323,7 +323,7 @@
mailbox_sync_init(struct mailbox *box, enum mailbox_sync_flags flags);
int mailbox_sync_next(struct mailbox_sync_context *ctx,
struct mailbox_sync_rec *sync_rec_r);
-int mailbox_sync_deinit(struct mailbox_sync_context *ctx,
+int mailbox_sync_deinit(struct mailbox_sync_context **ctx,
struct mailbox_status *status_r);
/* Call given callback function when something changes in the mailbox.
@@ -334,16 +334,16 @@
struct mailbox_transaction_context *
mailbox_transaction_begin(struct mailbox *box,
enum mailbox_transaction_flags flags);
-int mailbox_transaction_commit(struct mailbox_transaction_context *t,
+int mailbox_transaction_commit(struct mailbox_transaction_context **t,
enum mailbox_sync_flags flags);
-void mailbox_transaction_rollback(struct mailbox_transaction_context *t);
+void mailbox_transaction_rollback(struct mailbox_transaction_context **t);
/* Build mail_keywords from NULL-terminated keywords list. */
struct mail_keywords *
mailbox_keywords_create(struct mailbox_transaction_context *t,
const char *const keywords[]);
void mailbox_keywords_free(struct mailbox_transaction_context *t,
- struct mail_keywords *keywords);
+ struct mail_keywords **keywords);
/* Convert uid range to sequence range. */
int mailbox_get_uids(struct mailbox *box, uint32_t uid1, uint32_t uid2,
@@ -352,7 +352,7 @@
/* Initialize header lookup for given headers. */
struct mailbox_header_lookup_ctx *
mailbox_header_lookup_init(struct mailbox *box, const char *const headers[]);
-void mailbox_header_lookup_deinit(struct mailbox_header_lookup_ctx *ctx);
+void mailbox_header_lookup_deinit(struct mailbox_header_lookup_ctx **ctx);
/* Modify sort_program to specify a sort program acceptable for
search_init(). If mailbox supports no sorting, it's simply set to
@@ -370,7 +370,7 @@
const char *charset, struct mail_search_arg *args,
const enum mail_sort_type *sort_program);
/* Deinitialize search request. */
-int mailbox_search_deinit(struct mail_search_context *ctx);
+int mailbox_search_deinit(struct mail_search_context **ctx);
/* Search the next message. Returns 1 if found, 0 if not, -1 if failure. */
int mailbox_search_next(struct mail_search_context *ctx, struct mail *mail);
@@ -388,8 +388,8 @@
const char *from_envelope, struct istream *input,
bool want_mail);
int mailbox_save_continue(struct mail_save_context *ctx);
-int mailbox_save_finish(struct mail_save_context *ctx, struct mail *dest_mail);
-void mailbox_save_cancel(struct mail_save_context *ctx);
+int mailbox_save_finish(struct mail_save_context **ctx, struct mail *dest_mail);
+void mailbox_save_cancel(struct mail_save_context **ctx);
/* Copy given message. If dest_mail is non-NULL, the copied message can be
accessed using it. Note that setting it non-NULL may require mailbox
@@ -415,7 +415,7 @@
struct mail *mail_alloc(struct mailbox_transaction_context *t,
enum mail_fetch_field wanted_fields,
struct mailbox_header_lookup_ctx *wanted_headers);
-void mail_free(struct mail *mail);
+void mail_free(struct mail **mail);
int mail_set_seq(struct mail *mail, uint32_t seq);
/* Get the time message was received (IMAP INTERNALDATE).
Index: mail.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/lib-storage/mail.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- mail.c 12 Apr 2005 11:29:48 -0000 1.3
+++ mail.c 14 Jan 2006 18:47:41 -0000 1.4
@@ -11,11 +11,12 @@
return t->box->v.mail_alloc(t, wanted_fields, wanted_headers);
}
-void mail_free(struct mail *mail)
+void mail_free(struct mail **mail)
{
- struct mail_private *p = (struct mail_private *)mail;
+ struct mail_private *p = (struct mail_private *)*mail;
- p->v.free(mail);
+ p->v.free(*mail);
+ *mail = NULL;
}
int mail_set_seq(struct mail *mail, uint32_t seq)
- Previous message: [dovecot-cvs] dovecot/src/lib-sql driver-mysql.c, 1.12,
1.13 driver-pgsql.c, 1.7, 1.8 sql-api.c, 1.5, 1.6 sql-api.h,
1.5, 1.6
- Next message: [dovecot-cvs] dovecot/src/lib-storage/index index-mail-headers.c,
1.55, 1.56 index-mail.c, 1.88, 1.89 index-mailbox-check.c,
1.13, 1.14 index-search.c, 1.107, 1.108 index-storage.c, 1.80,
1.81 index-sync.c, 1.53, 1.54 index-transaction.c, 1.13, 1.14
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the dovecot-cvs
mailing list