diff --git a/src/libs/geotagging.c b/src/libs/geotagging.c index 6d50c9c6e265..f233f1d38c94 100644 --- a/src/libs/geotagging.c +++ b/src/libs/geotagging.c @@ -676,6 +676,11 @@ static void _show_gpx_tracks(dt_lib_module_t *self) GList *trkseg = dt_gpx_get_trkseg(d->map.gpx); d->map.nb_tracks = g_list_length(trkseg); d->map.tracks = g_malloc0(sizeof(dt_lib_tracks_data_t) * d->map.nb_tracks); + if(!d->map.tracks) + { + d->map.nb_tracks = 0; + dt_print(DT_DEBUG_ALWAYS, "[geotagging] unable to allocate storage for tracks\n"); + } _remove_images_from_map(self); for(GList *i = d->imgs; i; i = g_list_next(i)) @@ -1098,9 +1103,12 @@ static GList *_lib_geotagging_get_timezones(void) size_t last_char = strlen(name) - 1; if(name[last_char] == '\n') name[last_char] = '\0'; tz_tuple_t *tz_tuple = (tz_tuple_t *)malloc(sizeof(tz_tuple_t)); - tz_tuple->display = name; - tz_tuple->name = name; - timezones = g_list_prepend(timezones, tz_tuple); + if(tz_tuple) + { + tz_tuple->display = name; + tz_tuple->name = name; + timezones = g_list_prepend(timezones, tz_tuple); + } } fclose(fp); @@ -1109,9 +1117,12 @@ static GList *_lib_geotagging_get_timezones(void) timezones = g_list_sort(timezones, _sort_timezones); tz_tuple_t *utc = (tz_tuple_t *)malloc(sizeof(tz_tuple_t)); - utc->display = g_strdup("UTC"); - utc->name = utc->display; - timezones = g_list_prepend(timezones, utc); + if(utc) + { + utc->display = g_strdup("UTC"); + utc->name = utc->display; + timezones = g_list_prepend(timezones, utc); + } #undef MAX_LINE_LENGTH @@ -1177,11 +1188,12 @@ static GList *_lib_geotagging_get_timezones(void) &buffer_size) == ERROR_SUCCESS) { tz_tuple_t *tz = (tz_tuple_t *)malloc(sizeof(tz_tuple_t)); - - tz->name = subkeyname_utf8; - tz->display = g_utf16_to_utf8(display_name, -1, NULL, NULL, NULL); - timezones = g_list_prepend(timezones, tz); - + if(tz) + { + tz->name = subkeyname_utf8; + tz->display = g_utf16_to_utf8(display_name, -1, NULL, NULL, NULL); + timezones = g_list_prepend(timezones, tz); + } subkeyname_utf8 = NULL; // to not free it later } free(display_name); diff --git a/src/libs/location.c b/src/libs/location.c index fcf7b0161f78..2a6389ee7b48 100644 --- a/src/libs/location.c +++ b/src/libs/location.c @@ -136,6 +136,8 @@ void gui_init(dt_lib_module_t *self) { self->data = calloc(1, sizeof(dt_lib_location_t)); dt_lib_location_t *lib = self->data; + if(!lib) + return; self->widget = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); @@ -209,13 +211,15 @@ static GtkWidget *_lib_location_place_widget_new(dt_lib_location_t *lib, /* connect button press signal for result item */ _callback_param_t *param = (_callback_param_t *)malloc(sizeof(_callback_param_t)); - lib->callback_params = g_list_append(lib->callback_params, param); - param->lib = lib; - param->result = place; - g_signal_connect(G_OBJECT(eb), "button-press-event", - G_CALLBACK(_lib_location_result_item_activated), - (gpointer)param); - + if(param) + { + lib->callback_params = g_list_append(lib->callback_params, param); + param->lib = lib; + param->result = place; + g_signal_connect(G_OBJECT(eb), "button-press-event", + G_CALLBACK(_lib_location_result_item_activated), + (gpointer)param); + } return eb; } @@ -227,13 +231,15 @@ static size_t _lib_location_curl_write_data(void *buffer, dt_lib_location_t *lib = (dt_lib_location_t *)userp; char *newdata = g_malloc0(lib->response_size + nmemb + 1); - if(lib->response != NULL) - memcpy(newdata, lib->response, lib->response_size); - memcpy(newdata + lib->response_size, buffer, nmemb); - g_free(lib->response); - lib->response = newdata; - lib->response_size += nmemb; - + if(newdata) + { + if(lib->response != NULL) + memcpy(newdata, lib->response, lib->response_size); + memcpy(newdata + lib->response_size, buffer, nmemb); + g_free(lib->response); + lib->response = newdata; + lib->response_size += nmemb; + } return nmemb; } @@ -560,9 +566,12 @@ static void _lib_location_parser_start_element(GMarkupParseContext *cxt, { place->marker_type = MAP_DISPLAY_POINT; dt_geo_map_display_point_t *p = malloc(sizeof(dt_geo_map_display_point_t)); - p->lon = lon; - p->lat = lat; - place->marker_points = g_list_append(place->marker_points, p); + if(p) + { + p->lon = lon; + p->lat = lat; + place->marker_points = g_list_append(place->marker_points, p); + } } } else if(g_str_has_prefix(*avalue, "LINESTRING") @@ -630,9 +639,12 @@ static void _lib_location_parser_start_element(GMarkupParseContext *cxt, break; } dt_geo_map_display_point_t *p = malloc(sizeof(dt_geo_map_display_point_t)); - p->lon = lon; - p->lat = lat; - place->marker_points = g_list_prepend(place->marker_points, p); + if(p) + { + p->lon = lon; + p->lat = lat; + place->marker_points = g_list_prepend(place->marker_points, p); + } startptr = endptr+1; i++; } @@ -718,6 +730,12 @@ void *get_params(dt_lib_module_t *self, const size_t size_total = size_fixed + size_name + size_points; void *params = malloc(size_total); + if(!params) + { + *size = 0; + return NULL; + } + struct params_fixed_t *params_fixed = (struct params_fixed_t *)params; params_fixed->relevance = location->relevance; params_fixed->type = location->type; @@ -765,8 +783,12 @@ int set_params(dt_lib_module_t *self, if(size_points % 2 * sizeof(float) != 0) return 1; - _lib_location_result_t *location = - (_lib_location_result_t *)malloc(sizeof(_lib_location_result_t)); + _lib_location_result_t *location = malloc(sizeof(_lib_location_result_t)); + if(!location) + { + dt_print(DT_DEBUG_ALWAYS, "[location] out of memory\n"); + return 1; + } location->relevance = params_fixed->relevance; location->type = params_fixed->type; @@ -786,9 +808,12 @@ int set_params(dt_lib_module_t *self, { dt_geo_map_display_point_t *p = (dt_geo_map_display_point_t *)malloc(sizeof(dt_geo_map_display_point_t)); - p->lat = points[0]; - p->lon = points[1]; - location->marker_points = g_list_prepend(location->marker_points, p); + if(p) + { + p->lat = points[0]; + p->lon = points[1]; + location->marker_points = g_list_prepend(location->marker_points, p); + } } location->marker_points = g_list_reverse(location->marker_points); diff --git a/src/libs/masks.c b/src/libs/masks.c index 8f558168d7bd..6bb47ed3f6d0 100644 --- a/src/libs/masks.c +++ b/src/libs/masks.c @@ -380,12 +380,15 @@ static void _tree_group(GtkButton *button, dt_lib_module_t *self) { dt_masks_point_group_t *fpt = (dt_masks_point_group_t *)malloc(sizeof(dt_masks_point_group_t)); - fpt->formid = id; - fpt->parentid = grp->formid; - fpt->opacity = 1.0f; - fpt->state = DT_MASKS_STATE_USE; - if(pos > 0) fpt->state |= DT_MASKS_STATE_UNION; - grp->points = g_list_append(grp->points, fpt); + if(fpt) + { + fpt->formid = id; + fpt->parentid = grp->formid; + fpt->opacity = 1.0f; + fpt->state = DT_MASKS_STATE_USE; + if(pos > 0) fpt->state |= DT_MASKS_STATE_UNION; + grp->points = g_list_append(grp->points, fpt); + } pos++; } } @@ -819,11 +822,14 @@ static void _tree_selection_change(GtkTreeSelection *selection, dt_lib_masks_t * { dt_masks_point_group_t *fpt = (dt_masks_point_group_t *)malloc(sizeof(dt_masks_point_group_t)); - fpt->formid = id; - fpt->parentid = grid; - fpt->state = DT_MASKS_STATE_USE; - fpt->opacity = 1.0f; - grp->points = g_list_append(grp->points, fpt); + if(fpt) + { + fpt->formid = id; + fpt->parentid = grid; + fpt->state = DT_MASKS_STATE_USE; + fpt->opacity = 1.0f; + grp->points = g_list_append(grp->points, fpt); + } // we eventually set the "show masks" icon of iops if(nb == 1 && (form->type & DT_MASKS_GROUP)) { diff --git a/src/libs/metadata.c b/src/libs/metadata.c index c9fe40d64441..9bdf61e919b3 100644 --- a/src/libs/metadata.c +++ b/src/libs/metadata.c @@ -789,10 +789,13 @@ static void add_rights_preset(dt_lib_module_t *self, char *name, char *string) const unsigned int params_size = strlen(string) + metadata_nb; char *params = calloc(sizeof(char), params_size); - memcpy(params + 4, string, params_size - metadata_nb); - dt_lib_presets_add(name, self->plugin_name, self->version(), - params, params_size, TRUE, 0); - free(params); + if(params) + { + memcpy(params + 4, string, params_size - metadata_nb); + dt_lib_presets_add(name, self->plugin_name, self->version(), + params, params_size, TRUE, 0); + free(params); + } } void init_presets(dt_lib_module_t *self) @@ -908,6 +911,8 @@ void *get_params(dt_lib_module_t *self, int *size) } char *params = (char *)malloc(*size); + if(!params) + return NULL; int pos = 0; diff --git a/src/libs/metadata_view.c b/src/libs/metadata_view.c index 05cbbfaa16c1..aa827f951032 100644 --- a/src/libs/metadata_view.c +++ b/src/libs/metadata_view.c @@ -232,11 +232,14 @@ static void _lib_metadata_init_queue(dt_lib_module_t *self) for(int i = md_size - 1; i >= 0; i--) { dt_lib_metadata_info_t *m = g_malloc0(sizeof(dt_lib_metadata_info_t)); - m->name = (char *)_get_label(i); - m->value = g_strdup(NODATA_STRING); - m->index = m->order = i; - m->visible = _is_metadata_ui(i); - d->metadata = g_list_prepend(d->metadata, m); + if(m) + { + m->name = (char *)_get_label(i); + m->value = g_strdup(NODATA_STRING); + m->index = m->order = i; + m->visible = _is_metadata_ui(i); + d->metadata = g_list_prepend(d->metadata, m); + } } } diff --git a/src/libs/modulegroups.c b/src/libs/modulegroups.c index 22d680597e1b..4afc350f6713 100644 --- a/src/libs/modulegroups.c +++ b/src/libs/modulegroups.c @@ -1402,6 +1402,8 @@ static void _preset_from_string(dt_lib_module_t *self, gchar *txt, gboolean edit { dt_lib_modulegroups_basic_item_t *item = (dt_lib_modulegroups_basic_item_t *)g_malloc0(sizeof(dt_lib_modulegroups_basic_item_t)); + if(!item) + continue; item->id = g_strdup(gr2[j]); _basics_init_item(item); @@ -1425,16 +1427,18 @@ static void _preset_from_string(dt_lib_module_t *self, gchar *txt, gboolean edit const int nb = g_strv_length(gr2); if(nb > 2) { - dt_lib_modulegroups_group_t *group - = (dt_lib_modulegroups_group_t *)g_malloc0(sizeof(dt_lib_modulegroups_group_t)); - group->name = g_strdup(gr2[0]); - group->icon = g_strdup(gr2[1]); - // gr2[2] is reserved for eventual future use - for(int j = 3; j < nb; j++) + dt_lib_modulegroups_group_t *group = g_malloc0(sizeof(dt_lib_modulegroups_group_t)); + if(group) { - group->modules = g_list_append(group->modules, g_strdup(gr2[j])); + group->name = g_strdup(gr2[0]); + group->icon = g_strdup(gr2[1]); + // gr2[2] is reserved for eventual future use + for(int j = 3; j < nb; j++) + { + group->modules = g_list_append(group->modules, g_strdup(gr2[j])); + } + res = g_list_prepend(res, group); } - res = g_list_prepend(res, group); } g_strfreev(gr2); } @@ -2204,12 +2208,13 @@ static int _lib_modulegroups_basics_module_toggle_action(dt_lib_module_t *self, if(!found_item) { - dt_lib_modulegroups_basic_item_t *item - = (dt_lib_modulegroups_basic_item_t *)g_malloc0(sizeof(dt_lib_modulegroups_basic_item_t)); - item->id = action_id; - _basics_init_item(item); - - d->basics = g_list_append(d->basics, item); + dt_lib_modulegroups_basic_item_t *item = g_malloc0(sizeof(dt_lib_modulegroups_basic_item_t)); + if(item) + { + item->id = action_id; + _basics_init_item(item); + d->basics = g_list_append(d->basics, item); + } } else { @@ -2264,12 +2269,13 @@ static void _manage_editor_basics_add(GtkWidget *widget, g_free(action_id); else { - dt_lib_modulegroups_basic_item_t *item - = (dt_lib_modulegroups_basic_item_t *)g_malloc0(sizeof(dt_lib_modulegroups_basic_item_t)); - item->id = action_id; - _basics_init_item(item); - - d->edit_basics = g_list_append(d->edit_basics, item); + dt_lib_modulegroups_basic_item_t *item = g_malloc0(sizeof(dt_lib_modulegroups_basic_item_t)); + if(item) + { + item->id = action_id; + _basics_init_item(item); + d->edit_basics = g_list_append(d->edit_basics, item); + } _manage_editor_basics_update_list(self); } } @@ -3468,16 +3474,18 @@ static void _manage_editor_group_add(GtkWidget *widget, dt_lib_module_t *self) { dt_lib_modulegroups_t *d = (dt_lib_modulegroups_t *)self->data; - dt_lib_modulegroups_group_t *gr = - (dt_lib_modulegroups_group_t *)g_malloc0(sizeof(dt_lib_modulegroups_group_t)); - gr->name = g_strdup(_("new")); - gr->icon = g_strdup("basic"); - d->edit_groups = g_list_append(d->edit_groups, gr); - - // we update the group list - GtkWidget *vb2 = _manage_editor_group_init_modules_box(self, gr); - gtk_box_pack_start(GTK_BOX(d->preset_groups_box), vb2, FALSE, TRUE, 0); - gtk_widget_show_all(vb2); + dt_lib_modulegroups_group_t *gr = g_malloc0(sizeof(dt_lib_modulegroups_group_t)); + if(gr) + { + gr->name = g_strdup(_("new")); + gr->icon = g_strdup("basic"); + d->edit_groups = g_list_append(d->edit_groups, gr); + + // we update the group list + GtkWidget *vb2 = _manage_editor_group_init_modules_box(self, gr); + gtk_box_pack_start(GTK_BOX(d->preset_groups_box), vb2, FALSE, TRUE, 0); + gtk_widget_show_all(vb2); + } // and we update arrows _manage_editor_group_update_arrows(d->preset_groups_box); diff --git a/src/libs/print_settings.c b/src/libs/print_settings.c index 3a034a32730e..09c56480b46e 100644 --- a/src/libs/print_settings.c +++ b/src/libs/print_settings.c @@ -308,6 +308,11 @@ static int write_image(dt_imageio_module_data_t *data, d->params->buf = (uint16_t *)malloc((size_t)3 * (d->bpp == 8?1:2) * d->head.width * d->head.height); + if(!d->params->buf) + { + dt_print(DT_DEBUG_ALWAYS, "[print] unable to allocate memory for image %s\n", filename); + return 1; + } if(d->bpp == 8) { diff --git a/src/libs/recentcollect.c b/src/libs/recentcollect.c index 357d788f2c39..577cc7b940b8 100644 --- a/src/libs/recentcollect.c +++ b/src/libs/recentcollect.c @@ -276,13 +276,16 @@ void _menuitem_preferences(GtkMenuItem *menuitem, dt_lib_module_t *self) GtkWidget *box = GTK_WIDGET(d->box); dt_lib_recentcollect_item_t *item = (dt_lib_recentcollect_item_t *)malloc(sizeof(dt_lib_recentcollect_item_t)); - d->items = g_list_append(d->items, item); - item->button = gtk_button_new(); - gtk_box_pack_start(GTK_BOX(box), item->button, FALSE, TRUE, 0); - g_signal_connect(G_OBJECT(item->button), "clicked", G_CALLBACK(_button_pressed), (gpointer)self); - gtk_widget_set_no_show_all(item->button, TRUE); - gtk_widget_set_name(GTK_WIDGET(item->button), "recent-collection-button"); - gtk_widget_set_visible(item->button, FALSE); + if(item) + { + d->items = g_list_append(d->items, item); + item->button = gtk_button_new(); + gtk_box_pack_start(GTK_BOX(box), item->button, FALSE, TRUE, 0); + g_signal_connect(G_OBJECT(item->button), "clicked", G_CALLBACK(_button_pressed), (gpointer)self); + gtk_widget_set_no_show_all(item->button, TRUE); + gtk_widget_set_name(GTK_WIDGET(item->button), "recent-collection-button"); + gtk_widget_set_visible(item->button, FALSE); + } } } diff --git a/src/libs/tagging.c b/src/libs/tagging.c index c36dc3d94c72..c4c2e1b2bd28 100644 --- a/src/libs/tagging.c +++ b/src/libs/tagging.c @@ -1969,16 +1969,21 @@ static void _pop_menu_dictionary_edit_tag(GtkWidget *menuitem, dt_lib_module_t * // update the store GtkTreeModel *store = gtk_tree_model_filter_get_model(GTK_TREE_MODEL_FILTER(model)); dt_tag_op_t *to = g_malloc(sizeof(dt_tag_op_t)); - to->tree_flag = d->tree_flag; - to->oldtagname = tagname; - to->newtagname = new_prefix_tag; - gint sort_column; - GtkSortType sort_order; - gtk_tree_sortable_get_sort_column_id(GTK_TREE_SORTABLE(store), &sort_column, &sort_order); - gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(store), GTK_TREE_SORTABLE_UNSORTED_SORT_COLUMN_ID, GTK_SORT_ASCENDING); - gtk_tree_model_foreach(store, (GtkTreeModelForeachFunc)_update_tag_name_per_name, to); - gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(store), sort_column, sort_order); - g_free(to); + if(to) + { + to->tree_flag = d->tree_flag; + to->oldtagname = tagname; + to->newtagname = new_prefix_tag; + gint sort_column; + GtkSortType sort_order; + gtk_tree_sortable_get_sort_column_id(GTK_TREE_SORTABLE(store), &sort_column, &sort_order); + gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(store), + GTK_TREE_SORTABLE_UNSORTED_SORT_COLUMN_ID, + GTK_SORT_ASCENDING); + gtk_tree_model_foreach(store, (GtkTreeModelForeachFunc)_update_tag_name_per_name, to); + gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(store), sort_column, sort_order); + g_free(to); + } if(subtag) g_free(new_prefix_tag); _raise_signal_tag_changed(self); @@ -2342,9 +2347,12 @@ static void _pop_menu_dictionary(GtkWidget *treeview, GdkEventButton *event, dt_ if(d->collection[0]) { char *collection = g_malloc(4096); - dt_collection_serialize(collection, 4096, FALSE); - if(g_strcmp0(d->collection, collection) == 0) d->collection[0] = '\0'; - g_free(collection); + if(collection) + { + dt_collection_serialize(collection, 4096, FALSE); + if(g_strcmp0(d->collection, collection) == 0) d->collection[0] = '\0'; + g_free(collection); + } } if(count || d->collection[0]) {