Code

format string protection/clean up (CVE-2007-1463, CVE-2007-1464)
authorkeescook <keescook@users.sourceforge.net>
Tue, 20 Mar 2007 17:16:36 +0000 (17:16 +0000)
committerkeescook <keescook@users.sourceforge.net>
Tue, 20 Mar 2007 17:16:36 +0000 (17:16 +0000)
37 files changed:
configure.ac
src/debug/logger.cpp
src/dom/cssparser.h
src/dom/jsdombind.h
src/dom/jsengine.h
src/dom/lsimpl.h
src/dom/minidom.h
src/dom/svg/svgparser.h
src/dom/uri.h
src/dom/util/ziptool.h
src/dom/xmlreader.cpp
src/dom/xmlreader.h
src/dom/xmlwriter.h
src/dom/xpathparser.h
src/extension/internal/pov-out.cpp
src/extension/internal/pov-out.h
src/extension/internal/svg.cpp
src/file.cpp
src/interface.cpp
src/io/inkscapestream.h
src/jabber_whiteboard/inkboard-document.cpp
src/jabber_whiteboard/pedrogui.cpp
src/jabber_whiteboard/pedrogui.h
src/libcroco/cr-statement.c
src/message-context.h
src/message-stack.h
src/pedro/pedrodom.cpp
src/pedro/pedrodom.h
src/pedro/pedrogui.cpp
src/pedro/pedrogui.h
src/pedro/pedroxmpp.cpp
src/pedro/pedroxmpp.h
src/trace/siox.cpp
src/trace/siox.h
src/util/format.h
src/widgets/desktop-widget.cpp
src/xml/repr-css.cpp

index 121b251f3e75e83f94e58849f51341105dfa2a1c..346c1d35b2a7827c9040362f02dd463120ed2555 100644 (file)
@@ -42,7 +42,7 @@ if test "$GCC" = "yes"; then
   CFLAGS="-Wno-pointer-sign $CFLAGS"
   AC_COMPILE_IFELSE([int dummy;
 ], , CFLAGS="$ink_svd_CFLAGS",)
-  CFLAGS="-Wall -W $CFLAGS"
+  CFLAGS="-Wall -Wformat-security -W -D_FORTIFY_SOURCE=2 $CFLAGS"
 fi
 
 dnl Honor aclocal flags
@@ -690,7 +690,7 @@ if test "$GXX" = "yes"; then
   # programmer deliberately has an unused parameter (e.g. because it's used
   # as a callback or similar function pointer use).
 
-  CXXFLAGS="-Wall -W -Wpointer-arith -Wcast-align -Wsign-compare -Woverloaded-virtual -Wswitch  $CXXFLAGS"
+  CXXFLAGS="-Wall -Wformat-security -W -Wpointer-arith -Wcast-align -Wsign-compare -Woverloaded-virtual -Wswitch -D_FORTIFY_SOURCE=2 $CXXFLAGS"
 
   dnl Test for arch-specific situations.
   case "$host_cpu" in
index fc83e89df006878579182213364194d9f0f34534..f425edd47a5152c4d148a686075de7ccace01646 100644 (file)
@@ -116,7 +116,7 @@ static void set_category_mask(bool * const mask, char const *filter) {
                 }
             }
             if (!iter->name) {
-                g_warning("Unknown debugging category %*s", end - start, start);
+                g_warning("Unknown debugging category %*s", (int)(end - start), start);
             }
         }
         if (*end) {
index 0b399f7d59fe37ad993f2e5952053b05f7449d7b..816936dc38914d8d3336a6d6a8b46fb44508f250 100644 (file)
@@ -29,6 +29,7 @@
  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  */
 
+#include <glib.h>
 
 #include "dom.h"
 
@@ -81,7 +82,7 @@ protected:
     /**
      *
      */
-    void error(char *fmt, ...);
+    void error(char *fmt, ...) G_GNUC_PRINTF(2,3);
 
     /**
      * Get the character at the given location in the buffer.
index f995a1f535f7248c4b2b7f0f279be6c4376a12a2..33a71816a03359d29f8aa6c0a623cfb75a2d659b 100644 (file)
@@ -29,6 +29,7 @@
  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  */
 
+#include <glib.h>
 
 #include "jsengine.h"
 
@@ -126,12 +127,12 @@ private:
     /**
      * Ouput a printf-formatted error message
      */
-    void error(char *fmt, ...);
+    void error(char *fmt, ...) G_GNUC_PRINTF(2,3);
 
     /**
      * Ouput a printf-formatted error message
      */
-    void trace(char *fmt, ...);
+    void trace(char *fmt, ...) G_GNUC_PRINTF(2,3);
 
     JSRuntime *rt;
 
index abcbb23e91457bd29d36b3db6d00d1ac672b9731..f47a7a4c7d1fe8661db28d56d482584957ceafb2 100644 (file)
@@ -29,6 +29,7 @@
  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  */
 
+#include <glib.h>
 
 #include "dom.h"
 #include "js/jsapi.h"
@@ -133,12 +134,12 @@ private:
     /**
      * Ouput a printf-formatted error message
      */
-    void error(char *fmt, ...);
+    void error(char *fmt, ...) G_GNUC_PRINTF(2,3);
 
     /**
      * Ouput a printf-formatted error message
      */
-    void trace(char *fmt, ...);
+    void trace(char *fmt, ...) G_GNUC_PRINTF(2,3);
 
     JSRuntime *rt;
 
index 0f0088684d4828de8b774c54668a6f929339ad5c..d73998e133bcea41d081862c68670085a6a6d131 100644 (file)
@@ -29,6 +29,8 @@
  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  */
 
+#include <glib.h>
+
 #include "domimpl.h"
 #include "events.h"
 #include "traversal.h"
@@ -236,7 +238,7 @@ private:
 
     void spaces();
 
-    void po(char *fmt, ...);
+    void po(char *fmt, ...) G_GNUC_PRINTF(2,3);
 
     void pos(const DOMString &str);
 
index b1ad82f0759fd420c2560e5455171910691a7404..41af805fbeed8460b1d8f77844a7f829d011897a 100644 (file)
@@ -1,3 +1,5 @@
+#include <glib.h>
+
 #include <string>
 #include <vector>
 
@@ -237,7 +239,7 @@ private:
 
     void getLineAndColumn(int pos, int *lineNr, int *colNr);
 
-    void error(char *fmt, ...);
+    void error(char *fmt, ...) G_GNUC_PRINTF(2,3);
 
     int peek(int pos);
 
index 9305a553a24b61119f5635d6c7dc05e6485d1e66..307b44e01a8a3bd99b8fab75965716a1e248a2e9 100644 (file)
@@ -30,6 +30,7 @@
  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  */
 
+#include <glib.h>
 
 #include "svgimpl.h"
 
@@ -122,7 +123,7 @@ protected:
     /**
      *
      */
-    void error(char *format, ...);
+    void error(char *format, ...) G_GNUC_PRINTF(2,3);
 
 
 
index 8bc7df6dac09e74e53374ec8280eaf979931f973..8b95686b8c6d3d681737439eff4e6ce8a80ec04b 100644 (file)
@@ -30,6 +30,7 @@
  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  */
 
+#include <glib.h>
 
 #include "dom.h"
 
@@ -197,9 +198,9 @@ private:
 
     DOMString fragment;
 
-    void error(const char *fmt, ...);
+    void error(const char *fmt, ...) G_GNUC_PRINTF(2,3);
 
-    void trace(const char *fmt, ...);
+    void trace(const char *fmt, ...) G_GNUC_PRINTF(2,3);
 
 
     int peek(int p);
index 895f0ccb2c2857d472af1d46a803a02fdce33dd3..120fe568a62d0023dd3f3954ffeab9270927e551 100644 (file)
@@ -32,6 +32,7 @@
  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  */
 
+#include <glib.h>
 
 #include <vector>
 #include <string>
@@ -203,8 +204,8 @@ private:
     std::string fileName;
 
     //debug messages
-    void error(char *fmt, ...);
-    void trace(char *fmt, ...);
+    void error(char *fmt, ...) G_GNUC_PRINTF(2,3);
+    void trace(char *fmt, ...) G_GNUC_PRINTF(2,3);
 
     unsigned long crc;
 
@@ -469,8 +470,8 @@ public:
 private:
 
     //debug messages
-    void error(char *fmt, ...);
-    void trace(char *fmt, ...);
+    void error(char *fmt, ...) G_GNUC_PRINTF(2,3);
+    void trace(char *fmt, ...) G_GNUC_PRINTF(2,3);
 
     //# Private writing methods
 
index 5e8184e4d243dd98b92b3f7243166d0c8e646b44..6e6db723dbe22a39b63369a49f78bc0996f357e3 100644 (file)
@@ -788,7 +788,7 @@ int XmlReader::parseNode(int p0, NodePtr node, int depth)
                         closeTagQualifiedName);
     if (openTagQualifiedName != closeTagQualifiedName)
         {
-        error("Mismatched closing tag.  Expected </%S>. Got '%S'.",
+        error("Mismatched closing tag.  Expected </%s>. Got '%s'.",
               openTagQualifiedName.c_str(), closeTagQualifiedName.c_str());
         return p0;
         }
index 1060555c738d0d92ae249fe9e379be8f227dcd67..f616fd1e12c8712e22262e7538252c255f54afde 100644 (file)
@@ -30,6 +30,7 @@
  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  */
 
+#include <glib.h>
 
 #include "dom.h"
 
@@ -80,7 +81,7 @@ public:
 
 protected:
 
-    void error(char *format, ...);
+    void error(char *format, ...) G_GNUC_PRINTF(2,3);
 
     int  get(int ch);
     int  peek(int ch);
index bd8501019f7c94f18fce67f3d5f6dc6988caea3e..925dacd51172b47e073a58237c9328bf82b43bcf 100644 (file)
@@ -33,6 +33,7 @@
 
 #include "dom.h"
 #include <stdio.h>
+#include <glib.h>
 
 
 namespace org
@@ -64,7 +65,7 @@ protected:
 
     void spaces();
 
-    void po(char *str, ...);
+    void po(char *str, ...) G_GNUC_PRINTF(2,3);
 
     void pos(const DOMString &str);
 
index ce565622807996d4e48f7033ea09520e2ef1402b..7a5b7cb55c3076894b58614b9b25f763f182c9f4 100644 (file)
@@ -33,6 +33,7 @@
 
 #include <stdio.h>
 #include <stdarg.h>
+#include <glib.h>
 
 #include <string>
 #include <vector>
@@ -415,7 +416,7 @@ private:
     /**
      *
      */
-    void trace(const char *fmt, ...);
+    void trace(const char *fmt, ...) G_GNUC_PRINTF(2,3);
 
     /**
      *
@@ -425,7 +426,7 @@ private:
     /**
      *
      */
-    void error(const char *fmt, ...);
+    void error(const char *fmt, ...) G_GNUC_PRINTF(2,3);
 
     //#################################
     //# LEXICAL  SCANNING
index 54d49a79a35e546daa656a3e49c6d7ec7e3fa180..7318fa78457873bbcaa21388f5cbeb33c333ab6d 100644 (file)
@@ -124,9 +124,10 @@ void PovOutput::out(char *fmt, ...)
 {
     va_list args;
     va_start(args, fmt);
-    g_vsnprintf(fmtbuf, 4096, fmt, args);
+    gchar * output = g_strdup_vprintf(fmt, args);
     va_end(args);
-    outbuf.append(fmtbuf);
+    outbuf.append(output);
+    g_free(output);
 }
 
 
index 951921313e639e28ca3b47ebda0800c4876dd596..28f630f776611ed172ccb23c20c5d27aea6a04b0 100644 (file)
@@ -72,7 +72,7 @@ private:
        /**
         * Format text to our output buffer
         */             
-       void out(char *fmt, ...);
+       void out(char *fmt, ...) G_GNUC_PRINTF(2,3);
 
     /**
      * Output a 2d vector
@@ -155,7 +155,6 @@ private:
     
     //For formatted output
        String outbuf;
-    char fmtbuf[2048];
 
     //For statistics
     int nrNodes;
index 9a097bd6e6cf37c2b0dba185e9ec5c83f371b8f3..5d7b38c335192a37d9107c15940331f58d2fe4ef 100644 (file)
@@ -120,7 +120,7 @@ _load_uri (const gchar *uri)
     GnomeVFSResult result = gnome_vfs_open (&handle, uri_local, GNOME_VFS_OPEN_READ);
 
     if (result != GNOME_VFS_OK) {
-        g_warning(gnome_vfs_result_to_string(result));
+        g_warning("%s", gnome_vfs_result_to_string(result));
     }
 
     std::vector<gchar> doc;
index ba68b171d98fba0c1b70eb360c0a35a6bbbce916..c5347a66e5f2eecae8b35dcdb5e9f12e6b459de3 100644 (file)
@@ -283,7 +283,7 @@ void dump_str(gchar const *str, gchar const *prefix)
     }
 
     tmp += "]";
-    g_message(tmp.c_str());
+    g_message("%s", tmp.c_str());
 }
 
 void dump_ustr(Glib::ustring const &ustr)
@@ -344,7 +344,7 @@ void dump_ustr(Glib::ustring const &ustr)
                 tmp += "            ";
             }
 
-            g_message( tmp.c_str() );
+            g_message( "%s", tmp.c_str() );
         }
     } catch (...) {
         g_message("XXXXXXXXXXXXXXXXXX Exception" );
index dad1146c04d5ec94abd94e184bceff13c0c2bd1b..c7608f53a6c65f3e53d21cb3e2a77ddf0054dc7a 100644 (file)
@@ -1247,7 +1247,7 @@ sp_ui_error_dialog(gchar const *message)
     gchar *safeMsg = Inkscape::IO::sanitizeString(message);
 
     dlg = gtk_message_dialog_new(NULL, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR,
-                                 GTK_BUTTONS_CLOSE, safeMsg);
+                                 GTK_BUTTONS_CLOSE, "%s", safeMsg);
     sp_transientize(dlg);
     gtk_window_set_resizable(GTK_WINDOW(dlg), FALSE);
     gtk_dialog_run(GTK_DIALOG(dlg));
index ad213dad95234b72dbd876356c677fc6d0f5f628..9c624af8f222696322d2aff3d608a0fdce49f643 100644 (file)
@@ -475,7 +475,7 @@ public:
     virtual void put(gunichar ch) = 0;
     
     /* Formatted output */
-    virtual Writer& printf(char *fmt, ...) = 0;
+    virtual Writer& printf(char *fmt, ...) G_GNUC_PRINTF(2,3) = 0;
 
     virtual Writer& writeChar(char val) = 0;
 
@@ -531,7 +531,7 @@ public:
     
     
     /* Formatted output */
-    virtual Writer &printf(char *fmt, ...);
+    virtual Writer &printf(char *fmt, ...) G_GNUC_PRINTF(2,3);
 
     virtual Writer& writeChar(char val);
 
index 0bb0783f0027188a1db6e8857ec4b45fcaddd088..9f3d8ce4293dac6fb59862965dec2df0ad85de0a 100644 (file)
@@ -156,7 +156,7 @@ InkboardDocument::send(const Glib::ustring &destJid, Message::Wrapper &wrapper,
             Vars::WHITEBOARD_MESSAGE, this->sessionType, this->sm->getClient().getJid(),
             destJid, Vars::INKBOARD_XMLNS, this->getSessionId(), mes).c_str());
 
-        if (!this->sm->getClient().write(finalmessage)) 
+        if (!this->sm->getClient().write("%s",finalmessage)) 
             { return false; }
         else 
             { return true; }
index f66e0981ca65a45102841eeaa56e482f3241abe9..81866d8ce6a5532c0a2c5f0481e43b0ee59171d8 100644 (file)
@@ -2048,24 +2048,26 @@ void PedroGui::error(const char *fmt, ...)
 {
     va_list args;
     va_start(args, fmt);
-    vsnprintf(writeBuf, writeBufLen, fmt, args);
+    gchar * buffer = g_strdup_vprintf(fmt, args);
     va_end(args) ;
 
-    Gtk::MessageDialog dlg(writeBuf,
+    Gtk::MessageDialog dlg(buffer,
                            false,
                            Gtk::MESSAGE_ERROR,
                            Gtk::BUTTONS_OK,
                            true);
     dlg.run();
+    g_free(buffer);
 }
 
 void PedroGui::status(const char *fmt, ...)
 {
     va_list args;
     va_start(args, fmt);
-    vsnprintf(writeBuf, writeBufLen, fmt, args);
+    gchar * buffer = g_strdup_vprintf(fmt, args);
     va_end(args) ;
-    messageList.postMessage("STATUS", writeBuf);
+    messageList.postMessage("STATUS", buffer);
+    g_free(buffer);
 }
 
 //################################
@@ -2286,13 +2288,13 @@ void PedroGui::doEvent(const XmppEvent &event)
         case XmppEvent::EVENT_STATUS:
             {
             //printf("##### STATUS: %s\n", event.getData().c_str());
-            status(event.getData().c_str());
+            status("%s", event.getData().c_str());
             break;
             }
         case XmppEvent::EVENT_ERROR:
             {
             //printf("##### ERROR: %s\n", event.getData().c_str());
-            error(event.getData().c_str());
+            error("%s", event.getData().c_str());
             padlockDisable();
             break;
             }
index b223d72635cd6468e9946ea4de84a8d5655fc068..d9a66a5e51b144138d8b800e5ca6c538eb1ff4ca 100644 (file)
@@ -795,9 +795,9 @@ public:
     XmppConfig config;
 
 
-    virtual void error(const char *fmt, ...);
+    virtual void error(const char *fmt, ...) G_GNUC_PRINTF(2,3);
 
-    virtual void status(const char *fmt, ...);
+    virtual void status(const char *fmt, ...) G_GNUC_PRINTF(2,3);
 
 
 
@@ -900,10 +900,6 @@ private:
     std::vector<ChatWindow *>chats;
 
     std::vector<GroupChatWindow *>groupChats;
-
-    static const int writeBufLen = 2048;
-
-    char writeBuf[writeBufLen];
 };
 
 
index 501741c375e8884a16678bf7fbbbaebdadf72c59..40df49878066be7c7085846a1182ddec5c9e2d22 100644 (file)
@@ -2432,7 +2432,7 @@ cr_statement_dump_ruleset (CRStatement * a_this, FILE * a_fp, glong a_indent)
         g_return_if_fail (a_fp && a_this);
         gchar *str = cr_statement_ruleset_to_string (a_this, a_indent);
         if (str) {
-                fprintf (a_fp, str);
+                fprintf (a_fp, "%s", str);
                 g_free (str);
                 str = NULL;
         }
@@ -2475,7 +2475,7 @@ cr_statement_dump_charset (CRStatement * a_this, FILE * a_fp, gulong a_indent)
         gchar *str = cr_statement_charset_to_string (a_this,
                                               a_indent) ;
         if (str) {
-                fprintf (a_fp, str) ;
+                fprintf (a_fp, "%s", str) ;
                 g_free (str) ;
                 str = NULL ;
         }
@@ -2497,7 +2497,7 @@ cr_statement_dump_page (CRStatement * a_this, FILE * a_fp, gulong a_indent)
 
         gchar *str = cr_statement_at_page_rule_to_string (a_this, a_indent) ;
         if (str) {
-                fprintf (a_fp, str);
+                fprintf (a_fp, "%s", str);
                 g_free (str) ;
                 str = NULL ; 
         }
@@ -2520,7 +2520,7 @@ cr_statement_dump_media_rule (CRStatement * a_this,
 
         str = cr_statement_media_rule_to_string (a_this, a_indent) ;
         if (str) {
-                fprintf (a_fp, str) ;
+                fprintf (a_fp, "%s", str) ;
                 g_free (str) ;
                 str = NULL ;
         }
@@ -2543,7 +2543,7 @@ cr_statement_dump_import_rule (CRStatement * a_this, FILE * a_fp,
 
         str = cr_statement_import_rule_to_string (a_this, a_indent) ;
         if (str) {
-                fprintf (a_fp, str) ;
+                fprintf (a_fp, "%s", str) ;
                 g_free (str) ;
                 str = NULL ;
         }
index e5ed18e8bf792e819a8a7ec882f5ee62c117a083..145a73ee553c10d0de0a06f77e81db2d5e1ed12e 100644 (file)
@@ -15,7 +15,7 @@
 #define SEEN_INKSCAPE_MESSAGE_CONTEXT_H
 
 #include <stdarg.h>
-#include <glib/gtypes.h>
+#include <glib.h>
 #include "message.h"
 
 namespace Inkscape {
@@ -56,7 +56,7 @@ public:
       * @param type the message type
       * @param format a printf-style formatting string
       */
-    void setF(MessageType type, gchar const *format, ...);
+    void setF(MessageType type, gchar const *format, ...) G_GNUC_PRINTF(3,4);
 
     /** @brief pushes a message on the stack using printf-style formatting,
       *        and a stdarg argument list
@@ -82,7 +82,7 @@ public:
       * @param type the message type
       * @param format a printf-style formatting string
       */
-    void flashF(MessageType type, gchar const *format, ...);
+    void flashF(MessageType type, gchar const *format, ...) G_GNUC_PRINTF(3,4);
 
     /** @brief pushes a message onto the stack for a brief period of time
       *        using printf-style formatting and a stdarg argument list;
index 058c44933749b4d85325e35b11cb600086904318..24ec2d599219527ce92309805ceab4cb4a6ac1b2 100644 (file)
@@ -15,7 +15,7 @@
 #define SEEN_INKSCAPE_MESSAGE_STACK_H
 
 #include <sigc++/sigc++.h>
-#include <glib/gtypes.h>
+#include <glib.h>
 #include <stdarg.h>
 #include "gc-managed.h"
 #include "gc-finalized.h"
@@ -85,7 +85,7 @@ public:
       *
       * @return the id of the pushed message
       */
-    MessageId pushF(MessageType type, gchar const *format, ...);
+    MessageId pushF(MessageType type, gchar const *format, ...) G_GNUC_PRINTF(3,4);
 
     /** @brief pushes a message onto the stack using printf-like formatting,
       *        using a stdarg argument list
@@ -124,7 +124,7 @@ public:
       *
       * @return the id of the pushed message
       */
-    MessageId flashF(MessageType type, gchar const *format, ...);
+    MessageId flashF(MessageType type, gchar const *format, ...) G_GNUC_PRINTF(3,4);
 
     /** @brief temporarily pushes a message onto the stack using
       *        printf-like formatting, using a stdarg argument list
index a15d742516c77a4e1f3cf0008319688f75ad2169..4cb176a52973f72fb3dd3b7bde320ae4bceaa7ad 100644 (file)
@@ -652,7 +652,7 @@ int Parser::parseElement(int p0, Element *par,int depth)
     p = getWord(p, closeTagName);
     if (openTagName != closeTagName)
         {
-        error("Mismatched closing tag.  Expected </%S>. Got '%S'.",
+        error("Mismatched closing tag.  Expected </%s>. Got '%s'.",
                 openTagName.c_str(), closeTagName.c_str());
         return p0;
         }
index 0d418ac20d6537ab724e48788898023ab8a6d124..b8078dce14fa46abb9e3d29c7dd1bfbf19a9334c 100644 (file)
@@ -23,6 +23,8 @@
  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  */
 
+#include <glib.h>
+
 #include <string>
 #include <vector>
 
@@ -312,7 +314,7 @@ private:
 
     void getLineAndColumn(long pos, long *lineNr, long *colNr);
 
-    void error(char *fmt, ...);
+    void error(char *fmt, ...) G_GNUC_PRINTF(2,3);
 
     int peek(long pos);
 
index 6bdbe3422c16dbb726936f70954cbdd5cf8a0059..38c66b40771fbffc73990d3c54150eaffc55d899 100644 (file)
@@ -1992,24 +1992,26 @@ void PedroGui::error(const char *fmt, ...)
 {
     va_list args;
     va_start(args, fmt);
-    vsnprintf(writeBuf, writeBufLen, fmt, args);
+    gchar * buffer = g_strdup_vprintf(fmt, args);
     va_end(args) ;
 
-    Gtk::MessageDialog dlg(writeBuf,
+    Gtk::MessageDialog dlg(buffer,
                            false,
                            Gtk::MESSAGE_ERROR,
                            Gtk::BUTTONS_OK,
                            true);
     dlg.run();
+    g_free(buffer);
 }
 
 void PedroGui::status(const char *fmt, ...)
 {
     va_list args;
     va_start(args, fmt);
-    vsnprintf(writeBuf, writeBufLen, fmt, args);
+    gchar * buffer = g_strdup_vprintf(fmt, args);
     va_end(args) ;
-    messageList.postMessage("STATUS", writeBuf);
+    messageList.postMessage("STATUS", buffer);
+    g_free(buffer);
 }
 
 //################################
@@ -2227,13 +2229,13 @@ void PedroGui::doEvent(const XmppEvent &event)
         case XmppEvent::EVENT_STATUS:
             {
             //printf("##### STATUS: %s\n", event.getData().c_str());
-            status(event.getData().c_str());
+            status("%s", event.getData().c_str());
             break;
             }
         case XmppEvent::EVENT_ERROR:
             {
             //printf("##### ERROR: %s\n", event.getData().c_str());
-            error(event.getData().c_str());
+            error("%s", event.getData().c_str());
             padlockDisable();
             break;
             }
index dfafc0edfd033a1c1522c898412fff3e94674d6c..4af4f1aac381a94bd5b2a64994948d8d0810ca72 100644 (file)
@@ -790,9 +790,9 @@ public:
     XmppConfig config;
 
 
-    virtual void error(const char *fmt, ...);
+    virtual void error(const char *fmt, ...) G_GNUC_PRINTF(2,3);
 
-    virtual void status(const char *fmt, ...);
+    virtual void status(const char *fmt, ...) G_GNUC_PRINTF(2,3);
 
 
 
@@ -893,10 +893,6 @@ private:
     std::vector<ChatWindow *>chats;
 
     std::vector<GroupChatWindow *>groupChats;
-
-    static const int writeBufLen = 2048;
-
-    char writeBuf[writeBufLen];
 };
 
 
index efe51d277ff05c9573091251407a38deb8eb7e70..1dc1d7ced87af33500edbbd8f9708a2c18c1235f 100644 (file)
@@ -295,12 +295,13 @@ void XmppEventTarget::error(char *fmt, ...)
 {
     va_list args;
     va_start(args,fmt);
-    vsnprintf(targetWriteBuf, targetWriteBufLen, fmt, args);
+    gchar * buffer = g_strdup_vprintf(fmt, args);
     va_end(args) ;
-    fprintf(stderr, "Error:%s\n", targetWriteBuf);
+    fprintf(stderr, "Error:%s\n", buffer);
     XmppEvent evt(XmppEvent::EVENT_ERROR);
-    evt.setData(targetWriteBuf);
+    evt.setData(buffer);
     dispatchXmppEvent(evt);
+    g_free(buffer);
 }
 
 
@@ -312,12 +313,13 @@ void XmppEventTarget::status(char *fmt, ...)
 {
     va_list args;
     va_start(args,fmt);
-    vsnprintf(targetWriteBuf, targetWriteBufLen, fmt, args);
+    gchar * buffer = g_strdup_vprintf(fmt, args);
     va_end(args) ;
-    //printf("Status:%s\n", targetWriteBuf);
+    //printf("Status:%s\n", buffer);
     XmppEvent evt(XmppEvent::EVENT_STATUS);
-    evt.setData(targetWriteBuf);
+    evt.setData(buffer);
     dispatchXmppEvent(evt);
+    g_free(buffer);
 }
 
 
@@ -1158,7 +1160,7 @@ bool XmppClient::processIq(Element *root)
              "IQ set does not contain a 'from' address because "
              "the entity is not registered with the server");
             }
-        error((char *)errMsg.c_str());
+        error("%s",(char *)errMsg.c_str());
         }
 
     else if (id.find("regcancel") != id.npos)
@@ -1197,7 +1199,7 @@ bool XmppClient::processIq(Element *root)
                  "IQ set does not contain a 'from' address because "
                  "the entity is not registered with the server");
             }
-        error((char *)errMsg.c_str());
+        error("%s",(char *)errMsg.c_str());
         }
 
     return true;
@@ -1287,17 +1289,19 @@ bool XmppClient::receiveAndProcessLoop()
 
 bool XmppClient::write(char *fmt, ...)
 {
+    bool rc = true;
     va_list args;
     va_start(args,fmt);
-    vsnprintf((char *)writeBuf, writeBufLen, fmt,args);
+    gchar * buffer = g_strdup_vprintf(fmt,args);
     va_end(args) ;
-    status("SEND: %s", writeBuf);
-    if (!sock->write((char *)writeBuf))
+    status("SEND: %s", buffer);
+    if (!sock->write(buffer))
         {
         error("Cannot write to socket");
-        return false;
+        rc = false;
         }
-    return true;
+    g_free(buffer);
+    return rc;
 }
 
 
@@ -1388,7 +1392,7 @@ bool XmppClient::inBandRegistrationNew()
             {
             errMsg.append("some registration information was not provided");
             }
-        error((char *)errMsg.c_str());
+        error("%s",(char *)errMsg.c_str());
         delete elem;
         return false;
         }
@@ -1612,7 +1616,7 @@ bool XmppClient::saslMd5Authenticate()
     char *fmt =
     "<auth xmlns='urn:ietf:params:xml:ns:xmpp-sasl' "
         "mechanism='DIGEST-MD5'/>\n";
-    if (!write(fmt))
+    if (!write("%s",fmt))
         return false;
 
     DOMString recbuf = readStanza();
@@ -1760,7 +1764,7 @@ bool XmppClient::saslMd5Authenticate()
 
     fmt =
     "<response xmlns='urn:ietf:params:xml:ns:xmpp-sasl'/>\n";
-    if (!write(fmt))
+    if (!write("%s",fmt))
         return false;
 
     recbuf = readStanza();
@@ -1843,7 +1847,7 @@ bool XmppClient::saslAuthenticate()
         delete elem;
         char *fmt =
         "<starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'/>\n";
-        if (!write(fmt))
+        if (!write("%s",fmt))
             return false;
         recbuf = readStanza();
         status("RECV: '%s'\n", recbuf.c_str());
@@ -2087,7 +2091,7 @@ bool XmppClient::createSession()
         DOMString givenJid, givenResource;
         parseJid(givenFullJid, givenJid, givenResource);
         status("given user: %s realm: %s, rsrc: %s",
-           givenJid.c_str(), givenResource.c_str());
+           givenJid.c_str(), realm.c_str(), givenResource.c_str());
         setResource(givenResource);
         }
         
@@ -2143,7 +2147,7 @@ bool XmppClient::createSession()
 
     fmt =
      "<presence/>\n";
-    if (!write(fmt))
+    if (!write("%s",fmt))
         return false;
 
     /*
@@ -2217,7 +2221,7 @@ bool XmppClient::disconnect()
         {
         char *fmt =
         "<presence type='unavailable'/>\n";
-        write(fmt);
+        write("%s",fmt);
         }
     keepGoing = false;
     connected = false;
index 1ad849b9903e517dccd03718ce7a8207b848a0b2..554cb76c666ae16a2b23a3b6e4bfe7997233f7f6 100644 (file)
@@ -24,6 +24,7 @@
  */
 
 #include <stdio.h>
+#include <glib.h>
 #include <vector>
 #include <map>
 
@@ -566,13 +567,13 @@ public:
     /**
      * Send an error message to all subscribers
      */
-    void error(char *fmt, ...);
+    void error(char *fmt, ...) G_GNUC_PRINTF(2,3);
 
 
     /**
      * Send a status message to all subscribers
      */
-    void status(char *fmt, ...);
+    void status(char *fmt, ...) G_GNUC_PRINTF(2,3);
 
     //###########################
     //# LISTENERS
@@ -629,10 +630,6 @@ private:
 
     std::vector<XmppEvent> eventQueue;
     bool eventQueueEnabled;
-
-    static const int targetWriteBufLen = 2048;
-
-    char targetWriteBuf[targetWriteBufLen];
 };
 
 
@@ -725,7 +722,7 @@ public:
     /**
      *
      */
-    virtual bool write(char *fmt, ...);
+    virtual bool write(char *fmt, ...) G_GNUC_PRINTF(2,3);
 
     //#######################
     //# V A R I A B L E S
@@ -1146,10 +1143,6 @@ private:
 
     bool doRegister;
 
-    static const int writeBufLen = 2048;
-
-    unsigned char writeBuf[writeBufLen];
-
     std::vector<XmppGroupChat *>groupChats;
 
     //#### Roster
index f06f943e054c22b4f34e76d04fe59a7bf3fb2a6b..c69af04a165c85266a3897e98cdd8576018dac8e 100644 (file)
@@ -884,7 +884,7 @@ SioxImage Siox::extractForeground(const SioxImage &originalImage,
         return workImage;
         }
 
-    trace("knownBg:%d knownFg:%d", knownBg.size(), knownFg.size());
+    trace("knownBg:%zu knownFg:%zu", knownBg.size(), knownFg.size());
 
 
     std::vector<CieLab> bgSignature ;
index 8f6f90ff9887438771db1d88e87f32be08201016..5d6059d3ce84c3dabb5eccb437b491ef97130e24 100644 (file)
@@ -374,7 +374,7 @@ private:
     /**
      * Error logging
      */
-    void error(char *fmt, ...);
+    void error(char *fmt, ...) G_GNUC_PRINTF(2,3);
 
 };
 
@@ -562,12 +562,12 @@ private:
     /**
      * Error logging
      */
-    void error(char *fmt, ...);
+    void error(char *fmt, ...) G_GNUC_PRINTF(2,3);
 
     /**
      * Trace logging
      */
-    void trace(char *fmt, ...);
+    void trace(char *fmt, ...) G_GNUC_PRINTF(2,3);
 
     /**
      *  Stage 1 of the color signature work.  'dims' will be either
index 3066173e1aad984632efa7f5e8c570d974217a9b..80d79c28a4467b1502eaf6331587cf6b6c82534c 100644 (file)
@@ -13,7 +13,7 @@
 #define SEEN_INKSCAPE_UTIL_FORMAT_H
 
 #include <stdarg.h>
-#include <glib/gstrfuncs.h>
+#include <glib.h>
 #include "util/share.h"
 
 namespace Inkscape {
@@ -27,6 +27,8 @@ inline ptr_shared<char> vformat(char const *format, va_list args) {
     return result;
 }
 
+       // needed since G_GNUC_PRINTF can only be used on a declaration
+       ptr_shared<char> format(char const *format, ...) G_GNUC_PRINTF(1,2);
 inline ptr_shared<char> format(char const *format, ...) {
     va_list args;
 
index 237e4c8e9f40c5e8519049104157558ecb150e41..65afc4f2926cf7b293e9b9eff152e752e9b4104d 100644 (file)
@@ -823,7 +823,7 @@ SPDesktopWidget::warnDialog (gchar* text)
                 GTK_DIALOG_DESTROY_WITH_PARENT,
                 GTK_MESSAGE_WARNING,
                 GTK_BUTTONS_YES_NO,
-                text);
+                "%s", text);
         gint response = gtk_dialog_run(GTK_DIALOG(dialog));
         gtk_widget_destroy(dialog);
         if (response == GTK_RESPONSE_YES)
index 994d73a2406df3fd565dbf34318e00df20fa83e7..8540ff9f0ebc029a2afb1867d91346d7fd008263 100644 (file)
@@ -186,10 +186,9 @@ sp_repr_css_print(SPCSSAttr *css)
     for ( List<AttributeRecord const> iter = css->attributeList() ;
           iter ; ++iter )
     {
-        g_print(g_quark_to_string(iter->key));
-        g_print(":\t");
-        g_print(iter->value);
-        g_print("\n");
+        gchar const * key = g_quark_to_string(iter->key);
+        gchar const * val = iter->value;
+        g_print("%s:\t%s\n",key,val);
     }
 }