summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarek Kasik <mkasik@redhat.com>2012-12-09 20:20:00 +0100
committerAlbert Astals Cid <aacid@kde.org>2012-12-09 20:20:00 +0100
commit71bad47ed6a36d825b0d08992c8db56845c71e40 (patch)
tree1ab431b3af6bddf678fc93fbbaed6499ca34ac3d
parentc35d030472e6cb140c3dff30b91541772c992eb0 (diff)
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
-rw-r--r--poppler/Error.cc21
1 files changed, 17 insertions, 4 deletions
diff --git a/poppler/Error.cc b/poppler/Error.cc
index 9d044bc7..ce71820b 100644
--- a/poppler/Error.cc
+++ b/poppler/Error.cc
@@ -16,6 +16,7 @@
// Copyright (C) 2005, 2007 Jeff Muizelaar <jeff@infidigm.net>
// Copyright (C) 2005 Albert Astals Cid <aacid@kde.org>
// Copyright (C) 2007 Krzysztof Kowalczyk <kkowalczyk@gmail.com>
+// Copyright (C) 2012 Marek Kasik <mkasik@redhat.com>
//
// 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;
}