Merge pull request #3371 from stoeckmann/open_err_leak

Fix memory leaks on open error paths
This commit is contained in:
Dustin L. Howett authored and GitHub committed 2026-08-10 13:36:12 -05:00
commit d304bbcc50
7 files changed
+26 -3

No files matched your search

+4 -1
View File
@@ -109,8 +109,11 @@ archive_read_open_fd(struct archive *a, int fd, size_t block_size)
archive_read_set_seek_callback(a, file_seek);
archive_read_set_close_callback(a, file_close);
r = archive_read_set_callback_data(a, mine);
if (r < 0)
if (r < 0) {
free(mine->buffer);
free(mine);
return (r);
}
return (archive_read_open1(a));
}
+4 -1
View File
@@ -106,8 +106,11 @@ archive_read_open_FILE(struct archive *a, FILE *f)
archive_read_set_seek_callback(a, FILE_seek);
archive_read_set_close_callback(a, FILE_close);
r = archive_read_set_callback_data(a, mine);
if (r < 0)
if (r < 0) {
free(mine->buffer);
free(mine);
return (r);
}
return (archive_read_open1(a));
}
+3 -1
View File
@@ -84,8 +84,10 @@ archive_read_open_memory2(struct archive *a, const void *buff,
archive_read_set_skip_callback(a, memory_read_skip);
archive_read_set_close_callback(a, memory_read_close);
r = archive_read_set_callback_data(a, mine);
if (r < 0)
if (r < 0) {
free(mine);
return (r);
}
return (archive_read_open1(a));
}
+4
View File
@@ -48,6 +48,7 @@
#endif
#include "archive.h"
#include "archive_private.h"
struct write_fd_data {
int fd;
@@ -62,6 +63,9 @@ archive_write_open_fd(struct archive *a, int fd)
{
struct write_fd_data *mine;
archive_check_magic(a, ARCHIVE_WRITE_MAGIC,
ARCHIVE_STATE_NEW, "archive_write_open_fd");
mine = malloc(sizeof(*mine));
if (mine == NULL) {
archive_set_error(a, ENOMEM, "No memory");
+4
View File
@@ -45,6 +45,7 @@
#endif
#include "archive.h"
#include "archive_private.h"
struct write_FILE_data {
FILE *f;
@@ -59,6 +60,9 @@ archive_write_open_FILE(struct archive *a, FILE *f)
{
struct write_FILE_data *mine;
archive_check_magic(a, ARCHIVE_WRITE_MAGIC,
ARCHIVE_STATE_NEW, "archive_write_open_FILE");
mine = malloc(sizeof(*mine));
if (mine == NULL) {
archive_set_error(a, ENOMEM, "No memory");
+3
View File
@@ -98,6 +98,9 @@ open_filename(struct archive *a, int mbs_fn, const void *filename)
struct write_file_data *mine;
int r;
archive_check_magic(a, ARCHIVE_WRITE_MAGIC,
ARCHIVE_STATE_NEW, "open_filename");
mine = calloc(1, sizeof(*mine));
if (mine == NULL) {
archive_set_error(a, ENOMEM, "No memory");
+4
View File
@@ -30,6 +30,7 @@
#include <string.h>
#include "archive.h"
#include "archive_private.h"
struct write_memory_data {
size_t used;
@@ -52,6 +53,9 @@ archive_write_open_memory(struct archive *a, void *buff, size_t buffSize, size_t
{
struct write_memory_data *mine;
archive_check_magic(a, ARCHIVE_WRITE_MAGIC,
ARCHIVE_STATE_NEW, "archive_write_open_memory");
mine = calloc(1, sizeof(*mine));
if (mine == NULL) {
archive_set_error(a, ENOMEM, "No memory");