[poppler] utils/pdfdetach.cc

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Nov 6 15:04:03 UTC 2018


 utils/pdfdetach.cc |   24 ++++++++++++++++++------
 1 file changed, 18 insertions(+), 6 deletions(-)

New commits:
commit d2f5d424ba8752f9a9e9dad410546ec1b46caa0a
Author: Adam Reichold <adam.reichold at t-online.de>
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;


More information about the poppler mailing list