utils/pdfdetach.cc | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-)
New commits: commit d2f5d424ba8752f9a9e9dad410546ec1b46caa0a Author: Adam Reichold <[email protected]> Date: Tue Nov 6 09:08:06 2018 +0100 pdfdetach: Check for valid file name of embedded file before using it to determine save path. Closes #660 diff --git a/utils/pdfdetach.cc b/utils/pdfdetach.cc index a8720c64..71fa8608 100644 --- a/utils/pdfdetach.cc +++ b/utils/pdfdetach.cc @@ -191,14 +191,18 @@ int main(int argc, char *argv[]) { fileSpec = static_cast<FileSpec *>(embeddedFiles->get(i)); printf("%d: ", i+1); s1 = fileSpec->getFileName(); - if ((s1->getChar(0) & 0xff) == 0xfe && (s1->getChar(1) & 0xff) == 0xff) { + if (!s1) { + exitCode = 3; + goto err2; + } + if (s1->hasUnicodeMarker()) { isUnicode = true; j = 2; } else { isUnicode = false; j = 0; } - while (j < fileSpec->getFileName()->getLength()) { + while (j < s1->getLength()) { if (isUnicode) { u = ((s1->getChar(j) & 0xff) << 8) | (s1->getChar(j+1) & 0xff); j += 2; @@ -228,14 +232,18 @@ int main(int argc, char *argv[]) { p = path; } s1 = fileSpec->getFileName(); - if ((s1->getChar(0) & 0xff) == 0xfe && (s1->getChar(1) & 0xff) == 0xff) { + if (!s1) { + exitCode = 3; + goto err2; + } + if (s1->hasUnicodeMarker()) { isUnicode = true; j = 2; } else { isUnicode = false; j = 0; } - while (j < fileSpec->getFileName()->getLength()) { + while (j < s1->getLength()) { if (isUnicode) { u = ((s1->getChar(j) & 0xff) << 8) | (s1->getChar(j+1) & 0xff); j += 2; @@ -276,14 +284,18 @@ int main(int argc, char *argv[]) { } else { p = path; s1 = fileSpec->getFileName(); - if ((s1->getChar(0) & 0xff) == 0xfe && (s1->getChar(1) & 0xff) == 0xff) { + if (!s1) { + exitCode = 3; + goto err2; + } + if (s1->hasUnicodeMarker()) { isUnicode = true; j = 2; } else { isUnicode = false; j = 0; } - while (j < fileSpec->getFileName()->getLength()) { + while (j < s1->getLength()) { if (isUnicode) { u = ((s1->getChar(j) & 0xff) << 8) | (s1->getChar(j+1) & 0xff); j += 2; _______________________________________________ poppler mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/poppler
