summaryrefslogtreecommitdiff
authorMarek Kasik <mkasik@redhat.com>2012-12-09 19:20:00 (GMT)
committer Albert Astals Cid <aacid@kde.org>2012-12-09 19:20:00 (GMT)
commit71bad47ed6a36d825b0d08992c8db56845c71e40 (patch) (side-by-side diff)
tree1ab431b3af6bddf678fc93fbbaed6499ca34ac3d
parentc35d030472e6cb140c3dff30b91541772c992eb0 (diff)
downloadpoppler-71bad47ed6a36d825b0d08992c8db56845c71e40.zip
poppler-71bad47ed6a36d825b0d08992c8db56845c71e40.tar.gz
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
Diffstat (more/less context) (ignore whitespace changes)
-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;
}