diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/ChangeLog | 7 | ||||
| -rw-r--r-- | src/context.h | 6 | ||||
| -rw-r--r-- | src/gpgme.c | 4 | ||||
| -rw-r--r-- | src/op-support.c | 1 | 
4 files changed, 18 insertions, 0 deletions
| diff --git a/src/ChangeLog b/src/ChangeLog index d7b4592e..95b5f2db 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,10 @@ +2009-06-18  Marcus Brinkmann  <[email protected]> + +	* context.h (CTX_OP_DATA_MAGIC): New macro. +	(struct ctx_op_data): New member MAGIC. +	* op-support.c (_gpgme_op_data_lookup): Initialize magic. +	* gpgme.c (gpgme_result_unref, gpgme_result_ref): Check magic. +  2009-06-16  Marcus Brinkmann  <[email protected]>  	* gpgme.c (gpgme_result_unref): Hot fix to release a lock. diff --git a/src/context.h b/src/context.h index 63af1d10..e98e7bea 100644 --- a/src/context.h +++ b/src/context.h @@ -42,8 +42,14 @@ typedef enum    } ctx_op_data_id_t; +/* "gpgmeres" in ASCII.  */ +#define CTX_OP_DATA_MAGIC 0x736572656d677067ULL  struct ctx_op_data  { +  /* A magic word just to make sure people don't deallocate something +     that ain't a result structure.  */ +  unsigned long long magic; +    /* The next element in the linked list, or NULL if this is the last       element.  Used by op data structures linked into a context.  */    struct ctx_op_data *next; diff --git a/src/gpgme.c b/src/gpgme.c index 3283b342..56caf59c 100644 --- a/src/gpgme.c +++ b/src/gpgme.c @@ -189,6 +189,8 @@ gpgme_result_ref (void *result)    data = result - sizeof (struct ctx_op_data); +  assert (data->magic == CTX_OP_DATA_MAGIC); +    LOCK (result_ref_lock);    data->references++;    UNLOCK (result_ref_lock); @@ -205,6 +207,8 @@ gpgme_result_unref (void *result)    data = result - sizeof (struct ctx_op_data); +  assert (data->magic == CTX_OP_DATA_MAGIC); +    LOCK (result_ref_lock);    if (--data->references)      { diff --git a/src/op-support.c b/src/op-support.c index 19b24205..c3ba7785 100644 --- a/src/op-support.c +++ b/src/op-support.c @@ -48,6 +48,7 @@ _gpgme_op_data_lookup (gpgme_ctx_t ctx, ctx_op_data_id_t type, void **hook,        data = calloc (1, sizeof (struct ctx_op_data) + size);        if (!data)  	return gpg_error_from_errno (errno); +      data->magic = CTX_OP_DATA_MAGIC;        data->next = ctx->op_data;        data->type = type;        data->cleanup = cleanup; | 
