tPatch from Barry deFreese; remove deprecated code, and fix unsafe use of format strings. - vaccinewars - be a doctor and try to vaccinate the world
 (HTM) git clone git://src.adamsgaard.dk/vaccinewars
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 1edff0de84a71af1c637e1cfc1558eba47abc94a
 (DIR) parent d954538689ac49f9a3a254dfb42207529e54c8ac
 (HTM) Author: Ben Webb <ben@salilab.org>
       Date:   Tue,  9 Jul 2013 05:55:00 +0000
       
       Patch from Barry deFreese; remove deprecated code, and fix unsafe
       use of format strings.
       
       
       Diffstat:
         M src/curses_client/curses_client.c   |       6 +++---
         M src/dopewars.c                      |      22 +++++++++++-----------
         M src/gtkport/gtkport.c               |       2 +-
         M src/gui_client/gtk_client.c         |      12 ++++++------
         M src/gui_client/newgamedia.c         |       7 ++++---
         M src/network.c                       |      12 ++++++------
         M src/serverside.c                    |      20 ++++++++++----------
         M src/sound.c                         |       2 +-
       
       8 files changed, 42 insertions(+), 41 deletions(-)
       ---
 (DIR) diff --git a/src/curses_client/curses_client.c b/src/curses_client/curses_client.c
       t@@ -649,14 +649,14 @@ static gboolean ConnectToServer(Player *Play)
        
          errstr = g_string_new("");
        
       -  if (g_strcasecmp(ServerName, SN_META) == 0 || ConnectMethod == CM_META) {
       +  if (g_ascii_strncasecmp(ServerName, SN_META, strlen(SN_META)) == 0 || ConnectMethod == CM_META) {
            ConnectMethod = CM_META;
            MetaOK = SelectServerFromMetaServer(Play, errstr);
       -  } else if (g_strcasecmp(ServerName, SN_PROMPT) == 0 ||
       +  } else if (g_ascii_strncasecmp(ServerName, SN_PROMPT, strlen(SN_PROMPT)) == 0 ||
                     ConnectMethod == CM_PROMPT) {
            ConnectMethod = CM_PROMPT;
            SelectServerManually();
       -  } else if (g_strcasecmp(ServerName, SN_SINGLE) == 0 ||
       +  } else if (g_ascii_strncasecmp(ServerName, SN_SINGLE, strlen(SN_SINGLE)) == 0 ||
                     ConnectMethod == CM_SINGLE) {
            ConnectMethod = CM_SINGLE;
            g_string_free(errstr, TRUE);
 (DIR) diff --git a/src/dopewars.c b/src/dopewars.c
       t@@ -1406,18 +1406,18 @@ int GetNextDrugIndex(int OldIndex, Player *Play)
            if (Play->Drugs[i].Price != 0 && i != OldIndex && i != MaxIndex &&
                (MaxIndex == -1
                 || (DrugSortMethod == DS_ATOZ
       -          && g_strcasecmp(Drug[MaxIndex].Name, Drug[i].Name) > 0)
       +          && g_ascii_strncasecmp(Drug[MaxIndex].Name, Drug[i].Name, strlen(Drug[i].Name)) > 0)
                 || (DrugSortMethod == DS_ZTOA
       -          && g_strcasecmp(Drug[MaxIndex].Name, Drug[i].Name) < 0)
       +          && g_ascii_strncasecmp(Drug[MaxIndex].Name, Drug[i].Name, strlen(Drug[i].Name)) < 0)
                 || (DrugSortMethod == DS_CHEAPFIRST
                  && Play->Drugs[MaxIndex].Price > Play->Drugs[i].Price)
                 || (DrugSortMethod == DS_CHEAPLAST
                  && Play->Drugs[MaxIndex].Price < Play->Drugs[i].Price)) &&
                (OldIndex == -1
                 || (DrugSortMethod == DS_ATOZ
       -          && g_strcasecmp(Drug[OldIndex].Name, Drug[i].Name) <= 0)
       +          && g_ascii_strncasecmp(Drug[OldIndex].Name, Drug[i].Name, strlen(Drug[i].Name)) <= 0)
                 || (DrugSortMethod == DS_ZTOA
       -          && g_strcasecmp(Drug[OldIndex].Name, Drug[i].Name) >= 0)
       +          && g_ascii_strncasecmp(Drug[OldIndex].Name, Drug[i].Name, strlen(Drug[i].Name)) >= 0)
                 || (DrugSortMethod == DS_CHEAPFIRST
                  && Play->Drugs[OldIndex].Price <= Play->Drugs[i].Price)
                 || (DrugSortMethod == DS_CHEAPLAST
       t@@ -1909,7 +1909,7 @@ gboolean ParseNextConfig(GScanner *scanner, Converter *conv,
            return FALSE;
          }
        
       -  if (g_strcasecmp(scanner->value.v_identifier, "include") == 0) {
       +  if (g_ascii_strncasecmp(scanner->value.v_identifier, "include", 7) == 0) {
            token = g_scanner_get_next_token(scanner);
            if (token == G_TOKEN_STRING) {
              if (!ReadConfigFile(scanner->value.v_string, NULL)) {
       t@@ -1922,7 +1922,7 @@ gboolean ParseNextConfig(GScanner *scanner, Converter *conv,
                                    NULL, NULL, FALSE);
              return FALSE;
            }
       -  } else if (g_strcasecmp(scanner->value.v_identifier, "encoding") == 0) {
       +  } else if (g_ascii_strncasecmp(scanner->value.v_identifier, "encoding", 8) == 0) {
            token = g_scanner_get_next_token(scanner);
            if (token == G_TOKEN_STRING) {
              Conv_SetCodeset(conv, scanner->value.v_string);
       t@@ -2002,13 +2002,13 @@ int GetGlobalIndex(gchar *ID1, gchar *ID2)
          if (!ID1)
            return -1;
          for (i = 0; i < NumGlob; i++) {
       -    if (g_strcasecmp(ID1, Globals[i].Name) == 0
       +    if (g_ascii_strncasecmp(ID1, Globals[i].Name, strlen(Globals[i].Name)) == 0
                && !Globals[i].NameStruct[0]) {
              /* Just a bog-standard ID1=value */
              return i;
            }
       -    if (g_strcasecmp(ID1, Globals[i].NameStruct) == 0 && ID2
       -        && g_strcasecmp(ID2, Globals[i].Name) == 0
       +    if (g_ascii_strncasecmp(ID1, Globals[i].NameStruct, strlen(Globals[i].NameStruct)) == 0 && ID2
       +        && g_ascii_strncasecmp(ID2, Globals[i].Name, strlen(Globals[i].Name)) == 0
                && Globals[i].StructStaticPt && Globals[i].StructListPt) {
              /* ID1[index].ID2=value */
              return i;
       t@@ -2242,11 +2242,11 @@ static gboolean SetConfigValue(int GlobalIndex, int StructIndex,
                G_CSET_a_2_z "._0123456789" G_CSET_A_2_Z;
            parsed = FALSE;
            if (token == G_TOKEN_IDENTIFIER) {
       -      if (g_strcasecmp(scanner->value.v_identifier, "TRUE") == 0 ||
       +      if (g_ascii_strncasecmp(scanner->value.v_identifier, "TRUE", 4) == 0 ||
                  strcmp(scanner->value.v_identifier, "1") == 0) {
                parsed = TRUE;
                *GetGlobalBoolean(GlobalIndex, StructIndex) = TRUE;
       -      } else if (g_strcasecmp(scanner->value.v_identifier, "FALSE") == 0
       +      } else if (g_ascii_strncasecmp(scanner->value.v_identifier, "FALSE", 5) == 0
                         || strcmp(scanner->value.v_identifier, "0") == 0) {
                parsed = TRUE;
                *GetGlobalBoolean(GlobalIndex, StructIndex) = FALSE;
 (DIR) diff --git a/src/gtkport/gtkport.c b/src/gtkport/gtkport.c
       t@@ -5613,7 +5613,7 @@ gint GtkMessageBox(GtkWidget *parent, const gchar *Text,
        
          dialog = gtk_message_dialog_new(GTK_WINDOW(parent),
                                          GTK_DIALOG_MODAL,
       -                                  type, buttons, Text);
       +                                  type, buttons, "%s", Text);
          if (Title) gtk_window_set_title(GTK_WINDOW(dialog), Title);
        
          retval = gtk_dialog_run(GTK_DIALOG(dialog));
 (DIR) diff --git a/src/gui_client/gtk_client.c b/src/gui_client/gtk_client.c
       t@@ -1560,8 +1560,8 @@ static void UpdateDealDialog(void)
            MaxDrug = CanDrop;
          }
        
       -  spin_adj = (GtkAdjustment *)gtk_adjustment_new(MaxDrug, 1.0, MaxDrug,
       -                                                 1.0, 10.0, 10.0);
       +  spin_adj = (GtkAdjustment *)gtk_adjustment_new(MaxDrug, 0.0, MaxDrug,
       +                                                 1.0, 10.0, 0.0);
          gtk_spin_button_set_adjustment(GTK_SPIN_BUTTON(DealDialog.amount),
                                         spin_adj);
          gtk_spin_button_set_value(GTK_SPIN_BUTTON(DealDialog.amount), MaxDrug);
       t@@ -1735,8 +1735,8 @@ void DealDrugs(GtkWidget *widget, gpointer data)
          }
          label = gtk_label_new(text->str);
          gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
       -  spin_adj = (GtkAdjustment *)gtk_adjustment_new(1.0, 1.0, 2.0,
       -                                                 1.0, 10.0, 10.0);
       +  spin_adj = (GtkAdjustment *)gtk_adjustment_new(1.0, 0.0, 2.0,
       +                                                 1.0, 10.0, 0.0);
          spinner = DealDialog.amount = gtk_spin_button_new(spin_adj, 1.0, 0);
          gtk_signal_connect(GTK_OBJECT(spinner), "activate",
                             GTK_SIGNAL_FUNC(DealOKCallback), data);
       t@@ -2013,9 +2013,9 @@ static gint DrugSortFunc(GtkCList *clist, gconstpointer ptr1,
        
          switch (DrugSortMethod) {
          case DS_ATOZ:
       -    return g_strcasecmp(Drug[index1].Name, Drug[index2].Name);
       +    return g_ascii_strncasecmp(Drug[index1].Name, Drug[index2].Name, strlen(Drug[index2].Name));
          case DS_ZTOA:
       -    return g_strcasecmp(Drug[index2].Name, Drug[index1].Name);
       +    return g_ascii_strncasecmp(Drug[index2].Name, Drug[index1].Name, strlen(Drug[index1].Name));
          case DS_CHEAPFIRST:
            pricediff = ClientData.Play->Drugs[index1].Price -
                        ClientData.Play->Drugs[index2].Price;
 (DIR) diff --git a/src/gui_client/newgamedia.c b/src/gui_client/newgamedia.c
       t@@ -24,6 +24,7 @@
        #include <config.h>
        #endif
        
       +#include <string.h>
        #include <stdlib.h>              /* For atoi */
        #include <glib.h>
        
       t@@ -527,12 +528,12 @@ void NewGameDialog(Player *play)
          entry = stgam.hostname = gtk_entry_new();
        
          ServerEntry = "localhost";
       -  if (g_strcasecmp(ServerName, SN_META) == 0) {
       +  if (g_ascii_strncasecmp(ServerName, SN_META, strlen(SN_META)) == 0) {
            NewGameType = 2;
            UpdateMeta = TRUE;
       -  } else if (g_strcasecmp(ServerName, SN_PROMPT) == 0)
       +  } else if (g_ascii_strncasecmp(ServerName, SN_PROMPT, strlen(SN_PROMPT)) == 0)
            NewGameType = 0;
       -  else if (g_strcasecmp(ServerName, SN_SINGLE) == 0)
       +  else if (g_ascii_strncasecmp(ServerName, SN_SINGLE, strlen(SN_SINGLE)) == 0)
            NewGameType = 1;
          else
            ServerEntry = ServerName;
 (DIR) diff --git a/src/network.c b/src/network.c
       t@@ -1295,7 +1295,7 @@ static gboolean ParseHtmlLocation(gchar *uri, gchar **host, unsigned *port,
          gchar *uris, *colon, *slash;
        
          uris = g_strstrip(uri);
       -  if (!uris || strlen(uris) < 7 || g_strncasecmp(uris, "http://", 7) != 0)
       +  if (!uris || strlen(uris) < 7 || g_ascii_strncasecmp(uris, "http://", 7) != 0)
            return FALSE;
        
          uris += 7;                    /* skip to hostname */
       t@@ -1345,8 +1345,8 @@ static void StartHttpAuth(HttpConnection *conn, gboolean proxy,
        
          split = g_strsplit(header, " ", 2);
        
       -  if (split[0] && split[1] && g_strcasecmp(split[0], "Basic") == 0 &&
       -      g_strncasecmp(split[1], "realm=", 6) == 0 && strlen(split[1]) > 6) {
       +  if (split[0] && split[1] && g_ascii_strncasecmp(split[0], "Basic", 5) == 0 &&
       +      g_ascii_strncasecmp(split[1], "realm=", 6) == 0 && strlen(split[1]) > 6) {
            realm = &split[1][6];
            conn->waitinput = TRUE;
            (*conn->authfunc) (conn, proxy, realm, conn->authdata);
       t@@ -1366,7 +1366,7 @@ static void ParseHtmlHeader(gchar *line, HttpConnection *conn,
        
          split = g_strsplit(line, " ", 2);
          if (split[0] && split[1]) {
       -    if (g_strcasecmp(split[0], "Location:") == 0 &&
       +    if (g_ascii_strncasecmp(split[0], "Location:", 9) == 0 &&
                (conn->StatusCode == HEC_MOVETEMP
                 || conn->StatusCode == HEC_MOVEPERM)) {
              if (ParseHtmlLocation(split[1], &host, &port, &query)) {
       t@@ -1380,10 +1380,10 @@ static void ParseHtmlHeader(gchar *line, HttpConnection *conn,
                SetError(&conn->NetBuf.error, &ETHTTP, HEC_BADREDIR,
                         g_strdup(line));
              }
       -    } else if (g_strcasecmp(split[0], "WWW-Authenticate:") == 0 &&
       +    } else if (g_ascii_strncasecmp(split[0], "WWW-Authenticate:", 17) == 0 &&
                       conn->StatusCode == HEC_AUTHREQ) {
              StartHttpAuth(conn, FALSE, split[1], doneOK);
       -    } else if (g_strcasecmp(split[0], "Proxy-Authenticate:") == 0 &&
       +    } else if (g_ascii_strncasecmp(split[0], "Proxy-Authenticate:", 19) == 0 &&
                       conn->StatusCode == HEC_PROXYAUTH) {
              /* Proxy-Authenticate is, strictly speaking, an HTTP/1.1 thing, but
               * some HTTP/1.0 proxies seem to support it anyway */
 (DIR) diff --git a/src/serverside.c b/src/serverside.c
       t@@ -1000,18 +1000,18 @@ static void HandleServerCommand(char *string, NetworkBuffer *netbuf,
          }
          g_scanner_input_text(Scanner, string, strlen(string));
          if (!ParseNextConfig(Scanner, conv, NULL, TRUE)) {
       -    if (g_strcasecmp(string, "help") == 0 || g_strcasecmp(string, "h") == 0
       +    if (g_ascii_strncasecmp(string, "help", 4) == 0 || g_ascii_strncasecmp(string, "h", 1) == 0
                || strcmp(string, "?") == 0) {
              ServerHelp();
       -    } else if (g_strcasecmp(string, "quit") == 0) {
       +    } else if (g_ascii_strncasecmp(string, "quit", 4) == 0) {
              RequestServerShutdown();
       -    } else if (g_strncasecmp(string, "msg:", 4) == 0) {
       +    } else if (g_ascii_strncasecmp(string, "msg:", 4) == 0) {
              BroadcastToClients(C_NONE, C_MSG, string + 4, NULL, NULL);
       -    } else if (g_strncasecmp(string, "save ", 5) == 0) {
       +    } else if (g_ascii_strncasecmp(string, "save ", 5) == 0) {
              ServerSaveConfigFile(string + 5);
       -    } else if (g_strcasecmp(string, "save") == 0) {
       +    } else if (g_ascii_strncasecmp(string, "save", 4) == 0) {
              ServerSaveConfigFile(NULL);
       -    } else if (g_strcasecmp(string, "list") == 0) {
       +    } else if (g_ascii_strncasecmp(string, "list", 4) == 0) {
              if (FirstServer) {
                g_print(_("Users currently logged on:-\n"));
                for (list = FirstServer; list; list = g_slist_next(list)) {
       t@@ -1022,14 +1022,14 @@ static void HandleServerCommand(char *string, NetworkBuffer *netbuf,
                }
              } else
                g_print(_("No users currently logged on!\n"));
       -    } else if (g_strncasecmp(string, "push ", 5) == 0) {
       +    } else if (g_ascii_strncasecmp(string, "push ", 5) == 0) {
              tmp = GetPlayerByName(string + 5, FirstServer);
              if (tmp) {
                g_print(_("Pushing %s\n"), GetPlayerName(tmp));
                SendServerMessage(NULL, C_NONE, C_PUSH, tmp, NULL);
              } else
                g_print(_("No such user!\n"));
       -    } else if (g_strncasecmp(string, "kill ", 5) == 0) {
       +    } else if (g_ascii_strncasecmp(string, "kill ", 5) == 0) {
              tmp = GetPlayerByName(string + 5, FirstServer);
              if (tmp) {
                /* The named user has been removed from the server following
       t@@ -1050,13 +1050,13 @@ static void HandleServerCommand(char *string, NetworkBuffer *netbuf,
        
        Player *HandleNewConnection(void)
        {
       -  int cadsize;
       +  socklen_t cadsize;
          int ClientSock;
          struct sockaddr_in ClientAddr;
          Player *tmp;
          cadsize = sizeof(struct sockaddr);
          if ((ClientSock = accept(ListenSock, (struct sockaddr *)&ClientAddr,
       -                           &cadsize)) == -1) {
       +                            &cadsize)) == -1) {
            perror("accept socket");
            exit(EXIT_FAILURE);
          }
 (DIR) diff --git a/src/sound.c b/src/sound.c
       t@@ -190,7 +190,7 @@ void SoundOpen(gchar *drivername)
              err = g_strdup_printf(_("Invalid plugin \"%s\" selected.\n"
                                      "(%s available; now using \"%s\".)"),
                                    drivername, plugins, NOPLUGIN);
       -      g_log(NULL, G_LOG_LEVEL_CRITICAL, err);
       +      g_log(NULL, G_LOG_LEVEL_CRITICAL, "%s", err);
              g_free(plugins);
              g_free(err);
            }