2006-09-25  Marcus Brinkmann  <marcus@g10code.de>

        * gpgme.texi (Destroying Data Buffers): Clarify that
        gpgme_data_release_and_get_mem destroys DH unconditionally.

gpgme/
2006-09-25  Marcus Brinkmann  <marcus@g10code.de>

        * data-mem.c (gpgme_data_release_and_get_mem): Release the data
        object properly.
This commit is contained in:
Marcus Brinkmann 2006-09-25 14:57:00 +00:00
parent 4b1393f664
commit 9247e9081b
5 changed files with 28 additions and 3 deletions

2
NEWS
View File

@ -1,6 +1,8 @@
Noteworthy changes in version 1.1.3 (unreleased) Noteworthy changes in version 1.1.3 (unreleased)
------------------------------------------------ ------------------------------------------------
* Fixed a memory leak in gpgme_data_release_and_get_mem.
* Interface changes relative to the 1.1.1 release: * Interface changes relative to the 1.1.1 release:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

View File

@ -1,3 +1,8 @@
2006-09-25 Marcus Brinkmann <marcus@g10code.de>
* gpgme.texi (Destroying Data Buffers): Clarify that
gpgme_data_release_and_get_mem destroys DH unconditionally.
2005-03-24 Marcus Brinkmann <marcus@g10code.de> 2005-03-24 Marcus Brinkmann <marcus@g10code.de>
* gpgme.texi (Library Version Check): Make example code compatible * gpgme.texi (Library Version Check): Make example code compatible

View File

@ -1719,7 +1719,8 @@ the user provided the data buffer in non-copy mode, a copy will be
made for this purpose. made for this purpose.
In case an error returns, or there is no suitable data buffer that can In case an error returns, or there is no suitable data buffer that can
be returned to the user, the function will return @code{NULL}. be returned to the user, the function will return @code{NULL}. In any
case, the data object @var{dh} is destroyed.
@end deftypefun @end deftypefun

View File

@ -1,3 +1,8 @@
2006-09-25 Marcus Brinkmann <marcus@g10code.de>
* data-mem.c (gpgme_data_release_and_get_mem): Release the data
object properly.
2006-09-22 Marcus Brinkmann <marcus@g10code.de> 2006-09-22 Marcus Brinkmann <marcus@g10code.de>
* keylist.c (keylist_colon_handler): Move debug output after * keylist.c (keylist_colon_handler): Move debug output after

View File

@ -210,20 +210,32 @@ gpgme_data_release_and_get_mem (gpgme_data_t dh, size_t *r_len)
char *str = NULL; char *str = NULL;
if (!dh || dh->cbs != &mem_cbs) if (!dh || dh->cbs != &mem_cbs)
{
gpgme_data_release (dh);
return NULL; return NULL;
}
str = dh->data.mem.buffer; str = dh->data.mem.buffer;
if (!str && dh->data.mem.orig_buffer) if (!str && dh->data.mem.orig_buffer)
{ {
str = malloc (dh->data.mem.length); str = malloc (dh->data.mem.length);
if (!str) if (!str)
{
gpgme_data_release (dh);
return NULL; return NULL;
}
memcpy (str, dh->data.mem.orig_buffer, dh->data.mem.length); memcpy (str, dh->data.mem.orig_buffer, dh->data.mem.length);
} }
else
/* Prevent mem_release from releasing the buffer memory. We must
not fail from this point. */
dh->data.mem.buffer = NULL;
if (r_len) if (r_len)
*r_len = dh->data.mem.length; *r_len = dh->data.mem.length;
gpgme_data_release (dh);
return str; return str;
} }