poppler/Error.cc |   21 +++++++++++++++++----
 1 file changed, 17 insertions(+), 4 deletions(-)

New commits:
commit 71bad47ed6a36d825b0d08992c8db56845c71e40
Author: Marek Kasik <[email protected]>
Date:   Sun Dec 9 20:20:00 2012 +0100

    Filter stuff that might end up in the shell
    
    Since it seems shells don't know how to filter stuff and might causing bad 
things to happen

diff --git a/poppler/Error.cc b/poppler/Error.cc
index 9d044bc..ce71820 100644
--- a/poppler/Error.cc
+++ b/poppler/Error.cc
@@ -16,6 +16,7 @@
 // Copyright (C) 2005, 2007 Jeff Muizelaar <[email protected]>
 // Copyright (C) 2005 Albert Astals Cid <[email protected]>
 // Copyright (C) 2007 Krzysztof Kowalczyk <[email protected]>
+// Copyright (C) 2012 Marek Kasik <[email protected]>
 //
 // To see a description of the changes please see the Changelog file that
 // came with your tarball or type make ChangeLog if you are building from git
@@ -59,7 +60,7 @@ void setErrorCallback(void (*cbk)(void *data, ErrorCategory 
category,
 
 void CDECL error(ErrorCategory category, int pos, const char *msg, ...) {
   va_list args;
-  GooString *s;
+  GooString *s, *sanitized;
 
   // NB: this can be called before the globalParams object is created
   if (!errorCbk && globalParams && globalParams->getErrQuiet()) {
@@ -68,17 +69,29 @@ void CDECL error(ErrorCategory category, int pos, const 
char *msg, ...) {
   va_start(args, msg);
   s = GooString::formatv(msg, args);
   va_end(args);
+
+  sanitized = new GooString ();
+  for (int i = 0; i < s->getLength(); ++i) {
+    const char c = s->getChar(i);
+    if (c < (char)0x20 || c >= (char)0x7f) {
+      sanitized->appendf("<{0:02x}>", c & 0xff);
+    } else {
+      sanitized->append(c);
+    }
+  }
+
   if (errorCbk) {
-    (*errorCbk)(errorCbkData, category, pos, s->getCString());
+    (*errorCbk)(errorCbkData, category, pos, sanitized->getCString());
   } else {
     if (pos >= 0) {
       fprintf(stderr, "%s (%d): %s\n",
-             errorCategoryNames[category], pos, s->getCString());
+             errorCategoryNames[category], pos, sanitized->getCString());
     } else {
       fprintf(stderr, "%s: %s\n",
-             errorCategoryNames[category], s->getCString());
+             errorCategoryNames[category], sanitized->getCString());
     }
     fflush(stderr);
   }
   delete s;
+  delete sanitized;
 }
_______________________________________________
poppler mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/poppler

Reply via email to