summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarek Kasik <mkasik@redhat.com>2012-12-09 19:20:00 (GMT)
committerAlbert Astals Cid <aacid@kde.org>2012-12-09 19:20:00 (GMT)
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 9d044bc..ce71820 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;
}