Search code examples
cgccgtkgcc-warninggtk2

Getting a “format not a string literal and no format arguments” warning while using GTK+2


I am getting an error like this:

warning: format not a string literal and no format arguments [-Wformat-security]
                                              GTK_BUTTONS_OK,
(const gchar*)message);
                   ^

because of this function:

static void show_message (gchar *message, GtkMessageType type) {
  GtkWidget *dialog = gtk_message_dialog_new(NULL, 0, type,
                                             GTK_BUTTONS_OK,
                                             message);
  gtk_dialog_run(GTK_DIALOG(dialog));
  gtk_widget_destroy(dialog);
}

How can I fix it?


Solution

  • The answer is quite simple.

    You have to add "%s" to the arguments of the gtk_message_dialog_new() function like this:

    static void show_message (gchar *message, GtkMessageType type) {
      GtkWidget *dialog = gtk_message_dialog_new(NULL, 0, type,
                                                 GTK_BUTTONS_OK, "%s",
                                                 message);
      gtk_dialog_run(GTK_DIALOG(dialog));
      gtk_widget_destroy(dialog);
    }
    

    Basically, the lack of "%s" is considered non-secure by gcc.

    You can read more about it here: