diff --git a/libretro-common/formats/png/rpng.c b/libretro-common/formats/png/rpng.c
index a90afcb575..479a10fe3f 100644
--- a/libretro-common/formats/png/rpng.c
+++ b/libretro-common/formats/png/rpng.c
@@ -733,8 +733,6 @@ end:
    return 1;
 
 error:
-   process->stream_backend->stream_free(process->stream);
-
 false_end:
    process->inflate_initialized = false;
    return -1;
@@ -774,7 +772,7 @@ static struct rpng_process *rpng_process_init(rpng_t *rpng,
    struct rpng_process *process = (struct rpng_process*)calloc(1, sizeof(*process));
 
    if (!process)
-      goto error;
+      return NULL;
 
    process->stream_backend = file_archive_get_default_file_backend();
 
@@ -786,14 +784,14 @@ static struct rpng_process *rpng_process_init(rpng_t *rpng,
    process->stream = process->stream_backend->stream_new();
 
    if (!process->stream)
-      goto error;
+      return NULL;
 
    if (!process->stream_backend->stream_decompress_init(process->stream))
-      goto error;
+      return NULL;
 
    inflate_buf = (uint8_t*)malloc(process->inflate_buf_size);
    if (!inflate_buf)
-      goto error;
+      return NULL;
 
    process->inflate_buf = inflate_buf;
    process->stream_backend->stream_set(
@@ -804,13 +802,6 @@ static struct rpng_process *rpng_process_init(rpng_t *rpng,
          process->inflate_buf);
 
    return process;
-
-error:
-   if (process->stream)
-      process->stream_backend->stream_free(process->stream);
-   if (process)
-      free(process);
-   return NULL;
 }
 
 static bool read_chunk_header(uint8_t *buf, struct png_chunk *chunk)
@@ -959,7 +950,7 @@ int rpng_process_image(rpng_t *rpng,
             rpng, data, width, height);
 
       if (!process)
-         return IMAGE_PROCESS_ERROR;
+         goto error;
 
       rpng->process = process;
       return 0;
@@ -969,11 +960,22 @@ int rpng_process_image(rpng_t *rpng,
    {
       if (rpng_load_image_argb_process_inflate_init(rpng, data,
                width, height) == -1)
-         return IMAGE_PROCESS_ERROR;
+         goto error;
       return 0;
    }
 
    return png_reverse_filter_iterate(rpng, data);
+
+error:
+   if (rpng->process)
+   {
+      if (rpng->process->inflate_buf)
+         free(rpng->process->inflate_buf);
+      if (rpng->process->stream)
+         rpng->process->stream_backend->stream_free(rpng->process->stream);
+      free(rpng->process);
+   }
+   return IMAGE_PROCESS_ERROR;
 }
 
 void rpng_free(rpng_t *rpng)