Corrected several memory leaks and potential NULL pointer evaluations
in case of memory shortage. All reported by George Danchev.
This commit is contained in:
@@ -393,9 +393,19 @@ char* ifs_get_path(IsoFileSource *src)
|
||||
if (data->parent == NULL) {
|
||||
return strdup("");
|
||||
} else {
|
||||
char *path = ifs_get_path(data->parent);
|
||||
int pathlen = strlen(path);
|
||||
path = realloc(path, pathlen + strlen(data->name) + 2);
|
||||
char *path, *new_path;
|
||||
int pathlen;
|
||||
|
||||
path = ifs_get_path(data->parent);
|
||||
if (path == NULL)
|
||||
return NULL;
|
||||
pathlen = strlen(path);
|
||||
new_path = realloc(path, pathlen + strlen(data->name) + 2);
|
||||
if (new_path == NULL) {
|
||||
free(path);
|
||||
return NULL;
|
||||
}
|
||||
path= new_path;
|
||||
path[pathlen] = '/';
|
||||
path[pathlen + 1] = '\0';
|
||||
return strcat(path, data->name);
|
||||
|
@@ -62,9 +62,19 @@ char* lfs_get_path(IsoFileSource *src)
|
||||
if (data->parent == src) {
|
||||
return strdup("/");
|
||||
} else {
|
||||
char *path = lfs_get_path(data->parent);
|
||||
int pathlen = strlen(path);
|
||||
path = realloc(path, pathlen + strlen(data->name) + 2);
|
||||
char *path, *new_path;
|
||||
int pathlen;
|
||||
|
||||
path = lfs_get_path(data->parent);
|
||||
if (path == NULL)
|
||||
return NULL;
|
||||
pathlen = strlen(path);
|
||||
new_path = realloc(path, pathlen + strlen(data->name) + 2);
|
||||
if (new_path == NULL) {
|
||||
free(path);
|
||||
return NULL;
|
||||
}
|
||||
path= new_path;
|
||||
if (pathlen != 1) {
|
||||
/* pathlen can only be 1 for root */
|
||||
path[pathlen] = '/';
|
||||
|
@@ -1028,6 +1028,7 @@ int iso1999_writer_create(Ecma119Image *target)
|
||||
"Creating low level ISO 9660:1999 tree...");
|
||||
ret = iso1999_tree_create(target);
|
||||
if (ret < 0) {
|
||||
free((char *) writer);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@@ -1102,6 +1102,7 @@ int joliet_writer_create(Ecma119Image *target)
|
||||
iso_msg_debug(target->image->id, "Creating low level Joliet tree...");
|
||||
ret = joliet_tree_create(target);
|
||||
if (ret < 0) {
|
||||
free((char *) writer);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@@ -586,7 +586,7 @@ int iso_memory_stream_new(unsigned char *buf, size_t size, IsoStream **stream)
|
||||
return ISO_OUT_OF_MEM;
|
||||
}
|
||||
data = malloc(sizeof(MemStreamData));
|
||||
if (str == NULL) {
|
||||
if (data == NULL) {
|
||||
free(str);
|
||||
return ISO_OUT_OF_MEM;
|
||||
}
|
||||
|
@@ -285,7 +285,7 @@ void ** iso_rbtree_to_array(IsoRBTree *tree, int (*include_item)(void *),
|
||||
size_t *size)
|
||||
{
|
||||
size_t pos;
|
||||
void **array;
|
||||
void **array, **new_array;
|
||||
|
||||
array = malloc((tree->size + 1) * sizeof(void*));
|
||||
if (array == NULL) {
|
||||
@@ -296,7 +296,11 @@ void ** iso_rbtree_to_array(IsoRBTree *tree, int (*include_item)(void *),
|
||||
pos = rbtree_to_array_aux(tree->root, array, 0, include_item);
|
||||
array[pos] = NULL;
|
||||
|
||||
array = realloc(array, (pos + 1) * sizeof(void*));
|
||||
new_array = realloc(array, (pos + 1) * sizeof(void*));
|
||||
if (new_array == NULL) {
|
||||
free((char *) array);
|
||||
return NULL;
|
||||
}
|
||||
if (size) {
|
||||
*size = pos;
|
||||
}
|
||||
|
Reference in New Issue
Block a user