... | ... |
@@ -213,7 +213,7 @@ static int mspack_fmap_seek(struct mspack_file *file, off_t offset, int mode) |
213 | 213 |
cli_dbgmsg("%s() err %d\n", __func__, __LINE__); |
214 | 214 |
return -1; |
215 | 215 |
} |
216 |
- if (new_pos < 0 || new_pos > mspack_handle->fmap->len) { |
|
216 |
+ if (new_pos < 0 || new_pos > (off_t)mspack_handle->fmap->len) { |
|
217 | 217 |
cli_dbgmsg("%s() err %d\n", __func__, __LINE__); |
218 | 218 |
return -1; |
219 | 219 |
} |
... | ... |
@@ -255,10 +255,12 @@ static off_t mspack_fmap_tell(struct mspack_file *file) |
255 | 255 |
|
256 | 256 |
static void mspack_fmap_message(struct mspack_file *file, const char *fmt, ...) |
257 | 257 |
{ |
258 |
+ UNUSEDPARAM(file); |
|
258 | 259 |
cli_dbgmsg("%s() %s\n", __func__, fmt); |
259 | 260 |
} |
260 | 261 |
static void *mspack_fmap_alloc(struct mspack_system *self, size_t num) |
261 | 262 |
{ |
263 |
+ UNUSEDPARAM(self); |
|
262 | 264 |
return malloc(num); |
263 | 265 |
} |
264 | 266 |
|
... | ... |
@@ -1,5 +1,5 @@ |
1 | 1 |
/* |
2 |
- * Copyright (C) 2015 Cisco Systems, Inc. and/or its affiliates. All rights reserved. |
|
2 |
+ * Copyright (C) 2015, 2017 Cisco Systems, Inc. and/or its affiliates. All rights reserved. |
|
3 | 3 |
* Copyright (C) 2007-2008 Sourcefire, Inc. |
4 | 4 |
* |
5 | 5 |
* Authors: Michal 'GiM' Spadlinski |
... | ... |
@@ -783,7 +783,7 @@ uint32_t lzma_upack_esi_54(struct lzmastate *p, uint32_t old_eax, uint32_t *old_ |
783 | 783 |
} |
784 | 784 |
|
785 | 785 |
|
786 |
-int unmew11(char *src, int off, int ssize, int dsize, uint32_t base, uint32_t vadd, int uselzma, int filedesc) |
|
786 |
+int unmew11(char *src, uint32_t off, uint32_t ssize, uint32_t dsize, uint32_t base, uint32_t vadd, int uselzma, int filedesc) |
|
787 | 787 |
{ |
788 | 788 |
uint32_t entry_point, newedi, loc_ds=dsize, loc_ss=ssize; |
789 | 789 |
char *source = src + dsize + off; |
... | ... |
@@ -863,7 +863,7 @@ int unmew11(char *src, int off, int ssize, int dsize, uint32_t base, uint32_t va |
863 | 863 |
* or, in other words, exceed the specified size of destination |
864 | 864 |
*/ |
865 | 865 |
if (section[i].raw + section[i].rsz > dsize) { |
866 |
- cli_dbgmsg("MEW: Section %i [%d, %d] exceeds destination size %d\n", |
|
866 |
+ cli_dbgmsg("MEW: Section %i [%d, %d] exceeds destination size %u\n", |
|
867 | 867 |
i, section[i].raw, section[i].raw+section[i].rsz, dsize); |
868 | 868 |
free(section); |
869 | 869 |
return -1; |
... | ... |
@@ -1,5 +1,5 @@ |
1 | 1 |
/* |
2 |
- * Copyright (C) 2015 Cisco Systems, Inc. and/or its affiliates. All rights reserved. |
|
2 |
+ * Copyright (C) 2015, 2017 Cisco Systems, Inc. and/or its affiliates. All rights reserved. |
|
3 | 3 |
* Copyright (C) 2007-2008 Sourcefire, Inc. |
4 | 4 |
* |
5 | 5 |
* Authors: Michal 'GiM' Spadlinski |
... | ... |
@@ -38,6 +38,6 @@ int mew_lzma(char *, const char *, uint32_t, uint32_t, uint32_t); |
38 | 38 |
uint32_t lzma_upack_esi_00(struct lzmastate *, char *, char *, uint32_t); |
39 | 39 |
uint32_t lzma_upack_esi_50(struct lzmastate *, uint32_t, uint32_t, char **, char *, uint32_t *, char *, uint32_t); |
40 | 40 |
uint32_t lzma_upack_esi_54(struct lzmastate *, uint32_t, uint32_t *, char **, uint32_t *, char *, uint32_t); |
41 |
-int unmew11(char *, int, int, int, uint32_t, uint32_t, int, int); |
|
41 |
+int unmew11(char *, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, int, int); |
|
42 | 42 |
|
43 | 43 |
#endif |
... | ... |
@@ -559,67 +559,66 @@ struct unaligned_ptr { |
559 | 559 |
#endif |
560 | 560 |
|
561 | 561 |
#if WORDS_BIGENDIAN == 0 |
562 |
- |
|
563 |
-/* Little endian */ |
|
564 |
-#define le16_to_host(v) (v) |
|
565 |
-#define le32_to_host(v) (v) |
|
566 |
-#define le64_to_host(v) (v) |
|
567 |
-#define be16_to_host(v) cbswap16(v) |
|
568 |
-#define be32_to_host(v) cbswap32(v) |
|
569 |
-#define be64_to_host(v) cbswap64(v) |
|
570 |
-#define cli_readint64(buff) (((const union unaligned_64 *)(buff))->una_s64) |
|
571 |
-#define cli_readint32(buff) (((const union unaligned_32 *)(buff))->una_s32) |
|
572 |
-#define cli_readint16(buff) (((const union unaligned_16 *)(buff))->una_s16) |
|
573 |
-#define cli_writeint32(offset, value) (((union unaligned_32 *)(offset))->una_u32=(uint32_t)(value)) |
|
562 |
+ /* Little endian */ |
|
563 |
+ #define le16_to_host(v) (v) |
|
564 |
+ #define le32_to_host(v) (v) |
|
565 |
+ #define le64_to_host(v) (v) |
|
566 |
+ #define be16_to_host(v) cbswap16(v) |
|
567 |
+ #define be32_to_host(v) cbswap32(v) |
|
568 |
+ #define be64_to_host(v) cbswap64(v) |
|
569 |
+ #define cli_readint64(buff) (((const union unaligned_64 *)(buff))->una_s64) |
|
570 |
+ #define cli_readint32(buff) (((const union unaligned_32 *)(buff))->una_s32) |
|
571 |
+ #define cli_readint16(buff) (((const union unaligned_16 *)(buff))->una_s16) |
|
572 |
+ #define cli_writeint32(offset, value) (((union unaligned_32 *)(offset))->una_u32=(uint32_t)(value)) |
|
574 | 573 |
#else |
575 |
-/* Big endian */ |
|
576 |
-#define le16_to_host(v) cbswap16(v) |
|
577 |
-#define le32_to_host(v) cbswap32(v) |
|
578 |
-#define le64_to_host(v) cbswap64(v) |
|
579 |
-#define be16_to_host(v) (v) |
|
580 |
-#define be32_to_host(v) (v) |
|
581 |
-#define be64_to_host(v) (v) |
|
582 |
- |
|
583 |
-static inline int32_t cli_readint64(const void *buff) |
|
584 |
-{ |
|
585 |
- int64_t ret; |
|
586 |
- ret = ((const char *)buff)[0] & 0xff; |
|
587 |
- ret |= (((const char *)buff)[1] & 0xff) << 8; |
|
588 |
- ret |= (((const char *)buff)[2] & 0xff) << 16; |
|
589 |
- ret |= (((const char *)buff)[3] & 0xff) << 24; |
|
590 |
- |
|
591 |
- ret |= (((const char *)buff)[4] & 0xff) << 32; |
|
592 |
- ret |= (((const char *)buff)[5] & 0xff) << 40; |
|
593 |
- ret |= (((const char *)buff)[6] & 0xff) << 48; |
|
594 |
- ret |= (((const char *)buff)[7] & 0xff) << 56; |
|
595 |
- return ret; |
|
596 |
-} |
|
597 |
- |
|
598 |
-static inline int32_t cli_readint32(const void *buff) |
|
599 |
-{ |
|
600 |
- int32_t ret; |
|
601 |
- ret = ((const char *)buff)[0] & 0xff; |
|
602 |
- ret |= (((const char *)buff)[1] & 0xff) << 8; |
|
603 |
- ret |= (((const char *)buff)[2] & 0xff) << 16; |
|
604 |
- ret |= (((const char *)buff)[3] & 0xff) << 24; |
|
605 |
- return ret; |
|
606 |
-} |
|
607 |
- |
|
608 |
-static inline int16_t cli_readint16(const void *buff) |
|
609 |
-{ |
|
610 |
- int16_t ret; |
|
611 |
- ret = ((const char *)buff)[0] & 0xff; |
|
612 |
- ret |= (((const char *)buff)[1] & 0xff) << 8; |
|
613 |
- return ret; |
|
614 |
-} |
|
615 |
- |
|
616 |
-static inline void cli_writeint32(void *offset, uint32_t value) |
|
617 |
-{ |
|
618 |
- ((char *)offset)[0] = value & 0xff; |
|
619 |
- ((char *)offset)[1] = (value & 0xff00) >> 8; |
|
620 |
- ((char *)offset)[2] = (value & 0xff0000) >> 16; |
|
621 |
- ((char *)offset)[3] = (value & 0xff000000) >> 24; |
|
622 |
-} |
|
574 |
+ /* Big endian */ |
|
575 |
+ #define le16_to_host(v) cbswap16(v) |
|
576 |
+ #define le32_to_host(v) cbswap32(v) |
|
577 |
+ #define le64_to_host(v) cbswap64(v) |
|
578 |
+ #define be16_to_host(v) (v) |
|
579 |
+ #define be32_to_host(v) (v) |
|
580 |
+ #define be64_to_host(v) (v) |
|
581 |
+ |
|
582 |
+ static inline int32_t cli_readint64(const void *buff) |
|
583 |
+ { |
|
584 |
+ int64_t ret; |
|
585 |
+ ret = ((const char *)buff)[0] & 0xff; |
|
586 |
+ ret |= (((const char *)buff)[1] & 0xff) << 8; |
|
587 |
+ ret |= (((const char *)buff)[2] & 0xff) << 16; |
|
588 |
+ ret |= (((const char *)buff)[3] & 0xff) << 24; |
|
589 |
+ |
|
590 |
+ ret |= (((const char *)buff)[4] & 0xff) << 32; |
|
591 |
+ ret |= (((const char *)buff)[5] & 0xff) << 40; |
|
592 |
+ ret |= (((const char *)buff)[6] & 0xff) << 48; |
|
593 |
+ ret |= (((const char *)buff)[7] & 0xff) << 56; |
|
594 |
+ return ret; |
|
595 |
+ } |
|
596 |
+ |
|
597 |
+ static inline int32_t cli_readint32(const void *buff) |
|
598 |
+ { |
|
599 |
+ int32_t ret; |
|
600 |
+ ret = ((const char *)buff)[0] & 0xff; |
|
601 |
+ ret |= (((const char *)buff)[1] & 0xff) << 8; |
|
602 |
+ ret |= (((const char *)buff)[2] & 0xff) << 16; |
|
603 |
+ ret |= (((const char *)buff)[3] & 0xff) << 24; |
|
604 |
+ return ret; |
|
605 |
+ } |
|
606 |
+ |
|
607 |
+ static inline int16_t cli_readint16(const void *buff) |
|
608 |
+ { |
|
609 |
+ int16_t ret; |
|
610 |
+ ret = ((const char *)buff)[0] & 0xff; |
|
611 |
+ ret |= (((const char *)buff)[1] & 0xff) << 8; |
|
612 |
+ return ret; |
|
613 |
+ } |
|
614 |
+ |
|
615 |
+ static inline void cli_writeint32(void *offset, uint32_t value) |
|
616 |
+ { |
|
617 |
+ ((char *)offset)[0] = value & 0xff; |
|
618 |
+ ((char *)offset)[1] = (value & 0xff00) >> 8; |
|
619 |
+ ((char *)offset)[2] = (value & 0xff0000) >> 16; |
|
620 |
+ ((char *)offset)[3] = (value & 0xff000000) >> 24; |
|
621 |
+ } |
|
623 | 622 |
#endif |
624 | 623 |
|
625 | 624 |
int cli_append_virus(cli_ctx *ctx, const char *virname); |
... | ... |
@@ -146,14 +146,14 @@ static int xrefCheck(const char *xref, const char *eof) |
146 | 146 |
} |
147 | 147 |
|
148 | 148 |
/* define this to be noisy about things that we can't parse properly */ |
149 |
-/*#define NOISY*/ |
|
149 |
+#define NOISY |
|
150 | 150 |
|
151 | 151 |
#ifdef NOISY |
152 | 152 |
#define noisy_msg(pdf, ...) cli_infomsg(pdf->ctx, __VA_ARGS__) |
153 |
-#define noisy_warnmsg cli_warnmsg |
|
153 |
+#define noisy_warnmsg(...) cli_warnmsg(__VA_ARGS__) |
|
154 | 154 |
#else |
155 |
-#define noisy_msg (void) |
|
156 |
-#define noisy_warnmsg (void) |
|
155 |
+#define noisy_msg(pdf, ...) |
|
156 |
+#define noisy_warnmsg(...) |
|
157 | 157 |
#endif |
158 | 158 |
|
159 | 159 |
static const char *findNextNonWSBack(const char *q, const char *start) |
... | ... |
@@ -291,16 +291,16 @@ int pdf_findobj(struct pdf_struct *pdf) |
291 | 291 |
return 1;/* truncated */ |
292 | 292 |
} |
293 | 293 |
|
294 |
-static int filter_writen(struct pdf_struct *pdf, struct pdf_obj *obj, int fout, const char *buf, off_t len, off_t *sum) |
|
294 |
+static size_t filter_writen(struct pdf_struct *pdf, struct pdf_obj *obj, int fout, const char *buf, size_t len, size_t *sum) |
|
295 | 295 |
{ |
296 | 296 |
UNUSEDPARAM(obj); |
297 | 297 |
|
298 |
- if (cli_checklimits("pdf", pdf->ctx, *sum, 0, 0)) |
|
298 |
+ if (cli_checklimits("pdf", pdf->ctx, (unsigned long)*sum, 0, 0)) /* TODO: May truncate for large values on 64-bit platforms */ |
|
299 | 299 |
return len; /* pretend it was a successful write to suppress CL_EWRITE */ |
300 | 300 |
|
301 | 301 |
*sum += len; |
302 | 302 |
|
303 |
- return cli_writen(fout, buf, len); |
|
303 |
+ return cli_writen(fout, buf, (unsigned int)len); |
|
304 | 304 |
} |
305 | 305 |
|
306 | 306 |
void pdfobj_flag(struct pdf_struct *pdf, struct pdf_obj *obj, enum pdf_flag flag) |
... | ... |
@@ -533,23 +533,23 @@ static int run_pdf_hooks(struct pdf_struct *pdf, enum pdf_phase phase, int fd, i |
533 | 533 |
|
534 | 534 |
static void dbg_printhex(const char *msg, const char *hex, unsigned len); |
535 | 535 |
|
536 |
-static void aes_decrypt(const unsigned char *in, off_t *length, unsigned char *q, char *key, unsigned key_n, int has_iv) |
|
536 |
+static void aes_decrypt(const unsigned char *in, size_t *length, unsigned char *q, char *key, unsigned key_n, int has_iv) |
|
537 | 537 |
{ |
538 | 538 |
unsigned long rk[RKLENGTH(256)]; |
539 | 539 |
unsigned char iv[16]; |
540 |
- unsigned len = *length; |
|
540 |
+ size_t len = *length; |
|
541 | 541 |
unsigned char pad, i; |
542 | 542 |
int nrounds; |
543 | 543 |
|
544 |
- cli_dbgmsg("cli_pdf: aes_decrypt: key length: %d, data length: %d\n", key_n, (int)*length); |
|
544 |
+ cli_dbgmsg("cli_pdf: aes_decrypt: key length: %d, data length: %zu\n", key_n, *length); |
|
545 | 545 |
if (key_n > 32) { |
546 | 546 |
cli_dbgmsg("cli_pdf: aes_decrypt: key length is %d!\n", key_n*8); |
547 | 547 |
return; |
548 | 548 |
} |
549 | 549 |
|
550 | 550 |
if (len < 32) { |
551 |
- cli_dbgmsg("cli_pdf: aes_decrypt: len is <32: %d\n", len); |
|
552 |
- noisy_warnmsg("cli_pdf: aes_decrypt: len is <32: %d\n", len); |
|
551 |
+ cli_dbgmsg("cli_pdf: aes_decrypt: len is <32: %zu\n", len); |
|
552 |
+ noisy_warnmsg("cli_pdf: aes_decrypt: len is <32: %zu\n", len); |
|
553 | 553 |
return; |
554 | 554 |
} |
555 | 555 |
|
... | ... |
@@ -587,8 +587,8 @@ static void aes_decrypt(const unsigned char *in, off_t *length, unsigned char *q |
587 | 587 |
pad = q[-1]; |
588 | 588 |
|
589 | 589 |
if (pad > 0x10) { |
590 |
- cli_dbgmsg("cli_pdf: aes_decrypt: bad pad: %x (extra len: %d)\n", pad, len-16); |
|
591 |
- noisy_warnmsg("cli_pdf: aes_decrypt: bad pad: %x (extra len: %d)\n", pad, len-16); |
|
590 |
+ cli_dbgmsg("cli_pdf: aes_decrypt: bad pad: %x (extra len: %zu)\n", pad, len-16); |
|
591 |
+ noisy_warnmsg("cli_pdf: aes_decrypt: bad pad: %x (extra len: %zu)\n", pad, len-16); |
|
592 | 592 |
*length -= len; |
593 | 593 |
return; |
594 | 594 |
} |
... | ... |
@@ -609,11 +609,11 @@ static void aes_decrypt(const unsigned char *in, off_t *length, unsigned char *q |
609 | 609 |
|
610 | 610 |
*length -= len; |
611 | 611 |
|
612 |
- cli_dbgmsg("cli_pdf: aes_decrypt: length is %d\n", (int)*length); |
|
612 |
+ cli_dbgmsg("cli_pdf: aes_decrypt: length is %zu\n", *length); |
|
613 | 613 |
} |
614 | 614 |
|
615 | 615 |
|
616 |
-char *decrypt_any(struct pdf_struct *pdf, uint32_t id, const char *in, off_t *length, enum enc_method enc_method) |
|
616 |
+char *decrypt_any(struct pdf_struct *pdf, uint32_t id, const char *in, size_t *length, enum enc_method enc_method) |
|
617 | 617 |
{ |
618 | 618 |
unsigned char *key, *q, result[16]; |
619 | 619 |
unsigned n; |
... | ... |
@@ -662,7 +662,7 @@ char *decrypt_any(struct pdf_struct *pdf, uint32_t id, const char *in, off_t *le |
662 | 662 |
cli_dbgmsg("cli_pdf: enc is v2\n"); |
663 | 663 |
memcpy(q, in, *length); |
664 | 664 |
arc4_init(&arc4, result, n); |
665 |
- arc4_apply(&arc4, q, *length); |
|
665 |
+ arc4_apply(&arc4, q, (unsigned)*length); /* TODO: may truncate for very large lengths */ |
|
666 | 666 |
|
667 | 667 |
noisy_msg(pdf, "decrypted ARC4 data\n"); |
668 | 668 |
|
... | ... |
@@ -818,7 +818,7 @@ int pdf_extract_obj(struct pdf_struct *pdf, struct pdf_obj *obj, uint32_t flags) |
818 | 818 |
{ |
819 | 819 |
char fullname[NAME_MAX + 1]; |
820 | 820 |
int fout; |
821 |
- off_t sum = 0; |
|
821 |
+ ptrdiff_t sum = 0; |
|
822 | 822 |
int rc = CL_SUCCESS; |
823 | 823 |
int dump = 1; |
824 | 824 |
|
... | ... |
@@ -883,10 +883,10 @@ int pdf_extract_obj(struct pdf_struct *pdf, struct pdf_obj *obj, uint32_t flags) |
883 | 883 |
|
884 | 884 |
orig_length = length; |
885 | 885 |
if (length > pdf->size || obj->start + p_stream + length > pdf->size) { |
886 |
- cli_dbgmsg("cli_pdf: length out of file: %ld + %ld > %ld\n", |
|
887 |
- p_stream, length, pdf->size); |
|
888 |
- noisy_warnmsg("length out of file, truncated: %ld + %ld > %ld\n", |
|
889 |
- p_stream, length, pdf->size); |
|
886 |
+ cli_dbgmsg("cli_pdf: length out of file: %lld + %lld > %lld\n", |
|
887 |
+ (long long)p_stream, (long long)length, (long long)pdf->size); |
|
888 |
+ noisy_warnmsg("length out of file, truncated: %lld + %lld > %lld\n", |
|
889 |
+ (long long)p_stream, (long long)length, (long long)pdf->size); |
|
890 | 890 |
length = pdf->size - (obj->start + p_stream); |
891 | 891 |
} |
892 | 892 |
|
... | ... |
@@ -961,7 +961,7 @@ int pdf_extract_obj(struct pdf_struct *pdf, struct pdf_obj *obj, uint32_t flags) |
961 | 961 |
cli_dbgmsg("cli_pdf: failed to locate DecodeParms dictionary start\n"); |
962 | 962 |
} |
963 | 963 |
|
964 |
- sum = pdf_decodestream(pdf, obj, dparams, start + p_stream, length, xref, fout, &rc); |
|
964 |
+ sum = pdf_decodestream(pdf, obj, dparams, start + p_stream, (uint32_t)length, xref, fout, &rc); |
|
965 | 965 |
if (dparams) |
966 | 966 |
pdf_free_dict(dparams); |
967 | 967 |
|
... | ... |
@@ -985,7 +985,7 @@ int pdf_extract_obj(struct pdf_struct *pdf, struct pdf_obj *obj, uint32_t flags) |
985 | 985 |
|
986 | 986 |
do { |
987 | 987 |
char *js = NULL; |
988 |
- off_t js_len = 0; |
|
988 |
+ size_t js_len = 0; |
|
989 | 989 |
const char *q3; |
990 | 990 |
|
991 | 991 |
q2 = cli_memstr(q, bytesleft, "/JavaScript", 11); |
... | ... |
@@ -1005,8 +1005,7 @@ int pdf_extract_obj(struct pdf_struct *pdf, struct pdf_obj *obj, uint32_t flags) |
1005 | 1005 |
js_len = strlen(js); |
1006 | 1006 |
if (pdf->flags & (1 << DECRYPTABLE_PDF)) { |
1007 | 1007 |
cli_dbgmsg("cli_pdf: encrypted string\n"); |
1008 |
- decrypted = decrypt_any(pdf, obj->id, js, &js_len, |
|
1009 |
- pdf->enc_method_string); |
|
1008 |
+ decrypted = decrypt_any(pdf, obj->id, js, &js_len, pdf->enc_method_string); |
|
1010 | 1009 |
|
1011 | 1010 |
if (decrypted) { |
1012 | 1011 |
noisy_msg(pdf, "decrypted Javascript string from obj %u %u\n", obj->id>>8,obj->id&0xff); |
... | ... |
@@ -1014,7 +1013,7 @@ int pdf_extract_obj(struct pdf_struct *pdf, struct pdf_obj *obj, uint32_t flags) |
1014 | 1014 |
} |
1015 | 1015 |
} |
1016 | 1016 |
|
1017 |
- if (filter_writen(pdf, obj, fout, out, js_len, &sum) != js_len) { |
|
1017 |
+ if (filter_writen(pdf, obj, fout, out, js_len, (size_t*)&sum) != js_len) { |
|
1018 | 1018 |
rc = CL_EWRITE; |
1019 | 1019 |
free(js); |
1020 | 1020 |
break; |
... | ... |
@@ -1039,7 +1038,7 @@ int pdf_extract_obj(struct pdf_struct *pdf, struct pdf_obj *obj, uint32_t flags) |
1039 | 1039 |
|
1040 | 1040 |
if (q2 > q) { |
1041 | 1041 |
q--; |
1042 |
- filter_writen(pdf, obj, fout, q, q2 - q, &sum); |
|
1042 |
+ filter_writen(pdf, obj, fout, q, q2 - q, (size_t*)&sum); |
|
1043 | 1043 |
q++; |
1044 | 1044 |
} |
1045 | 1045 |
} |
... | ... |
@@ -1051,7 +1050,7 @@ int pdf_extract_obj(struct pdf_struct *pdf, struct pdf_obj *obj, uint32_t flags) |
1051 | 1051 |
|
1052 | 1052 |
if (bytesleft < 0) |
1053 | 1053 |
rc = CL_EFORMAT; |
1054 |
- else if (filter_writen(pdf, obj, fout , pdf->map + obj->start, bytesleft,&sum) != bytesleft) |
|
1054 |
+ else if (filter_writen(pdf, obj, fout , pdf->map + obj->start, bytesleft, (size_t*)&sum) != (size_t)bytesleft) |
|
1055 | 1055 |
rc = CL_EWRITE; |
1056 | 1056 |
} |
1057 | 1057 |
} while (0); |
... | ... |
@@ -1909,15 +1908,15 @@ static void check_user_password(struct pdf_struct *pdf, int R, const char *O, |
1909 | 1909 |
cl_sha256(U+32, 8, result2, NULL); |
1910 | 1910 |
dbg_printhex("Computed U", (const char *)result2, 32); |
1911 | 1911 |
if (!memcmp(result2, U, 32)) { |
1912 |
- off_t n; |
|
1912 |
+ size_t UE_len; |
|
1913 | 1913 |
|
1914 | 1914 |
/* Algorithm 3.2a could be used to recover encryption key */ |
1915 | 1915 |
password_empty = 1; |
1916 | 1916 |
cl_sha256(U+40, 8, result2, NULL); |
1917 |
- n = UE ? strlen(UE) : 0; |
|
1918 |
- if (n != 32) { |
|
1919 |
- cli_dbgmsg("cli_pdf: UE length is not 32: %d\n", (int)n); |
|
1920 |
- noisy_warnmsg("cli_pdf: UE length is not 32: %d\n", n); |
|
1917 |
+ UE_len = UE ? strlen(UE) : 0; |
|
1918 |
+ if (UE_len != 32) { |
|
1919 |
+ cli_dbgmsg("cli_pdf: UE length is not 32: %zu\n", UE_len); |
|
1920 |
+ noisy_warnmsg("cli_pdf: UE length is not 32: %zu\n", UE_len); |
|
1921 | 1921 |
} else { |
1922 | 1922 |
pdf->keylen = 32; |
1923 | 1923 |
pdf->key = cli_malloc(32); |
... | ... |
@@ -1926,7 +1925,7 @@ static void check_user_password(struct pdf_struct *pdf, int R, const char *O, |
1926 | 1926 |
return; |
1927 | 1927 |
} |
1928 | 1928 |
|
1929 |
- aes_decrypt((const unsigned char *)UE, &n, (unsigned char *)(pdf->key), (char *)result2, 32, 0); |
|
1929 |
+ aes_decrypt((const unsigned char *)UE, &UE_len, (unsigned char *)(pdf->key), (char *)result2, 32, 0); |
|
1930 | 1930 |
dbg_printhex("cli_pdf: Candidate encryption key", pdf->key, pdf->keylen); |
1931 | 1931 |
} |
1932 | 1932 |
} |
... | ... |
@@ -2206,7 +2205,7 @@ void pdf_handle_enc(struct pdf_struct *pdf) |
2206 | 2206 |
|
2207 | 2207 |
if (i != n) { |
2208 | 2208 |
dbg_printhex("too long O", O, n); |
2209 |
- noisy_warnmsg("too long O", O, n); |
|
2209 |
+ noisy_warnmsg("too long O: %u", n); |
|
2210 | 2210 |
break; |
2211 | 2211 |
} |
2212 | 2212 |
} |
... | ... |
@@ -2214,8 +2213,8 @@ void pdf_handle_enc(struct pdf_struct *pdf) |
2214 | 2214 |
n = 0; |
2215 | 2215 |
U = pdf_readstring(q, len, "/U", &n, NULL, 0); |
2216 | 2216 |
if (!U || n < oulen) { |
2217 |
- cli_dbgmsg("cli_pdf: invalid U: %d\n", n); |
|
2218 |
- noisy_warnmsg("cli_pdf: invalid U: %d\n", n); |
|
2217 |
+ cli_dbgmsg("cli_pdf: invalid U: %u\n", n); |
|
2218 |
+ noisy_warnmsg("cli_pdf: invalid U: %u\n", n); |
|
2219 | 2219 |
|
2220 | 2220 |
if (U) |
2221 | 2221 |
dbg_printhex("invalid U", U, n); |
... | ... |
@@ -2233,7 +2232,7 @@ void pdf_handle_enc(struct pdf_struct *pdf) |
2233 | 2233 |
} |
2234 | 2234 |
} |
2235 | 2235 |
|
2236 |
- cli_dbgmsg("cli_pdf: Encrypt R: %d, P %x, length: %d\n", R, P, length); |
|
2236 |
+ cli_dbgmsg("cli_pdf: Encrypt R: %d, P %x, length: %u\n", R, P, length); |
|
2237 | 2237 |
if (length % 8) { |
2238 | 2238 |
cli_dbgmsg("cli_pdf: wrong key length, not multiple of 8\n"); |
2239 | 2239 |
noisy_warnmsg("cli_pdf: wrong key length, not multiple of 8\n"); |
... | ... |
@@ -1,5 +1,5 @@ |
1 | 1 |
/* |
2 |
- * Copyright (C) 2015 Cisco Systems, Inc. and/or its affiliates. All rights reserved. |
|
2 |
+ * Copyright (C) 2015, 2017 Cisco Systems, Inc. and/or its affiliates. All rights reserved. |
|
3 | 3 |
* Copyright (C) 2007-2013 Sourcefire, Inc. |
4 | 4 |
* |
5 | 5 |
* Authors: Nigel Horne |
... | ... |
@@ -160,7 +160,7 @@ int pdf_findobj(struct pdf_struct *pdf); |
160 | 160 |
struct pdf_obj *find_obj(struct pdf_struct *pdf, struct pdf_obj *obj, uint32_t objid); |
161 | 161 |
|
162 | 162 |
void pdf_handle_enc(struct pdf_struct *pdf); |
163 |
-char *decrypt_any(struct pdf_struct *pdf, uint32_t id, const char *in, off_t *length, enum enc_method enc_method); |
|
163 |
+char *decrypt_any(struct pdf_struct *pdf, uint32_t id, const char *in, size_t *length, enum enc_method enc_method); |
|
164 | 164 |
enum enc_method get_enc_method(struct pdf_struct *pdf, struct pdf_obj *obj); |
165 | 165 |
enum enc_method parse_enc_method(const char *dict, unsigned len, const char *key, enum enc_method def); |
166 | 166 |
|
... | ... |
@@ -1,5 +1,5 @@ |
1 | 1 |
/* |
2 |
- * Copyright (C) 2016 Cisco and/or its affiliates. All rights reserved. |
|
2 |
+ * Copyright (C) 2016-2017 Cisco and/or its affiliates. All rights reserved. |
|
3 | 3 |
* |
4 | 4 |
* Author: Kevin Lin |
5 | 5 |
* |
... | ... |
@@ -71,7 +71,7 @@ struct pdf_token { |
71 | 71 |
uint32_t flags; /* tracking flags */ |
72 | 72 |
uint32_t success; /* successfully decoded filters */ |
73 | 73 |
|
74 |
- uint32_t length; /* length of current content */ |
|
74 |
+ uint32_t length; /* length of current content */ /* TODO: transition to size_t */ |
|
75 | 75 |
uint8_t *content; /* content stream */ |
76 | 76 |
}; |
77 | 77 |
|
... | ... |
@@ -85,10 +85,10 @@ static int filter_asciihexdecode(struct pdf_struct *pdf, struct pdf_obj *obj, s |
85 | 85 |
static int filter_decrypt(struct pdf_struct *pdf, struct pdf_obj *obj, struct pdf_dict *params, struct pdf_token *token, int mode); |
86 | 86 |
static int filter_lzwdecode(struct pdf_struct *pdf, struct pdf_obj *obj, struct pdf_dict *params, struct pdf_token *token); |
87 | 87 |
|
88 |
-off_t pdf_decodestream(struct pdf_struct *pdf, struct pdf_obj *obj, struct pdf_dict *params, const char *stream, uint32_t streamlen, int xref, int fout, int *rc) |
|
88 |
+ptrdiff_t pdf_decodestream(struct pdf_struct *pdf, struct pdf_obj *obj, struct pdf_dict *params, const char *stream, uint32_t streamlen, int xref, int fout, int *rc) |
|
89 | 89 |
{ |
90 | 90 |
struct pdf_token *token; |
91 |
- off_t rv; |
|
91 |
+ ptrdiff_t rv; |
|
92 | 92 |
|
93 | 93 |
if (!stream || !streamlen || fout < 0) { |
94 | 94 |
cli_dbgmsg("cli_pdf: no filters or stream on obj %u %u\n", obj->id>>8, obj->id&0xff); |
... | ... |
@@ -127,7 +127,7 @@ off_t pdf_decodestream(struct pdf_struct *pdf, struct pdf_obj *obj, struct pdf_d |
127 | 127 |
|
128 | 128 |
cli_dbgmsg("cli_pdf: detected %lu applied filters\n", (long unsigned)(obj->numfilters)); |
129 | 129 |
|
130 |
- rv = pdf_decodestream_internal(pdf, obj, params, token); |
|
130 |
+ rv = (ptrdiff_t)pdf_decodestream_internal(pdf, obj, params, token); |
|
131 | 131 |
/* return is generally ignored */ |
132 | 132 |
if (rc) { |
133 | 133 |
if (rv == CL_VIRUS) |
... | ... |
@@ -727,7 +727,7 @@ static int filter_asciihexdecode(struct pdf_struct *pdf, struct pdf_obj *obj, st |
727 | 727 |
static int filter_decrypt(struct pdf_struct *pdf, struct pdf_obj *obj, struct pdf_dict *params, struct pdf_token *token, int mode) |
728 | 728 |
{ |
729 | 729 |
char *decrypted; |
730 |
- off_t length = token->length; |
|
730 |
+ size_t length = (size_t)token->length; |
|
731 | 731 |
enum enc_method enc = ENC_IDENTITY; |
732 | 732 |
|
733 | 733 |
if (mode) |
... | ... |
@@ -758,8 +758,8 @@ static int filter_decrypt(struct pdf_struct *pdf, struct pdf_obj *obj, struct pd |
758 | 758 |
return CL_EPARSE; /* TODO: what should this value be? CL_SUCCESS would mirror previous behavior */ |
759 | 759 |
} |
760 | 760 |
|
761 |
- cli_dbgmsg("cli_pdf: decrypted %lld bytes from %lu total bytes\n", |
|
762 |
- (long long int)length, (long unsigned)token->length); |
|
761 |
+ cli_dbgmsg("cli_pdf: decrypted %zu bytes from %u total bytes\n", |
|
762 |
+ length, token->length); |
|
763 | 763 |
|
764 | 764 |
|
765 | 765 |
free(token->content); |
... | ... |
@@ -1,5 +1,5 @@ |
1 | 1 |
/* |
2 |
- * Copyright (C) 2016 Cisco and/or its affiliates. All rights reserved. |
|
2 |
+ * Copyright (C) 2016-2017 Cisco and/or its affiliates. All rights reserved. |
|
3 | 3 |
* |
4 | 4 |
* Author: Kevin Lin |
5 | 5 |
* |
... | ... |
@@ -36,6 +36,6 @@ |
36 | 36 |
|
37 | 37 |
#include "pdf.h" |
38 | 38 |
|
39 |
-off_t pdf_decodestream(struct pdf_struct *pdf, struct pdf_obj *obj, struct pdf_dict *params, const char *stream, uint32_t streamlen, int xref, int fout, int *rc); |
|
39 |
+ptrdiff_t pdf_decodestream(struct pdf_struct *pdf, struct pdf_obj *obj, struct pdf_dict *params, const char *stream, uint32_t streamlen, int xref, int fout, int *rc); |
|
40 | 40 |
|
41 | 41 |
#endif /* __PDFDECODE_H__ */ |
... | ... |
@@ -1,5 +1,5 @@ |
1 | 1 |
/* |
2 |
- * Copyright (C) 2014 Cisco and/or its affiliates. All rights reserved. |
|
2 |
+ * Copyright (C) 2014, 2017 Cisco and/or its affiliates. All rights reserved. |
|
3 | 3 |
* |
4 | 4 |
* Author: Shawn Webb |
5 | 5 |
* |
... | ... |
@@ -226,7 +226,7 @@ int is_object_reference(char *begin, char **endchar, uint32_t *id) |
226 | 226 |
return 0; |
227 | 227 |
} |
228 | 228 |
|
229 |
-static char *pdf_decrypt_string(struct pdf_struct *pdf, struct pdf_obj *obj, const char *in, off_t *length) |
|
229 |
+static char *pdf_decrypt_string(struct pdf_struct *pdf, struct pdf_obj *obj, const char *in, size_t *length) |
|
230 | 230 |
{ |
231 | 231 |
enum enc_method enc; |
232 | 232 |
|
... | ... |
@@ -242,8 +242,8 @@ static char *pdf_decrypt_string(struct pdf_struct *pdf, struct pdf_obj *obj, con |
242 | 242 |
char *pdf_finalize_string(struct pdf_struct *pdf, struct pdf_obj *obj, const char *in, size_t len) |
243 | 243 |
{ |
244 | 244 |
char *wrkstr, *output = NULL; |
245 |
- size_t wrklen = len, outlen; |
|
246 |
- unsigned int i, likelyutf = 0; |
|
245 |
+ size_t wrklen = len, outlen, i; |
|
246 |
+ unsigned int likelyutf = 0; |
|
247 | 247 |
|
248 | 248 |
if (!in) |
249 | 249 |
return NULL; |
... | ... |
@@ -336,9 +336,9 @@ char *pdf_finalize_string(struct pdf_struct *pdf, struct pdf_obj *obj, const cha |
336 | 336 |
/* check for encryption and decrypt */ |
337 | 337 |
if (pdf->flags & (1 << ENCRYPTED_PDF)) |
338 | 338 |
{ |
339 |
- off_t tmpsz = (off_t)wrklen; |
|
339 |
+ size_t tmpsz = wrklen; |
|
340 | 340 |
output = pdf_decrypt_string(pdf, obj, wrkstr, &tmpsz); |
341 |
- outlen = (size_t)tmpsz; |
|
341 |
+ outlen = tmpsz; |
|
342 | 342 |
free(wrkstr); |
343 | 343 |
if (output) { |
344 | 344 |
wrkstr = cli_calloc(outlen+1, sizeof(char)); |