From 540a83327fc3e4b48e1c5255c4b29b4a05285a02 Mon Sep 17 00:00:00 2001 From: Andrey Kutejko Date: Mon, 13 Nov 2023 01:59:11 +0100 Subject: [PATCH] Fix issues spotted by PVS-Studio --- demos/gtk-demo/demo3widget.c | 2 ++ gtk/css/gtkcssparser.c | 1 - gtk/css/gtkcsstokenizer.c | 1 + gtk/gtkactionmuxer.c | 9 ++++++--- gtk/gtkbuilder.c | 2 +- gtk/gtkimcontextsimple.c | 10 +++++----- gtk/gtklabel.c | 2 +- gtk/gtksectionmodel.c | 1 + gtk/gtktreelistrowsorter.c | 2 +- modules/printbackends/gtkprintbackendcups.c | 4 +++- tests/testtreecolumns.c | 3 ++- tests/testupload.c | 2 +- testsuite/gtk/maplistmodel.c | 4 +++- testsuite/gtk/multiselection.c | 3 ++- testsuite/gtk/noselection.c | 3 ++- testsuite/gtk/singleselection.c | 3 ++- testsuite/gtk/slicelistmodel.c | 4 +++- testsuite/gtk/sortlistmodel.c | 4 +++- 18 files changed, 39 insertions(+), 21 deletions(-) diff --git a/demos/gtk-demo/demo3widget.c b/demos/gtk-demo/demo3widget.c index e34908ffa2..28c5fc7105 100644 --- a/demos/gtk-demo/demo3widget.c +++ b/demos/gtk-demo/demo3widget.c @@ -75,7 +75,9 @@ query_tooltip (GtkWidget *widget, gtk_grid_attach (GTK_GRID (grid), label, 0, 2, 1, 1); precision = 1; + s = NULL; do { + g_free (s); s = g_strdup_printf ("%.*f", precision, self->scale); l = strlen (s) - 1; while (s[l] == '0') diff --git a/gtk/css/gtkcssparser.c b/gtk/css/gtkcssparser.c index e5a489a13e..25d3984ed7 100644 --- a/gtk/css/gtkcssparser.c +++ b/gtk/css/gtkcssparser.c @@ -186,7 +186,6 @@ gtk_css_parser_resolve_url (GtkCssParser *self, g_free (scheme); return file; } - g_free (scheme); if (self->directory == NULL) return NULL; diff --git a/gtk/css/gtkcsstokenizer.c b/gtk/css/gtkcsstokenizer.c index 0deb43f7d7..24419ff58d 100644 --- a/gtk/css/gtkcsstokenizer.c +++ b/gtk/css/gtkcsstokenizer.c @@ -970,6 +970,7 @@ gtk_css_tokenizer_read_url (GtkCssTokenizer *tokenizer, { gtk_css_tokenizer_read_bad_url (tokenizer, token); gtk_css_tokenizer_parse_error (error, "Whitespace only allowed at start and end of url"); + g_string_free (url, TRUE); return FALSE; } } diff --git a/gtk/gtkactionmuxer.c b/gtk/gtkactionmuxer.c index 6678e9d746..e70d2b54f3 100644 --- a/gtk/gtkactionmuxer.c +++ b/gtk/gtkactionmuxer.c @@ -445,11 +445,14 @@ notify_observers_added (GtkActionMuxer *muxer, gboolean enabled; GVariant *state; GSList *node; + GSList *action_watchers; - if (!action->watchers) + action_watchers = action ? action->watchers : NULL; + + if (!action_watchers) continue; - for (node = action ? action->watchers : NULL; node; node = node->next) + for (node = action_watchers; node; node = node->next) gtk_action_observer_primary_accel_changed (node->data, GTK_ACTION_OBSERVABLE (muxer), action_name, NULL); @@ -461,7 +464,7 @@ notify_observers_added (GtkActionMuxer *muxer, TRUE)) continue; - for (node = action->watchers; node; node = node->next) + for (node = action_watchers; node; node = node->next) { gtk_action_observer_action_added (node->data, GTK_ACTION_OBSERVABLE (muxer), diff --git a/gtk/gtkbuilder.c b/gtk/gtkbuilder.c index 1ba812478e..727adb78d7 100644 --- a/gtk/gtkbuilder.c +++ b/gtk/gtkbuilder.c @@ -2661,7 +2661,7 @@ gtk_builder_value_from_string_type (GtkBuilder *builder, g_set_error (error, GTK_BUILDER_ERROR, GTK_BUILDER_ERROR_INVALID_VALUE, - "Object named \"%s\" is of type \"%s\" which is not compatible with expected type \%s\"", + "Object named \"%s\" is of type \"%s\" which is not compatible with expected type \"%s\"", string, G_OBJECT_TYPE_NAME (object), g_type_name (type)); ret = FALSE; } diff --git a/gtk/gtkimcontextsimple.c b/gtk/gtkimcontextsimple.c index f07a2f76e1..d8ed8a3544 100644 --- a/gtk/gtkimcontextsimple.c +++ b/gtk/gtkimcontextsimple.c @@ -479,11 +479,11 @@ check_hex (GtkIMContextSimple *context_simple, ch = gdk_keyval_to_unicode (priv->compose_buffer[i]); - if (ch == 0) - return FALSE; - - if (!g_unichar_isxdigit (ch)) - return FALSE; + if (ch == 0 || !g_unichar_isxdigit (ch)) + { + g_string_free (str, TRUE); + return FALSE; + } buf[g_unichar_to_utf8 (ch, buf)] = '\0'; diff --git a/gtk/gtklabel.c b/gtk/gtklabel.c index 176467285d..6f2ecde162 100644 --- a/gtk/gtklabel.c +++ b/gtk/gtklabel.c @@ -3324,7 +3324,7 @@ strip_ulines (const char *text, char *q; gboolean after_uline = FALSE; - new_text = malloc (strlen (text) + 1); + new_text = g_malloc (strlen (text) + 1); q = new_text; for (p = text; *p; p++) diff --git a/gtk/gtksectionmodel.c b/gtk/gtksectionmodel.c index b645d1ca36..a13c79e798 100644 --- a/gtk/gtksectionmodel.c +++ b/gtk/gtksectionmodel.c @@ -66,6 +66,7 @@ gtk_section_model_default_get_section (GtkSectionModel *self, { *out_start = n_items; *out_end = G_MAXUINT; + return; } *out_start = 0; diff --git a/gtk/gtktreelistrowsorter.c b/gtk/gtktreelistrowsorter.c index fd81d33dba..cf6ec3f91b 100644 --- a/gtk/gtktreelistrowsorter.c +++ b/gtk/gtktreelistrowsorter.c @@ -155,7 +155,7 @@ gtk_tree_list_row_sort_keys_compare (gconstpointer a, resb = unpack (keysb, &keysb, &sizeb); if (!resa) return resb ? GTK_ORDERING_LARGER : (keysa[2] < keysb[2] ? GTK_ORDERING_SMALLER : - (keysb[2] > keysa[2] ? GTK_ORDERING_LARGER : GTK_ORDERING_EQUAL)); + (keysa[2] > keysb[2] ? GTK_ORDERING_LARGER : GTK_ORDERING_EQUAL)); else if (!resb) return GTK_ORDERING_SMALLER; diff --git a/modules/printbackends/gtkprintbackendcups.c b/modules/printbackends/gtkprintbackendcups.c index 807a3d38ea..912b686d4c 100644 --- a/modules/printbackends/gtkprintbackendcups.c +++ b/modules/printbackends/gtkprintbackendcups.c @@ -3022,7 +3022,7 @@ create_temporary_queue (GtkPrintBackendCups *backend, static void create_cups_printer_from_avahi_data (AvahiConnectionTestData *data) { - PrinterSetupInfo *info = g_new0 (PrinterSetupInfo, 1); + PrinterSetupInfo *info; GtkPrinter *printer; printer = gtk_print_backend_find_printer (GTK_PRINT_BACKEND (data->backend), data->printer_name); @@ -3034,6 +3034,7 @@ create_cups_printer_from_avahi_data (AvahiConnectionTestData *data) return; } + info = g_new0 (PrinterSetupInfo, 1); info->avahi_printer = TRUE; info->printer_name = data->printer_name; info->printer_uri = data->printer_uri; @@ -4156,6 +4157,7 @@ cups_request_ppd (GtkPrinter *printer) httpClose (http); g_free (ppd_filename); g_free (data); + g_free (resource); g_signal_emit_by_name (printer, "details-acquired", FALSE); return FALSE; diff --git a/tests/testtreecolumns.c b/tests/testtreecolumns.c index decb99f185..12b4829689 100644 --- a/tests/testtreecolumns.c +++ b/tests/testtreecolumns.c @@ -430,7 +430,6 @@ update_columns (GtkTreeView *view, ViewColumnModel *view_model) int *new_order; GtkTreePath *path; - new_order = g_new (int, length); a = old_columns; b = view_model->columns; while (a->data == b->data) @@ -442,6 +441,8 @@ update_columns (GtkTreeView *view, ViewColumnModel *view_model) m++; } + new_order = g_new (int, length); + if (a->next->data == b->data) { b = b->next; diff --git a/tests/testupload.c b/tests/testupload.c index 571f40ff8f..2d849c5f32 100644 --- a/tests/testupload.c +++ b/tests/testupload.c @@ -9,7 +9,7 @@ static const char *format_name[] = { static const char * format_to_string (GdkMemoryFormat format) { - if (format < GDK_MEMORY_N_FORMATS) + if (format < g_strv_length ((gchar **) format_name)) return format_name[format]; else return "ERROR"; diff --git a/testsuite/gtk/maplistmodel.c b/testsuite/gtk/maplistmodel.c index 2c4c767d65..16604f7ee2 100644 --- a/testsuite/gtk/maplistmodel.c +++ b/testsuite/gtk/maplistmodel.c @@ -55,12 +55,14 @@ model_to_string (GListModel *model) static char * section_model_to_string (GListModel *model) { - GString *string = g_string_new (NULL); + GString *string; guint i, s, e; if (!GTK_IS_SECTION_MODEL (model)) return model_to_string (model); + string = g_string_new (NULL); + i = 0; while (i < g_list_model_get_n_items (model)) { diff --git a/testsuite/gtk/multiselection.c b/testsuite/gtk/multiselection.c index d709969376..70c342f8ed 100644 --- a/testsuite/gtk/multiselection.c +++ b/testsuite/gtk/multiselection.c @@ -55,12 +55,13 @@ model_to_string (GListModel *model) static char * section_model_to_string (GListModel *model) { - GString *string = g_string_new (NULL); + GString *string; guint i, s, e, n; if (!GTK_IS_SECTION_MODEL (model)) return model_to_string (model); + string = g_string_new (NULL); n = g_list_model_get_n_items (model); i = 0; diff --git a/testsuite/gtk/noselection.c b/testsuite/gtk/noselection.c index ab71d87b89..eacf7f23f4 100644 --- a/testsuite/gtk/noselection.c +++ b/testsuite/gtk/noselection.c @@ -55,12 +55,13 @@ model_to_string (GListModel *model) static char * section_model_to_string (GListModel *model) { - GString *string = g_string_new (NULL); + GString *string; guint i, s, e, n; if (!GTK_IS_SECTION_MODEL (model)) return model_to_string (model); + string = g_string_new (NULL); n = g_list_model_get_n_items (model); i = 0; diff --git a/testsuite/gtk/singleselection.c b/testsuite/gtk/singleselection.c index 1952da879e..0f6aee9e6b 100644 --- a/testsuite/gtk/singleselection.c +++ b/testsuite/gtk/singleselection.c @@ -55,12 +55,13 @@ model_to_string (GListModel *model) static char * section_model_to_string (GListModel *model) { - GString *string = g_string_new (NULL); + GString *string; guint i, s, e, n; if (!GTK_IS_SECTION_MODEL (model)) return model_to_string (model); + string = g_string_new (NULL); n = g_list_model_get_n_items (model); i = 0; diff --git a/testsuite/gtk/slicelistmodel.c b/testsuite/gtk/slicelistmodel.c index 680f699eda..15e7757b40 100644 --- a/testsuite/gtk/slicelistmodel.c +++ b/testsuite/gtk/slicelistmodel.c @@ -54,12 +54,14 @@ model_to_string (GListModel *model) static char * section_model_to_string (GListModel *model) { - GString *string = g_string_new (NULL); + GString *string; guint i, s, e; if (!GTK_IS_SECTION_MODEL (model)) return model_to_string (model); + string = g_string_new (NULL); + i = 0; while (i < g_list_model_get_n_items (model)) { diff --git a/testsuite/gtk/sortlistmodel.c b/testsuite/gtk/sortlistmodel.c index b0b85117ed..3ca9c97e0b 100644 --- a/testsuite/gtk/sortlistmodel.c +++ b/testsuite/gtk/sortlistmodel.c @@ -55,12 +55,14 @@ model_to_string (GListModel *model) static char * section_model_to_string (GListModel *model) { - GString *string = g_string_new (NULL); + GString *string; guint i, s, e; if (!GTK_IS_SECTION_MODEL (model)) return model_to_string (model); + string = g_string_new (NULL); + i = 0; while (i < g_list_model_get_n_items (model)) {