Fix leak on failing realloc
authorRicardo Mones <ricardo@mones.org>
Thu, 18 Jun 2015 00:13:28 +0000 (02:13 +0200)
committerRicardo Mones <ricardo@mones.org>
Thu, 18 Jun 2015 00:13:28 +0000 (02:13 +0200)
src/plugins/pgpcore/sgpgme.c

index 4b09d9cec6a0a4d2c6367bf865a4feab461cd848..bd14362d6980a0782d6981f8ed07802ad039c764 100644 (file)
@@ -979,11 +979,14 @@ void *sgpgme_data_release_and_get_mem(gpgme_data_t data, size_t *len)
        /* I know it's deprecated, but we don't compile with _LARGEFILE */
        cm_gpgme_data_rewind(data);
        while ((r = gpgme_data_read(data, buf, BUFSIZ)) > 0) {
-               result = realloc(result, r + w);
-               if (result == NULL) {
+               void *rresult = realloc(result, r + w);
+               if (rresult == NULL) {
                        g_warning("can't allocate memory\n");
+                       if (result != NULL)
+                               free(result);
                        return NULL;
                }
+               result = rresult;
                memcpy(result+w, buf, r);
                w += r;
        }