-----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 IyBCYXphYXIgcmV2aXNpb24gYnVuZGxlIHY0CiMKQlpoOTFBWSZTWbsqdCUABXl/gFfxQAB7d/// ///ftL////5gCZt89607cpHcwSU3TBio611oBQOhJIRNCnp6niammIyj0YnqNGoYmjTBNABoxDRo NAlJpMIMmiU08KaNGahp6gA0PUAAAAAB6giKabT1IAAAGgaAAANAAAAAADNKmgqek8pmptQ08jRN AAGhkAAAABo9Q/VA4Mg0aAMmmIaaDIMQwgaA0YmI0AAAkiBNAmhoEYgSbFTwp+UJoM1AD1DQGgDR 5QVpAAgAUnMoJlbZQS/AmEdJAX0quP05UiaGUV6sqJhFAwHOFc36cnf/ourmYTK71Y+KsqF5qq1a J7JhCaQGMac9EZK0ZKWydt7waNg2kGX7AfbAd8nLXaM8roBJtOUK4oCbIRChSRgzxZ/Y7NKftLLZ MWM0rCbFbKW5W203G012hveGmsI3RjGD148QmqfL6lCrKFh/0gHSrz+po+zs7fL24660J3A3nWJb yqNJmZCZkDBp8HI29fNm07cZVQmYbB1ByabFWzZgdUtVZWSdi12rSCn1uUYg9a2ztRRTayBCBC10 PWsyUmF1lLVVSgllx6reqhXKCWVcuLYYFfOd1vGCSfd53FQWyppOyFEpIEkVF3HFRUgST/O7P43R W7DblpfIo5ORNJUtcR+2A46GKP2K2NTe8V2Fwz9Z1TYsLlsvrC7x0RypZ3qDxue30jQLZUW2TOFC +VIiorq9NEK7h1NyWfNAObHjy7Bk0erZ64my2ls1Tyl3wXS8KRkjlYjbO5a4yLlxyXmbnTKDJp83 jGu6e49wbkbYJ4P3Uj8l6FC5j4Us5RWMi0mTJl3/JWu+6A5NTPVBHSI+Y3sBrCMyNqrXyhVWyEzF WoCkks5RfwFMC7kZgVxeg5qmd6SC0S22mr7qFEC1ZnPa82SK5FHEJmFEw9hEs3eTBKaHZMyAbgDF BDPSQ0iJyIkCFekeBxLRiEGVvMjL3uDokhxMkOzDFnIL0NBGkk45vuEVMklSbDqsXTIjY3XFOMe1 ryoYITBND6y6+ktq2vgFHINvbUdltyqx2GndkW+FvryoxJIMxLqSDgv2owrhVBQjOS92Y/SwQUst SBkKjQdfXlvTWIMmmVlmKhmW/Iy6ptSxg+wrloRK9KgFgo7hGkqRay3FRinL6kOnOeZswF/o9bMM wyOvC0t5QNZjDDQQZsnbbXbN8cnIFDVCVyRR6TIt1TlrERLmg54BAwEVHkcjS66n1SuLjCI/1Hwm aqSwo2tr0UUxu3CMmWY3bDEgHRZbIy3OEy4OlyegyqjfZN5wZ2jfOQidKGCJ2dxJzSk1NQjoLrJG eyuqyY1hWDHEI8ewXMwue8oKKSrJ0lJVrmtoNCFl49sWFb3OicOC7CMIOc+zGaDi0lIxqGlsdGEY wywRFkjWwtPZmViIZ6GJAcYb0Pp0pXjmYiJMwZpX3W5aIR0OVNRSecWhCmV84tdIfZa5ArEpGkS+ Ui8oINqnJxkgwnVLaVm2KRz2mRmDsBBpaQC0vKXmt9VGhEInQIwO/yDtTLLwO+dtrLayNW14ZQeX Bw4zghqanmFRVq0p4Hzo+Vsz0YdaU5swKc16yO37FVCIcYAMATW5t4RAs6UyuPYiQOyeROes0mqg HgfnjQl1GXr7kFu1QWmZMzGjfar0Md5GDGMSEgQ1bie0vOXgSES1F/bkqIxYdCaV6rwMwYISEkgS /I2kv2kr+rqDYABai8vF/5DLRWdn8LF9O91/HHpRxSAqhKXya3F3pCwD4JkC1sakgNU0E0R3z1CD miN6KoSjrqUTKuaLjquPBXUNZgIgSvSAsZWkXQ1qEqYFDJCVEgMuZQLmV6Dkgnfa6CK+2NuJ1sHV uInBCUUJVQ9B27g/QMcDwZ/oEnE5W1Ujg+EBVCVDNn4iJG+yznKcJwH+mOM8MN2jkioKJxSRpZ0T 20B8gtA6tSiuigT3uXNKIjILpQ5DJyzsWikRF0V0x7R9s4c0d8OM35pjlOcv4R98n6ih+ZoGf5yZ t2JKlpBc/j9aW8Pee5B9rAJ/pTGJO1koyaJEdYhoy3lMJDUKe9WKZsuRug08WJyx/MbkHORCBqs5 ZCJH13rrGYYbj9zsN5v7i/ieotRVHSPwml3otIEjmcQWk+DGy1HrRQ1jilyw8vHbk4dg3yEIq9kn Xrh5+y5eW/LcIquk5kdeLHieyPkslaQqYMPXajBJ4om8Z9wfvm5GwvIUdu4s9WCZrkLsNTOd/FIF D439mxLpTI/UpguHJmYFXi8IIYE4l0h1cL+3mRLCpSUpoC0hWUn3JK6xKVF8ySjzAQhgNXAU3h4/ b9VQmWmAMejz+K9SzX8mSZVGckeTujycyYnwdY8pb8zKtjQM1okuOoo0lUkIYxcUEx7i4gMqai5e 0+8h15grRfYHT2Ay9ADH1MKCo1zhfHrWItRJJkKYFA3i7RFjl2Gkw+JJrG2sQXpMIja1URAEmNZ6 cxRzyniUYEx28t1JnATKeLewWJ2bcSxY9h5COIjf0eYhvDglx7/YcBYdaLQxSThATvrGTjGhFyRC 5G1JQhASc3OHzIVC4W4mEIjglTOgV2GRIE6iHChA3Y7pzDjhZMZhmD7DQFESaQmQ0iK9XN4xTHEH UxagW5pxUZoCohmRvQ6hn2dEltM9TiT3L3bToNf9s1yyAs7rBQTFp5CMzVDFckVN4QFx3LxQwKxd x8s1d715p/nXQC44xEc2x2iHjxZfI6H8m9bO9A7goZW2PEe9Ta9BAN2ksSmksbAzDDSsgvsAFmuK 45mgoNBKJMRj45hoIliZIZAMkWceMCKxJX20zlmUKNRlw6mGIelZHWEM+9FY6BGjUMamNKvEy8Lk c8aFzoBvHhcXCZvbTA8mVhU2ZDvHZMIrcnFmIHSYzDN5qVRLUwloE0VOCLi6OysQyKzL06SwqbBL Qqiiq4zjG226CMDBJOjq0K9JbHM9YK08wV08O0zwoc9P99UulZEjiWa1EX0Gof7uojfsUwZvBIFz msmFqCQ3RcuhodpqjGNHi8Ahr57RErwa2w8w9wMv9rJ/jEdmGYP/i7kinChIXZU6EoA=
