-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hi,

I have found a bug in the original patch causing bad optarg (fails if
longargs there used with parameter). Please merge the attached version.

Regards,
Georg

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.17 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iEYEARECAAYFAk42fAcACgkQ5sLITM1qIaKuHACgpOsZeUA0PQnZaqsTSw+N7oUM
DG8An0XndsppoPFb0yICYt6NEtageCu7
=Gf3o
-----END PGP SIGNATURE-----
# Bazaar merge directive format 2 (Bazaar 0.90)
# revision_id: [email protected]\
#   9cp20yj7j8k1ooyy
# target_branch: bzr://bzr.sv.gnu.org/pdf/libgnupdf/trunk/
# testament_sha1: cbf84c5b4cbeb3aecf0e55f795ec67e799d38964
# timestamp: 2011-08-01 12:04:12 +0200
# base_revision_id: [email protected]
# 
# Begin patch
=== modified file 'AUTHORS'
--- AUTHORS     2011-05-21 10:25:50 +0000
+++ AUTHORS     2011-07-30 19:53:35 +0000
@@ -33,6 +33,8 @@
 
 Franck Lesage: changed pdf-hash-helper.c pdf-hash-helper.h gnupdf.texi
 
+Georg Gottleuber: changed pdf-filter.c
+
 Gerardo E. Gidoni: changed gnupdf.texi pdf-stm-read.c gnupdf-tsd.texi
   pdf-stm-write.c configure.ac pdf-filter.c pdf-stm-f-flate.h
   pdf-stm-f-rl.c check-api-doc-consistency.pl

=== modified file 'ChangeLog'
--- ChangeLog   2011-07-07 16:01:46 +0000
+++ ChangeLog   2011-07-30 19:53:35 +0000
@@ -1,3 +1,8 @@
+2011-07-30  Georg Gottleuber  <[email protected]>
+
+       utils: fix arg evaluation of pdf-filter
+       * utils/pdf-filter.c
+
 2011-07-07  Aleksander Morgado  <[email protected]>
 
        base,hash: cast to long all 32bit integers before packing them in a ptr.

=== modified file 'utils/pdf-filter.c'
--- utils/pdf-filter.c  2011-07-07 15:29:22 +0000
+++ utils/pdf-filter.c  2011-07-30 19:53:35 +0000
@@ -60,6 +60,7 @@
 
 enum
 {
+  FILTER_INSTALL_NONE,
   HELP_ARG,
   VERSION_ARG,
   READ_ARG,
@@ -90,18 +91,33 @@
   JBIG2DEC_FILTER_ARG,
   JBIG2DEC_GLOBAL_SEGMENTS_ARG,
   JBIG2DEC_PAGE_SIZE,
+  JBIG2DEC_FILTER_INSTALL,
 #endif /* HAVE_LIBJBIG2DEC */
   LZWENC_FILTER_ARG,
   LZWDEC_FILTER_ARG,
   LZW_EARLYCHANGE_ARG,
+  LZWENC_FILTER_INSTALL,
+  LZWDEC_FILTER_INSTALL,
   MD5ENC_FILTER_ARG,
   KEY_ARG,
   AESENC_FILTER_ARG,
   AESDEC_FILTER_ARG,
+  AESENC_FILTER_INSTALL,
+  AESDEC_FILTER_INSTALL,
   V2ENC_FILTER_ARG,
-  V2DEC_FILTER_ARG
+  V2DEC_FILTER_ARG,
+  V2ENC_FILTER_INSTALL,
+  V2DEC_FILTER_INSTALL
 };
 
+/* name filter args here */
+#define IS_FILTER_ARG(arg)                  \
+  ((arg) == JBIG2DEC_GLOBAL_SEGMENTS_ARG || \
+   (arg) == JBIG2DEC_PAGE_SIZE           || \
+   (arg) == LZW_EARLYCHANGE_ARG          || \
+   (arg) == KEY_ARG)
+
+
 static const struct option GNU_longOptions[] =
   {
     {"help", no_argument, NULL, HELP_ARG},
@@ -324,7 +340,7 @@
   else
     {
       /* Write stdin into the write stream,
-        which will be transparently writting the output to stdout. */
+         which will be transparently writting the output to stdout. */
       do
         {
           if (read_pdf_fsys)
@@ -392,11 +408,11 @@
   *read_mode = PDF_FALSE;
 
   while (!finish &&
-        (ci = getopt_long (argc,
-                            argv,
-                            "i:o:",
-                            GNU_longOptions,
-                            NULL)) != -1)
+        (ci = getopt_long (argc,
+                    argv,
+                    "i:o:",
+                    GNU_longOptions,
+                    NULL)) != -1)
     {
       c = ci;
       switch (c)
@@ -562,7 +578,6 @@
                  pdf_stm_t *stm,
                  int        ci)
 {
-  char c;
   pdf_status_t ret;
   pdf_hash_t *filter_params = NULL;
   FILE *file;
@@ -570,6 +585,9 @@
   pdf_status_t status;
   pdf_bool_t lzw_earlychange = PDF_FALSE;
   pdf_error_t *error = NULL;
+  char filter_to_install = FILTER_INSTALL_NONE;
+  char *old_optarg = optarg;
+  char next_ci = getopt_long (argc, argv, "", GNU_longOptions, NULL);
 
   /* Initialize the crypt module */
   if (pdf_crypt_init () != PDF_OK)
@@ -581,8 +599,7 @@
   /* Install filters */
   do
     {
-      c = ci;
-      switch (c)
+      switch (ci)
         {
           /* FILTER INSTALLERS */
         case NULL_FILTER_ARG:
@@ -727,9 +744,25 @@
             break;
           }
 
-        case LZWENC_FILTER_ARG: /* Note that both ENC and DEC go here */
+        case LZWENC_FILTER_ARG:
+          {
+            filter_to_install = LZWENC_FILTER_INSTALL;
+
+            /* set default value */
+            lzw_earlychange = PDF_FALSE;
+            break;
+          }
         case LZWDEC_FILTER_ARG:
           {
+            filter_to_install = LZWDEC_FILTER_INSTALL;
+
+            /* set default value */
+            lzw_earlychange = PDF_FALSE;
+            break;
+          }
+        case LZWENC_FILTER_INSTALL: /* Note that both ENC and DEC go here */
+        case LZWDEC_FILTER_INSTALL:
+          {
             filter_params = pdf_hash_new (&error);
             if (!filter_params)
               {
@@ -753,7 +786,7 @@
               }
 
             if (!pdf_stm_install_filter (stm,
-                                         (c == LZWENC_FILTER_ARG ?
+                                         (ci == LZWENC_FILTER_INSTALL ?
                                           PDF_STM_FILTER_LZW_ENC :
                                           PDF_STM_FILTER_LZW_DEC),
                                          filter_params,
@@ -846,10 +879,10 @@
           {
             struct stat fstats;
 
-            stat (optarg, &fstats);
+            stat (old_optarg, &fstats);
 
             /* Load the contents of a jbig2 global segments file */
-            file = fopen (optarg, "r");
+            file = fopen (old_optarg, "r");
             if (file == NULL)
               {
                 fprintf (stderr, "error: invalid jbig2 global segments 
file\n");
@@ -873,6 +906,11 @@
 
         case JBIG2DEC_FILTER_ARG:
           {
+            filter_to_install = JBIG2DEC_FILTER_INSTALL;
+            break;
+          }
+        case JBIG2DEC_FILTER_INSTALL:
+          {
             if (jbig2dec_global_segments != NULL)
               {
                 filter_params = pdf_hash_new (&error);
@@ -959,13 +997,23 @@
                 key = NULL;
               }
 
-            key = strdup (optarg);
+            key = strdup (old_optarg);
             break;
           }
 
-        case AESENC_FILTER_ARG: /* Note that both ENC and DEC go here */
+        case AESENC_FILTER_ARG:
+          {
+            filter_to_install = AESENC_FILTER_INSTALL;
+            break;
+          }
         case AESDEC_FILTER_ARG:
           {
+            filter_to_install = AESDEC_FILTER_INSTALL;
+            break;
+          }
+        case AESENC_FILTER_INSTALL: /* Note that both ENC and DEC go here */
+        case AESDEC_FILTER_INSTALL:
+          {
             if (key == NULL)
               {
                 fprintf (stderr, "You should specify a key for the AESv2 
filter.\n");
@@ -1007,7 +1055,7 @@
               }
 
             if (!pdf_stm_install_filter (stm,
-                                         (c == AESENC_FILTER_ARG ?
+                                         (ci == AESENC_FILTER_INSTALL ?
                                           PDF_STM_FILTER_AESV2_ENC :
                                           PDF_STM_FILTER_AESV2_DEC),
                                          filter_params,
@@ -1025,9 +1073,19 @@
             break;
           }
 
-        case V2ENC_FILTER_ARG: /* Note that both ENC and DEC go here */
+        case V2ENC_FILTER_ARG:
+          {
+            filter_to_install = V2ENC_FILTER_INSTALL;
+            break;
+          }
         case V2DEC_FILTER_ARG:
           {
+            filter_to_install = V2DEC_FILTER_INSTALL;
+            break;
+          }
+        case V2ENC_FILTER_INSTALL: /* Note that both ENC and DEC go here */
+        case V2DEC_FILTER_INSTALL:
+          {
             if (key == NULL)
               {
                 fprintf (stderr, "You should specify a key for the V2 
filter.\n");
@@ -1069,7 +1127,7 @@
               }
 
             if (!pdf_stm_install_filter (stm,
-                                         (c == V2ENC_FILTER_ARG ?
+                                         (ci == V2ENC_FILTER_INSTALL ?
                                           PDF_STM_FILTER_V2_ENC :
                                           PDF_STM_FILTER_V2_DEC),
                                          filter_params,
@@ -1097,13 +1155,34 @@
             break;
           }
         }
+
+      /* have we installed a delayed filter in this loop? */
+      if (filter_to_install == ci)
+        {
+          /* no filter delayed anymore */
+          filter_to_install = FILTER_INSTALL_NONE;
+        }
+
+      /* next arg is a new filter and current filter is with args */
+      if (!IS_FILTER_ARG(next_ci) && filter_to_install != FILTER_INSTALL_NONE)
+        {
+          /* do extra loop installing current filter */
+          ci = filter_to_install;
+        }
+      else
+        {
+          ci = next_ci;
+          old_optarg = optarg;
+          next_ci = getopt_long (argc, argv, "", GNU_longOptions, NULL);
+        }
+
+      if (ci == -1 && filter_to_install != FILTER_INSTALL_NONE)
+        {
+          /* end of args and one filter still to install */
+          ci = filter_to_install;
+        }
     }
-  while ((ci = getopt_long (argc,
-                            argv,
-                            "",
-                            GNU_longOptions,
-                            NULL)) != -1);
-
+  while (ci != -1);
 }
 
 static pdf_fsys_file_t *

# Begin bundle
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

Reply via email to