View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0000426 | file | General | public | 2023-02-17 15:04 | 2023-03-05 20:01 |
Reporter | claudiu | Assigned To | christos | ||
Priority | normal | Severity | minor | Reproducibility | always |
Status | resolved | Resolution | fixed | ||
OS | Ubuntu | OS Version | 20.04 | ||
Product Version | 5.44 | ||||
Fixed in Version | 5.45 | ||||
Summary | 0000426: Error "lhs/off overflow 4294967295 0" is printed to console | ||||
Description | When running "file" over files which are composed of only 0xff bytes (at least 6 bytes), I get the above error. For example: {code} $ ./file -m magic.mgc ff.bin lhs/off overflow 4294967295 0 ff.bin: ISO-8859 text, with no line terminators $ hexdump -C ff.bin 00000000 ff ff ff ff ff ff |......| 00000006 {code} The error seems to be generated from the do_ops function: {code} file_private int do_ops(struct magic *m, uint32_t *rv, intmax_t lhs, intmax_t off) { intmax_t offset; // On purpose not INTMAX_MAX if (lhs >= UINT_MAX || lhs <= INT_MIN || off >= UINT_MAX || off <= INT_MIN) { fprintf(stderr, "lhs/off overflow %jd %jd\n", lhs, off); return 1; } {code} , but my knowledge of libmagic is limited so I don't understand why this is a problem. Aside from the error itself, I'm wondering why such errors are printed to the console, since this is part of the libmagic functionality...but of course, this is a separate issue. | ||||
Steps To Reproduce | 1. Create a file with only 0xff bytes: {code} $ printf "\xff\xff\xff\xff\xff\xff" > ff.bin {code} 2. Run "file" on it: {code} $ ./file -m magic.mgc ff.bin lhs/off overflow 4294967295 0 ff.bin: ISO-8859 text, with no line terminators {code} | ||||
Additional Information | I first encountered this in a file from an ISO archive: https://mirror.netsite.dk/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-DVD-2207-02.iso The file location within the ISO is: CentOS-7-x86_64-DVD-2207-02.iso --> Packages/ecj-4.5.2-3.el7.x86_64.rpm --> ecj-4.5.2-3.el7.src.cpio.xz --> ecj-4.5.2-3.el7.src.cpio --> ./usr/share/java/ecj.jar --> org/eclipse/jdt/internal/compiler/parser/unicode/part2.rsc | ||||
Tags | bug | ||||
|
workaround "2>/dev/null" |
|
I've attached a patch that only prints those messages to stderr if the MAGIC_DEBUG flag is set. This seems to be the rule in the libmagic code, aside from some special cases (e.g. if CDF_DEBUG is defined). softmagic.c.patch (3,506 bytes)
--- src/softmagic.c 2023-02-12 19:23:21.000000000 +0200 +++ src/softmagic.c 2023-02-23 10:26:59.158016500 +0200 @@ -1456,16 +1456,19 @@ } file_private int -do_ops(struct magic *m, uint32_t *rv, intmax_t lhs, intmax_t off) +do_ops(struct magic_set *ms, struct magic *m, uint32_t *rv, intmax_t lhs, + intmax_t off) { intmax_t offset; // On purpose not INTMAX_MAX if (lhs >= UINT_MAX || lhs <= INT_MIN || off >= UINT_MAX || off <= INT_MIN) { - fprintf(stderr, "lhs/off overflow %jd %jd\n", lhs, off); + if ((ms->flags & MAGIC_DEBUG) != 0) { + fprintf(stderr, "lhs/off overflow %jd %jd\n", lhs, off); + } return 1; } - + if (off) { switch (m->in_op & FILE_OPS_MASK) { case FILE_OPAND: @@ -1498,7 +1501,9 @@ if (m->in_op & FILE_OPINVERSE) offset = ~offset; if (offset >= UINT_MAX) { - fprintf(stderr, "offset overflow %jd\n", offset); + if ((ms->flags & MAGIC_DEBUG) != 0) { + fprintf(stderr, "offset overflow %jd\n", offset); + } return 1; } *rv = CAST(uint32_t, offset); @@ -1702,25 +1707,25 @@ case FILE_BYTE: if (OFFSET_OOB(nbytes, offset, 1)) return 0; - if (do_ops(m, &offset, SEXT(sgn,8,p->b), off)) + if (do_ops(ms, m, &offset, SEXT(sgn,8,p->b), off)) return 0; break; case FILE_BESHORT: if (OFFSET_OOB(nbytes, offset, 2)) return 0; - if (do_ops(m, &offset, SEXT(sgn,16,BE16(p)), off)) + if (do_ops(ms, m, &offset, SEXT(sgn,16,BE16(p)), off)) return 0; break; case FILE_LESHORT: if (OFFSET_OOB(nbytes, offset, 2)) return 0; - if (do_ops(m, &offset, SEXT(sgn,16,LE16(p)), off)) + if (do_ops(ms, m, &offset, SEXT(sgn,16,LE16(p)), off)) return 0; break; case FILE_SHORT: if (OFFSET_OOB(nbytes, offset, 2)) return 0; - if (do_ops(m, &offset, SEXT(sgn,16,p->h), off)) + if (do_ops(ms, m, &offset, SEXT(sgn,16,p->h), off)) return 0; break; case FILE_BELONG: @@ -1730,7 +1735,7 @@ lhs = BE32(p); if (in_type == FILE_BEID3) lhs = cvt_id3(ms, CAST(uint32_t, lhs)); - if (do_ops(m, &offset, SEXT(sgn,32,lhs), off)) + if (do_ops(ms, m, &offset, SEXT(sgn,32,lhs), off)) return 0; break; case FILE_LELONG: @@ -1740,37 +1745,37 @@ lhs = LE32(p); if (in_type == FILE_LEID3) lhs = cvt_id3(ms, CAST(uint32_t, lhs)); - if (do_ops(m, &offset, SEXT(sgn,32,lhs), off)) + if (do_ops(ms, m, &offset, SEXT(sgn,32,lhs), off)) return 0; break; case FILE_MELONG: if (OFFSET_OOB(nbytes, offset, 4)) return 0; - if (do_ops(m, &offset, SEXT(sgn,32,ME32(p)), off)) + if (do_ops(ms, m, &offset, SEXT(sgn,32,ME32(p)), off)) return 0; break; case FILE_LONG: if (OFFSET_OOB(nbytes, offset, 4)) return 0; - if (do_ops(m, &offset, SEXT(sgn,32,p->l), off)) + if (do_ops(ms, m, &offset, SEXT(sgn,32,p->l), off)) return 0; break; case FILE_LEQUAD: if (OFFSET_OOB(nbytes, offset, 8)) return 0; - if (do_ops(m, &offset, SEXT(sgn,64,LE64(p)), off)) + if (do_ops(ms, m, &offset, SEXT(sgn,64,LE64(p)), off)) return 0; break; case FILE_BEQUAD: if (OFFSET_OOB(nbytes, offset, 8)) return 0; - if (do_ops(m, &offset, SEXT(sgn,64,BE64(p)), off)) + if (do_ops(ms, m, &offset, SEXT(sgn,64,BE64(p)), off)) return 0; break; case FILE_OCTAL: if (OFFSET_OOB(nbytes, offset, m->vallen)) return 0; - if(do_ops(m, &offset, + if(do_ops(ms, m, &offset, SEXT(sgn,64,strtoull(p->s, NULL, 8)), off)) return 0; break; |
|
Fixed to only print debugging with debug. |
Date Modified | Username | Field | Change |
---|---|---|---|
2023-02-17 15:04 | claudiu | New Issue | |
2023-02-17 15:04 | claudiu | Tag Attached: bug | |
2023-02-20 13:32 | polluks | Note Added: 0003896 | |
2023-02-23 08:39 | claudiu | Note Added: 0003897 | |
2023-02-23 08:39 | claudiu | File Added: softmagic.c.patch | |
2023-03-05 20:00 | christos | Assigned To | => christos |
2023-03-05 20:00 | christos | Status | new => assigned |
2023-03-05 20:01 | christos | Status | assigned => resolved |
2023-03-05 20:01 | christos | Resolution | open => fixed |
2023-03-05 20:01 | christos | Fixed in Version | => 5.45 |
2023-03-05 20:01 | christos | Note Added: 0003906 |