commit 65f4a4dbdf29b512f7b291b9275fe32c6ba92a6a Author: MSVSphere Packaging Team Date: Fri Mar 29 15:34:10 2024 +0300 import file-5.33-26.el8 diff --git a/.file.metadata b/.file.metadata new file mode 100644 index 0000000..7cbe049 --- /dev/null +++ b/.file.metadata @@ -0,0 +1 @@ +31a67e4dc0a3d7a8d1b850429c3f625314700240 SOURCES/file-5.33.tar.gz diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..cbb9ab4 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/file-5.33.tar.gz diff --git a/SOURCES/file-4.17-rpm-name.patch b/SOURCES/file-4.17-rpm-name.patch new file mode 100644 index 0000000..d542b0c --- /dev/null +++ b/SOURCES/file-4.17-rpm-name.patch @@ -0,0 +1,12 @@ +diff --git a/magic/Magdir/rpm b/magic/Magdir/rpm +index 9a795f8..31db083 100644 +--- a/magic/Magdir/rpm ++++ b/magic/Magdir/rpm +@@ -29,6 +29,7 @@ + >>8 beshort 17 SuperH + >>8 beshort 18 Xtensa + >>8 beshort 255 noarch ++>>10 string x %s + + #delta RPM Daniel Novotny (dnovotny@redhat.com) + 0 string drpm Delta RPM diff --git a/SOURCES/file-5.04-volume_key.patch b/SOURCES/file-5.04-volume_key.patch new file mode 100644 index 0000000..b3c0860 --- /dev/null +++ b/SOURCES/file-5.04-volume_key.patch @@ -0,0 +1,10 @@ +diff --git a/magic/Magdir/securitycerts b/magic/Magdir/securitycerts +index 8785dd8..1c340be 100644 +--- a/magic/Magdir/securitycerts ++++ b/magic/Magdir/securitycerts +@@ -4,3 +4,5 @@ + 0 search/1 -----BEGIN\ CERTIFICATE------ RFC1421 Security Certificate text + 0 search/1 -----BEGIN\ NEW\ CERTIFICATE RFC1421 Security Certificate Signing Request text + 0 belong 0xedfeedfe Sun 'jks' Java Keystore File data ++ ++0 string \0volume_key volume_key escrow packet diff --git a/SOURCES/file-5.33-CVE-2018-10360.patch b/SOURCES/file-5.33-CVE-2018-10360.patch new file mode 100644 index 0000000..0b4e96b --- /dev/null +++ b/SOURCES/file-5.33-CVE-2018-10360.patch @@ -0,0 +1,28 @@ +From 8616080aecf07436e80a27f68c336382c1d1c22d Mon Sep 17 00:00:00 2001 +From: Christos Zoulas +Date: Sat, 9 Jun 2018 16:00:06 +0000 +Subject: [PATCH] Avoid reading past the end of buffer (Rui Reis) + +Upstream-commit: a642587a9c9e2dd7feacdf513c3643ce26ad3c22 +Signed-off-by: Kamil Dudka +--- + src/readelf.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/src/readelf.c b/src/readelf.c +index 3df0836..d96a538 100644 +--- a/src/readelf.c ++++ b/src/readelf.c +@@ -825,7 +825,8 @@ do_core_note(struct magic_set *ms, unsigned char *nbuf, uint32_t type, + + cname = (unsigned char *) + &nbuf[doff + prpsoffsets(i)]; +- for (cp = cname; *cp && isprint(*cp); cp++) ++ for (cp = cname; cp < nbuf + size && *cp ++ && isprint(*cp); cp++) + continue; + /* + * Linux apparently appends a space at the end +-- +2.14.4 + diff --git a/SOURCES/file-5.33-bound-file_strncmp.patch b/SOURCES/file-5.33-bound-file_strncmp.patch new file mode 100644 index 0000000..d8ac1a0 --- /dev/null +++ b/SOURCES/file-5.33-bound-file_strncmp.patch @@ -0,0 +1,68 @@ +diff -urp file-5.33.orig/src/softmagic.c file-5.33/src/softmagic.c +--- file-5.33.orig/src/softmagic.c 2020-12-14 12:26:50.286849841 -0500 ++++ file-5.33/src/softmagic.c 2020-12-14 12:35:52.679166211 -0500 +@@ -1748,7 +1748,8 @@ mget(struct magic_set *ms, struct magic + } + + private uint64_t +-file_strncmp(const char *s1, const char *s2, size_t len, uint32_t flags) ++file_strncmp(const char *s1, const char *s2, size_t len, size_t maxlen, ++ uint32_t flags) + { + /* + * Convert the source args to unsigned here so that (1) the +@@ -1760,7 +1761,7 @@ file_strncmp(const char *s1, const char + const unsigned char *b = (const unsigned char *)s2; + uint32_t ws = flags & (STRING_COMPACT_WHITESPACE | + STRING_COMPACT_OPTIONAL_WHITESPACE); +- const unsigned char *eb = b + (ws ? strlen(s2) : len); ++ const unsigned char *eb = b + (ws ? maxlen : len); + uint64_t v; + + /* +@@ -1818,7 +1819,8 @@ file_strncmp(const char *s1, const char + } + + private uint64_t +-file_strncmp16(const char *a, const char *b, size_t len, uint32_t flags) ++file_strncmp16(const char *a, const char *b, size_t len, size_t maxlen, ++ uint32_t flags) + { + /* + * XXX - The 16-bit string compare probably needs to be done +@@ -1826,7 +1828,7 @@ file_strncmp16(const char *a, const char + * At the moment, I am unsure. + */ + flags = 0; +- return file_strncmp(a, b, len, flags); ++ return file_strncmp(a, b, len, maxlen, flags); + } + + private int +@@ -1954,13 +1956,15 @@ magiccheck(struct magic_set *ms, struct + case FILE_STRING: + case FILE_PSTRING: + l = 0; +- v = file_strncmp(m->value.s, p->s, (size_t)m->vallen, m->str_flags); ++ v = file_strncmp(m->value.s, p->s, (size_t)m->vallen, ++ sizeof(p->s), m->str_flags); + break; + + case FILE_BESTRING16: + case FILE_LESTRING16: + l = 0; +- v = file_strncmp16(m->value.s, p->s, (size_t)m->vallen, m->str_flags); ++ v = file_strncmp16(m->value.s, p->s, (size_t)m->vallen, ++ sizeof(p->s), m->str_flags); + break; + + case FILE_SEARCH: { /* search ms->search.s for the string m->value.s */ +@@ -1979,7 +1983,7 @@ magiccheck(struct magic_set *ms, struct + return 0; + + v = file_strncmp(m->value.s, ms->search.s + idx, slen, +- m->str_flags); ++ ms->search.s_len - idx, m->str_flags); + if (v == 0) { /* found match */ + ms->search.offset += idx; + ms->search.rm_len = ms->search.s_len - idx; diff --git a/SOURCES/file-5.33-clamav.patch b/SOURCES/file-5.33-clamav.patch new file mode 100644 index 0000000..5cd905c --- /dev/null +++ b/SOURCES/file-5.33-clamav.patch @@ -0,0 +1,37 @@ +From fb1604080767501fde17eb601382e84f1c1ddca3 Mon Sep 17 00:00:00 2001 +From: Christos Zoulas +Date: Mon, 16 Jul 2018 12:30:41 +0000 +Subject: [PATCH] remember to put a space between the version and the number, + plus more version parsing (Kamil Dudka) + +Upstream-commit: 1a7f58c9f253e3b902bfb7a77afd8375b0b428b7 +Signed-off-by: Kamil Dudka +--- + magic/Magdir/fsav | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +diff --git a/magic/Magdir/fsav b/magic/Magdir/fsav +index 5714798..5d72ab9 100644 +--- a/magic/Magdir/fsav ++++ b/magic/Magdir/fsav +@@ -48,13 +48,15 @@ + >11 string >\0 Clam AntiVirus database %-.23s + >>34 string : + >>>35 string !: \b, version +->>>>35 string x \b%-.1s +->>>>>36 string !: ++>>>>35 string x \b %-.1s ++>>>>>36 string !: + >>>>>>36 string x \b%-.1s + >>>>>>>37 string !: + >>>>>>>>37 string x \b%-.1s + >>>>>>>>>38 string !: + >>>>>>>>>>38 string x \b%-.1s ++>>>>>>>>>>>39 string !: ++>>>>>>>>>>>>39 string x \b%-.1s + >512 string \037\213 \b, gzipped + >769 string ustar\0 \b, tarred + +-- +2.14.4 + diff --git a/SOURCES/file-5.33-covscan.patch b/SOURCES/file-5.33-covscan.patch new file mode 100644 index 0000000..ceedce1 --- /dev/null +++ b/SOURCES/file-5.33-covscan.patch @@ -0,0 +1,31 @@ +From 7bd1d499157caa391082f594d197f49f5327bd56 Mon Sep 17 00:00:00 2001 +From: Christos Zoulas +Date: Wed, 1 Aug 2018 09:59:45 +0000 +Subject: [PATCH] fix leak on error, found by coverity. + +Upstream-commit: e0805be4909e47dac47bab9d0caf3725da43e645 +Signed-off-by: Kamil Dudka +--- + src/compress.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/src/compress.c b/src/compress.c +index 184011b..cb11303 100644 +--- a/src/compress.c ++++ b/src/compress.c +@@ -249,8 +249,11 @@ file_zmagic(struct magic_set *ms, const struct buffer *b, const char *name) + * XXX: If file_buffer fails here, we overwrite + * the compressed text. FIXME. + */ +- if (file_buffer(ms, -1, NULL, buf, nbytes) == -1) ++ if (file_buffer(ms, -1, NULL, buf, nbytes) == -1) { ++ if (file_pop_buffer(ms, pb) != NULL) ++ abort(); + goto error; ++ } + if ((rbuf = file_pop_buffer(ms, pb)) != NULL) { + if (file_printf(ms, "%s", rbuf) == -1) { + free(rbuf); +-- +2.17.2 + diff --git a/SOURCES/file-5.33-fix-compression.patch b/SOURCES/file-5.33-fix-compression.patch new file mode 100644 index 0000000..adbd7c5 --- /dev/null +++ b/SOURCES/file-5.33-fix-compression.patch @@ -0,0 +1,42 @@ +diff --git a/src/compress.c b/src/compress.c +index cb11303..5677412 100644 +--- a/src/compress.c ++++ b/src/compress.c +@@ -723,25 +723,24 @@ uncompressbuf(int fd, size_t bytes_max, size_t method, const unsigned char *old, + rv = OKDATA; + if ((r = sread(fdp[STDOUT_FILENO][0], *newch, bytes_max, 0)) > 0) + break; +- DPRINTF("Read stdout failed %d (%s)\n", fdp[STDOUT_FILENO][0], +- r != -1 ? strerror(errno) : "no data"); +- +- rv = ERRDATA; +- if (r == 0 && +- (r = sread(fdp[STDERR_FILENO][0], *newch, bytes_max, 0)) > 0) +- { ++ if (r < 0) { ++ rv = ERRDATA; ++ DPRINTF("Read stdout failed %d (%s)\n", fdp[STDOUT_FILENO][0], ++ strerror(errno)); ++ goto err; ++ } else if ((r = sread(fdp[STDERR_FILENO][0], *newch, bytes_max, 0)) > 0){ ++ rv = ERRDATA; + r = filter_error(*newch, r); + break; + } +- free(*newch); + if (r == 0) +- rv = makeerror(newch, n, "Read failed, %s", +- strerror(errno)); +- else +- rv = makeerror(newch, n, "No data"); ++ break; ++ free(*newch); ++ rv = ERRDATA; ++ rv = makeerror(newch, n, "Read stderr failed, %s", ++ strerror(errno)); + goto err; + } +- + *n = r; + /* NUL terminate, as every buffer is handled here. */ + (*newch)[*n] = '\0'; diff --git a/SOURCES/file-5.33-floating-point-exception.patch b/SOURCES/file-5.33-floating-point-exception.patch new file mode 100644 index 0000000..32415b4 --- /dev/null +++ b/SOURCES/file-5.33-floating-point-exception.patch @@ -0,0 +1,77 @@ +diff --git a/src/Makefile.am b/src/Makefile.am +index a9b245d..c7f184d 100644 +--- a/src/Makefile.am ++++ b/src/Makefile.am +@@ -17,10 +17,10 @@ MINGWLIBS = -lgnurx -lshlwapi + else + MINGWLIBS = + endif +-libmagic_la_LIBADD = $(LTLIBOBJS) $(MINGWLIBS) ++libmagic_la_LIBADD = -lm $(LTLIBOBJS) $(MINGWLIBS) + + file_SOURCES = file.c seccomp.c +-file_LDADD = libmagic.la ++file_LDADD = libmagic.la -lm + CLEANFILES = magic.h + EXTRA_DIST = magic.h.in + HDR= $(top_srcdir)/src/magic.h.in +diff --git a/src/softmagic.c b/src/softmagic.c +index 3e76517..57b4677 100644 +--- a/src/softmagic.c ++++ b/src/softmagic.c +@@ -37,6 +37,7 @@ FILE_RCSID("@(#)$File: softmagic.c,v 1.259 2018/03/11 01:23:52 christos Exp $") + + #include "magic.h" + #include ++#include + #include + #include + #include +@@ -1893,19 +1894,19 @@ magiccheck(struct magic_set *ms, struct magic *m) + break; + + case '!': +- matched = fv != fl; ++ matched = isunordered(fl, fv) ? 1 : fv != fl; + break; + + case '=': +- matched = fv == fl; ++ matched = isunordered(fl, fv) ? 0 : fv == fl; + break; + + case '>': +- matched = fv > fl; ++ matched = isgreater(fv, fl); + break; + + case '<': +- matched = fv < fl; ++ matched = isless(fv, fl); + break; + + default: +@@ -1926,19 +1927,19 @@ magiccheck(struct magic_set *ms, struct magic *m) + break; + + case '!': +- matched = dv != dl; ++ matched = isunordered(dv, dl) ? 1 : dv != dl; + break; + + case '=': +- matched = dv == dl; ++ matched = isunordered(dv, dl) ? 0 : dv == dl; + break; + + case '>': +- matched = dv > dl; ++ matched = isgreater(dv, dl); + break; + + case '<': +- matched = dv < dl; ++ matched = isless(dv, dl); + break; + + default: diff --git a/SOURCES/file-5.33-gif.patch b/SOURCES/file-5.33-gif.patch new file mode 100644 index 0000000..646ea32 --- /dev/null +++ b/SOURCES/file-5.33-gif.patch @@ -0,0 +1,30 @@ +From f0e846528e1c839ab44895a1f13d167a4ad8def3 Mon Sep 17 00:00:00 2001 +From: Marek Cermak +Date: Wed, 20 Dec 2017 16:18:46 +0100 +Subject: [PATCH] Resolves: #1515180 - image/gif classifed as + application/octet-stream + +https://bugzilla.redhat.com/show_bug.cgi?id=1515180 + +Signed-off-by: Marek Cermak +--- + magic/Magdir/images | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/magic/Magdir/images b/magic/Magdir/images +index 69e8e90f..76f7e7da 100644 +--- a/magic/Magdir/images ++++ b/magic/Magdir/images +@@ -468,7 +468,9 @@ + !:mime image/x-unknown + + # GIF ++# Strength set up to beat 0x55AA DOS/MBR signature word lookups (+65) + 0 string GIF8 GIF image data ++!:strength +80 + !:mime image/gif + !:apple 8BIMGIFf + >4 string 7a \b, version 8%s, +-- +2.13.6 + diff --git a/SOURCES/file-5.33-more-python.patch b/SOURCES/file-5.33-more-python.patch new file mode 100644 index 0000000..1e8fc1e --- /dev/null +++ b/SOURCES/file-5.33-more-python.patch @@ -0,0 +1,22 @@ +diff -urp file-5.33.orig/magic/Magdir/python file-5.33/magic/Magdir/python +--- file-5.33.orig/magic/Magdir/python 2020-12-17 13:19:08.610803723 -0500 ++++ file-5.33/magic/Magdir/python 2020-12-17 13:26:07.346954161 -0500 +@@ -43,6 +43,18 @@ + !:strength + 15 + !:mime text/x-python + ++0 search/1/wt #!\ /usr/libexec/platform-python Python script text executable ++!:strength + 15 ++!:mime text/x-python ++ ++0 search/1/wt #!\ /usr/bin/python2 Python script text executable ++!:strength + 15 ++!:mime text/x-python ++ ++0 search/1/wt #!\ /usr/bin/python3 Python script text executable ++!:strength + 15 ++!:mime text/x-python ++ + + # from module.submodule import func1, func2 + 0 regex \^from[\040\t\f\r\n]+([A-Za-z0-9_]|\\.)+[\040\t\f\r\n]+import.*$ Python script text executable diff --git a/SOURCES/file-5.33-msooxml-magic.patch b/SOURCES/file-5.33-msooxml-magic.patch new file mode 100644 index 0000000..fb3cb86 --- /dev/null +++ b/SOURCES/file-5.33-msooxml-magic.patch @@ -0,0 +1,24 @@ +diff --git a/magic/Magdir/msooxml b/magic/Magdir/msooxml +index bde098e..7d0bcc7 100644 +--- a/magic/Magdir/msooxml ++++ b/magic/Magdir/msooxml +@@ -28,16 +28,16 @@ + # skip to the second local file header + # since some documents include a 520-byte extra field following the file + # header, we need to scan for the next header +->>(18.l+49) search/2000 PK\003\004 ++>>(18.l+49) search/6000 PK\003\004 + # now skip to the *third* local file header; again, we need to scan due to a + # 520-byte extra field following the file header +->>>&26 search/1000 PK\003\004 ++>>>&26 search/6000 PK\003\004 + # and check the subdirectory name to determine which type of OOXML + # file we have. Correct the mimetype with the registered ones: + # http://technet.microsoft.com/en-us/library/cc179224.aspx + >>>>&26 use msooxml + >>>>&26 default x + # OpenOffice/Libreoffice orders ZIP entry differently, so check the 4th file +->>>>>&26 search/1000 PK\003\004 ++>>>>>&26 search/6000 PK\003\004 + >>>>>>&26 use msooxml + >>>>>>&26 default x Microsoft OOXML diff --git a/SOURCES/file-5.33-other-languages.patch b/SOURCES/file-5.33-other-languages.patch new file mode 100644 index 0000000..9b6c918 --- /dev/null +++ b/SOURCES/file-5.33-other-languages.patch @@ -0,0 +1,35 @@ +diff -urp file-5.33.orig/magic/Magdir/commands file-5.33/magic/Magdir/commands +--- file-5.33.orig/magic/Magdir/commands 2017-08-14 03:40:38.000000000 -0400 ++++ file-5.33/magic/Magdir/commands 2020-12-17 13:30:07.063162185 -0500 +@@ -8,6 +8,8 @@ + !:mime text/x-shellscript + 0 string/wb #!\ /bin/sh POSIX shell script executable (binary data) + !:mime text/x-shellscript ++0 string/w #!\ /usr/bin/sh Shell script text executable ++!:mime text/x-shellscript + + 0 string/wt #!\ /bin/csh C shell script text executable + !:mime text/x-shellscript +diff -urp file-5.33.orig/magic/Magdir/javascript file-5.33/magic/Magdir/javascript +--- file-5.33.orig/magic/Magdir/javascript 2012-06-16 09:30:36.000000000 -0400 ++++ file-5.33/magic/Magdir/javascript 2020-12-17 13:36:56.276843745 -0500 +@@ -15,3 +15,5 @@ + !:mime application/javascript + 0 search/1 #!/usr/bin/env\ nodejs Node.js script text executable + !:mime application/javascript ++0 string/wt #!\ /usr/bin/gjs Gnome Javascript text executable ++!:mime text/javascript +diff -urp file-5.33.orig/magic/Magdir/tcl file-5.33/magic/Magdir/tcl +--- file-5.33.orig/magic/Magdir/tcl 2014-01-08 17:29:21.000000000 -0500 ++++ file-5.33/magic/Magdir/tcl 2020-12-17 13:36:20.855391803 -0500 +@@ -12,6 +12,10 @@ + !:mime text/x-tcl + 0 search/1 #!\ /usr/bin/env\ tcl Tcl script text executable + !:mime text/x-tcl ++0 string/wt #!\ /usr/bin/jimsh Jim TCL text executable ++!:mime text/x-tcl ++0 search/1/wt #!\ /usr/bin/tclsh Tcl/Tk script text executable ++!:mime text/x-tcl + 0 search/1/w #!\ /usr/bin/wish Tcl/Tk script text executable + !:mime text/x-tcl + 0 search/1/w #!\ /usr/local/bin/wish Tcl/Tk script text executable diff --git a/SOURCES/file-5.33-pie-executable-revert.patch b/SOURCES/file-5.33-pie-executable-revert.patch new file mode 100644 index 0000000..66a241c --- /dev/null +++ b/SOURCES/file-5.33-pie-executable-revert.patch @@ -0,0 +1,34 @@ +From 719116b196fd873f5a463dfdb0fd6258cee51591 Mon Sep 17 00:00:00 2001 +From: Kamil Dudka +Date: Tue, 22 May 2018 18:18:06 +0200 +Subject: [PATCH] Revert "add a conditional in description" + +Upstream-commit: 6876ebadcdf27224b3ffa9dfa4343127aa97c9b2 + +... and partially revert upstream commit +7dbecfe406a6bb2de1fe7ec2fe413dcd8871ac74 + +Signed-off-by: Kamil Dudka +--- + magic/Magdir/elf | 5 ++--- + 1 file changed, 2 insertions(+), 3 deletions(-) + +diff --git a/magic/Magdir/elf b/magic/Magdir/elf +index 7fd5de1..dba5a73 100644 +--- a/magic/Magdir/elf ++++ b/magic/Magdir/elf +@@ -48,9 +48,8 @@ + !:mime application/x-object + >16 leshort 2 executable, + !:mime application/x-executable +->16 leshort 3 ${x?pie executable:shared object} +- +-!:mime application/x-${x?pie-executable:sharedlib} ++>16 leshort 3 shared object, ++!:mime application/x-sharedlib + >16 leshort 4 core file + !:mime application/x-coredump + # Core file detection is not reliable. +-- +2.14.3 + diff --git a/SOURCES/file-5.33-ppc-swap.patch b/SOURCES/file-5.33-ppc-swap.patch new file mode 100644 index 0000000..3cf3ece --- /dev/null +++ b/SOURCES/file-5.33-ppc-swap.patch @@ -0,0 +1,35 @@ +From ed6062995ae60d6772f2dabc39e03cbf28ee7343 Mon Sep 17 00:00:00 2001 +From: Christos Zoulas +Date: Mon, 16 Jul 2018 12:32:08 +0000 +Subject: [PATCH] more info for ppc swapspace (Kamil Dudka) + +Upstream-commit: 65f9c7053548df8945df600c07123c9151531ee6 +Signed-off-by: Kamil Dudka +--- + magic/Magdir/linux | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +diff --git a/magic/Magdir/linux b/magic/Magdir/linux +index 0630a8a..11e9237 100644 +--- a/magic/Magdir/linux ++++ b/magic/Magdir/linux +@@ -94,6 +94,16 @@ + # From Daniel Novotny + # swap file for PowerPC + 65526 string SWAPSPACE2 Linux/ppc swap file ++>0x400 long x version %d, ++>0x404 long x size %d pages, ++>1052 string \0 no label, ++>1052 string >\0 LABEL=%s, ++>0x40c belong x UUID=%08x ++>0x410 beshort x \b-%04x ++>0x412 beshort x \b-%04x ++>0x414 beshort x \b-%04x ++>0x416 belong x \b-%08x ++>0x41a beshort x \b%04x + 16374 string SWAPSPACE2 Linux/ia64 swap file + # + # Linux kernel boot images, from Albert Cahalan +-- +2.14.4 + diff --git a/SOURCES/file-5.33-python-space.patch b/SOURCES/file-5.33-python-space.patch new file mode 100644 index 0000000..053ed10 --- /dev/null +++ b/SOURCES/file-5.33-python-space.patch @@ -0,0 +1,23 @@ +diff -urp file-5.33.orig/magic/Magdir/python file-5.33/magic/Magdir/python +--- file-5.33.orig/magic/Magdir/python 2017-08-14 03:40:38.000000000 -0400 ++++ file-5.33/magic/Magdir/python 2020-12-14 12:24:42.084905613 -0500 +@@ -30,16 +30,16 @@ + 0 belong 0x3e0d0d0a python 3.7 byte-compiled + + +-0 search/1/w #!\ /usr/bin/python Python script text executable ++0 search/1/w #!\040/usr/bin/python Python script text executable + !:strength + 15 + !:mime text/x-python +-0 search/1/w #!\ /usr/local/bin/python Python script text executable ++0 search/1/w #!\040/usr/local/bin/python Python script text executable + !:strength + 15 + !:mime text/x-python + 0 search/1 #!/usr/bin/env\ python Python script text executable + !:strength + 15 + !:mime text/x-python +-0 search/10 #!\ /usr/bin/env\ python Python script text executable ++0 search/10 #!\040/usr/bin/env\ python Python script text executable + !:strength + 15 + !:mime text/x-python + diff --git a/SOURCES/file-5.33-seccomp.patch b/SOURCES/file-5.33-seccomp.patch new file mode 100644 index 0000000..89e425f --- /dev/null +++ b/SOURCES/file-5.33-seccomp.patch @@ -0,0 +1,53 @@ +From 4ae8a24b5ccbee904875a10b7b2301369080a88d Mon Sep 17 00:00:00 2001 +From: Christos Zoulas +Date: Sun, 6 May 2018 16:36:41 +0000 +Subject: [PATCH] add more syscalls; newfstatat is used for stat'ing the magic + file, getdents64 is used for getting the magic entries during compilation. + +Upstream-commit: aeddbff330fad0edff2ab4b02dbf0863cd593c3c +Signed-off-by: Kamil Dudka +--- + src/seccomp.c | 15 ++++++++------- + 1 file changed, 8 insertions(+), 7 deletions(-) + +diff --git a/src/seccomp.c b/src/seccomp.c +index 7c8a3144..481a5624 100644 +--- a/src/seccomp.c ++++ b/src/seccomp.c +@@ -59,12 +59,7 @@ enable_sandbox_basic(void) + if (prctl(PR_SET_NO_NEW_PRIVS, 1, 0, 0, 0) == -1) + return -1; + +-#if 0 +- // prevent escape via ptrace +- prctl(PR_SET_DUMPABLE, 0); +-#endif +- +- if (prctl (PR_SET_DUMPABLE, 0, 0, 0, 0) == -1) ++ if (prctl(PR_SET_DUMPABLE, 0, 0, 0, 0) == -1) + return -1; + + // initialize the filter +@@ -171,6 +166,9 @@ enable_sandbox_full(void) + ALLOW_RULE(fcntl); + ALLOW_RULE(fstat); + ALLOW_RULE(getdents); ++#ifdef __NR_getdents64 ++ ALLOW_RULE(getdents64); ++#endif + ALLOW_RULE(ioctl); + ALLOW_RULE(lseek); + ALLOW_RULE(lstat); +@@ -178,6 +176,9 @@ enable_sandbox_full(void) + ALLOW_RULE(mprotect); + ALLOW_RULE(mremap); + ALLOW_RULE(munmap); ++#ifdef __NR_newfstatat ++ ALLOW_RULE(newfstatat); ++#endif + ALLOW_RULE(open); + ALLOW_RULE(openat); + ALLOW_RULE(pread64); +-- +2.17.0 + diff --git a/SOURCES/file-5.33-static-PIE-binaries-0.patch b/SOURCES/file-5.33-static-PIE-binaries-0.patch new file mode 100644 index 0000000..1031626 --- /dev/null +++ b/SOURCES/file-5.33-static-PIE-binaries-0.patch @@ -0,0 +1,236 @@ +From 3951ed6ab1ba4b7d6d4d2dd5700858c470627c46 Mon Sep 17 00:00:00 2001 +From: Vincent Mihalkovic +Date: Thu, 9 Feb 2023 16:46:43 +0100 +Subject: [PATCH] store copy of the mode info in the magic_set + +--- + src/file.h | 1 + + src/funcs.c | 53 +++++++++++++++++++++++++++++++------------------ + src/softmagic.c | 27 +++++++++++-------------- + 3 files changed, 47 insertions(+), 34 deletions(-) + +diff --git a/src/file.h b/src/file.h +index 66598bc..b3d015d 100644 +--- a/src/file.h ++++ b/src/file.h +@@ -413,6 +413,7 @@ struct magic_set { + #define EVENT_HAD_ERR 0x01 + const char *file; + size_t line; /* current magic line number */ ++ mode_t mode; /* copy of current stat mode */ + + /* data for searches */ + struct { +diff --git a/src/funcs.c b/src/funcs.c +index f59f4a1..0bf92fe 100644 +--- a/src/funcs.c ++++ b/src/funcs.c +@@ -27,7 +27,7 @@ + #include "file.h" + + #ifndef lint +-FILE_RCSID("@(#)$File: funcs.c,v 1.94 2017/11/02 20:25:39 christos Exp $") ++FILE_RCSID("@(#)$File: funcs.c,v 1.95 2018/05/24 18:09:17 christos Exp $") + #endif /* lint */ + + #include "magic.h" +@@ -183,9 +183,11 @@ file_buffer(struct magic_set *ms, int fd, const char *inname __attribute__ ((__u + const char *type = "application/octet-stream"; + const char *def = "data"; + const char *ftype = NULL; ++ char *rbuf = NULL; + struct buffer b; + + buffer_init(&b, fd, buf, nb); ++ ms->mode = b.st.st_mode; + + if (nb == 0) { + def = "empty"; +@@ -248,31 +250,43 @@ file_buffer(struct magic_set *ms, int fd, const char *inname __attribute__ ((__u + goto done; + } + } ++#ifdef BUILTIN_ELF ++ if ((ms->flags & MAGIC_NO_CHECK_ELF) == 0 && nb > 5 && fd != -1) { ++ file_pushbuf_t *pb; ++ /* ++ * We matched something in the file, so this ++ * *might* be an ELF file, and the file is at ++ * least 5 bytes long, so if it's an ELF file ++ * it has at least one byte past the ELF magic ++ * number - try extracting information from the ++ * ELF headers that cannot easily be extracted ++ * with rules in the magic file. We we don't ++ * print the information yet. ++ */ ++ if ((pb = file_push_buffer(ms)) == NULL) ++ return -1; ++ ++ rv = file_tryelf(ms, &b); ++ rbuf = file_pop_buffer(ms, pb); ++ if (rv != 1) { ++ free(rbuf); ++ rbuf = NULL; ++ } ++ if ((ms->flags & MAGIC_DEBUG) != 0) ++ (void)fprintf(stderr, "[try elf %d]\n", m); ++ } ++#endif + + /* try soft magic tests */ + if ((ms->flags & MAGIC_NO_CHECK_SOFT) == 0) { + m = file_softmagic(ms, &b, NULL, NULL, BINTEST, looks_text); + if ((ms->flags & MAGIC_DEBUG) != 0) + (void)fprintf(stderr, "[try softmagic %d]\n", m); ++ if (m == 1 && rbuf) { ++ if (file_printf(ms, "%s", rbuf) == -1) ++ goto done; ++ } + if (m) { +-#ifdef BUILTIN_ELF +- if ((ms->flags & MAGIC_NO_CHECK_ELF) == 0 && m == 1 && +- nb > 5 && fd != -1) { +- /* +- * We matched something in the file, so this +- * *might* be an ELF file, and the file is at +- * least 5 bytes long, so if it's an ELF file +- * it has at least one byte past the ELF magic +- * number - try extracting information from the +- * ELF headers that cannot easily * be +- * extracted with rules in the magic file. +- */ +- m = file_tryelf(ms, &b); +- if ((ms->flags & MAGIC_DEBUG) != 0) +- (void)fprintf(stderr, "[try elf %d]\n", +- m); +- } +-#endif + if (checkdone(ms, &rv)) + goto done; + } +@@ -318,6 +332,7 @@ simple: + #if HAVE_FORK + done_encoding: + #endif ++ free(rbuf); + buffer_fini(&b); + if (rv) + return rv; +diff --git a/src/softmagic.c b/src/softmagic.c +index 57b4677..0197ec4 100644 +--- a/src/softmagic.c ++++ b/src/softmagic.c +@@ -54,8 +54,7 @@ private int mget(struct magic_set *, struct magic *, const struct buffer *, + private int msetoffset(struct magic_set *, struct magic *, struct buffer *, + const struct buffer *, size_t, unsigned int); + private int magiccheck(struct magic_set *, struct magic *); +-private int32_t mprint(struct magic_set *, struct magic *, +- const struct buffer *); ++private int32_t mprint(struct magic_set *, struct magic *); + private int moffset(struct magic_set *, struct magic *, const struct buffer *, + int32_t *); + private void mdebug(uint32_t, const char *, size_t); +@@ -63,8 +62,7 @@ private int mcopy(struct magic_set *, union VALUETYPE *, int, int, + const unsigned char *, uint32_t, size_t, struct magic *); + private int mconvert(struct magic_set *, struct magic *, int); + private int print_sep(struct magic_set *, int); +-private int handle_annotation(struct magic_set *, struct magic *, +- const struct buffer *, int); ++private int handle_annotation(struct magic_set *, struct magic *, int); + private int cvt_8(union VALUETYPE *, const struct magic *); + private int cvt_16(union VALUETYPE *, const struct magic *); + private int cvt_32(union VALUETYPE *, const struct magic *); +@@ -241,7 +239,7 @@ flush: + goto flush; + } + +- if ((e = handle_annotation(ms, m, b, firstline)) != 0) { ++ if ((e = handle_annotation(ms, m, firstline)) != 0) { + *need_separator = 1; + *printed_something = 1; + *returnval = 1; +@@ -259,7 +257,7 @@ flush: + return -1; + } + +- if (print && mprint(ms, m, b) == -1) ++ if (print && mprint(ms, m) == -1) + return -1; + + switch (moffset(ms, m, &bb, &ms->c.li[cont_level].off)) { +@@ -340,7 +338,7 @@ flush: + } else + ms->c.li[cont_level].got_match = 1; + +- if ((e = handle_annotation(ms, m, b, firstline)) ++ if ((e = handle_annotation(ms, m, firstline)) + != 0) { + *need_separator = 1; + *printed_something = 1; +@@ -374,7 +372,7 @@ flush: + return -1; + *need_separator = 0; + } +- if (print && mprint(ms, m, b) == -1) ++ if (print && mprint(ms, m) == -1) + return -1; + + switch (moffset(ms, m, &bb, +@@ -454,7 +452,7 @@ strndup(const char *str, size_t n) + #endif /* HAVE_STRNDUP */ + + static int +-varexpand(char *buf, size_t len, const struct buffer *b, const char *str) ++varexpand(struct magic_set *ms, char *buf, size_t len, const char *str) + { + const char *ptr, *sptr, *e, *t, *ee, *et; + size_t l; +@@ -479,7 +477,7 @@ varexpand(char *buf, size_t len, const struct buffer *b, const char *str) + return -1; + switch (*ptr) { + case 'x': +- if (b->st.st_mode & 0111) { ++ if (ms->mode & 0111) { + ptr = t; + l = et - t; + } else { +@@ -509,7 +507,7 @@ varexpand(char *buf, size_t len, const struct buffer *b, const char *str) + + + private int32_t +-mprint(struct magic_set *ms, struct magic *m, const struct buffer *b) ++mprint(struct magic_set *ms, struct magic *m) + { + uint64_t v; + float vf; +@@ -519,7 +517,7 @@ mprint(struct magic_set *ms, struct magic *m, const struct buffer *b) + const char *desc; + union VALUETYPE *p = &ms->ms_value; + +- if (varexpand(ebuf, sizeof(ebuf), b, m->desc) == -1) ++ if (varexpand(ms, ebuf, sizeof(ebuf), m->desc) == -1) + desc = m->desc; + else + desc = ebuf; +@@ -2166,8 +2164,7 @@ magiccheck(struct magic_set *ms, struct magic *m) + } + + private int +-handle_annotation(struct magic_set *ms, struct magic *m, const struct buffer *b, +- int firstline) ++handle_annotation(struct magic_set *ms, struct magic *m, int firstline) + { + if ((ms->flags & MAGIC_APPLE) && m->apple[0]) { + if (!firstline && file_printf(ms, "\n- ") == -1) +@@ -2188,7 +2185,7 @@ handle_annotation(struct magic_set *ms, struct magic *m, const struct buffer *b, + const char *p; + if (!firstline && file_printf(ms, "\n- ") == -1) + return -1; +- if (varexpand(buf, sizeof(buf), b, m->mimetype) == -1) ++ if (varexpand(ms, buf, sizeof(buf), m->mimetype) == -1) + p = m->mimetype; + else + p = buf; +-- +2.39.1 + diff --git a/SOURCES/file-5.33-static-PIE-binaries-1.patch b/SOURCES/file-5.33-static-PIE-binaries-1.patch new file mode 100644 index 0000000..35a6e97 --- /dev/null +++ b/SOURCES/file-5.33-static-PIE-binaries-1.patch @@ -0,0 +1,767 @@ +From 493e2676626b530a45fcc17040915f34fa0c5dd3 Mon Sep 17 00:00:00 2001 +From: Vincent Mihalkovic +Date: Mon, 6 Feb 2023 14:39:29 +0100 +Subject: [PATCH] add parsing for dynamic sections + +9109a696f3289ba00eaa222fd432755ec4287e28 +--- + src/readelf.c | 295 +++++++++++++++++++++++++++++++------------------- + src/readelf.h | 103 ++++++++++++++++++ + 2 files changed, 289 insertions(+), 109 deletions(-) + +diff --git a/src/readelf.c b/src/readelf.c +index c101483..cdc211f 100644 +--- a/src/readelf.c ++++ b/src/readelf.c +@@ -62,13 +62,12 @@ private uint64_t getu64(int, uint64_t); + + #define MAX_PHNUM 128 + #define MAX_SHNUM 32768 +-#define SIZE_UNKNOWN ((off_t)-1) ++#define SIZE_UNKNOWN CAST(off_t, -1) + + private int + toomany(struct magic_set *ms, const char *name, uint16_t num) + { +- if (file_printf(ms, ", too many %s (%u)", name, num +- ) == -1) ++ if (file_printf(ms, ", too many %s (%u)", name, num) == -1) + return -1; + return 0; + } +@@ -143,54 +142,55 @@ getu64(int swap, uint64_t value) + #define elf_getu64(swap, value) getu64(swap, value) + + #define xsh_addr (clazz == ELFCLASS32 \ +- ? (void *)&sh32 \ +- : (void *)&sh64) ++ ? CAST(void *, &sh32) \ ++ : CAST(void *, &sh64)) + #define xsh_sizeof (clazz == ELFCLASS32 \ + ? sizeof(sh32) \ + : sizeof(sh64)) +-#define xsh_size (size_t)(clazz == ELFCLASS32 \ ++#define xsh_size CAST(size_t, (clazz == ELFCLASS32 \ + ? elf_getu32(swap, sh32.sh_size) \ +- : elf_getu64(swap, sh64.sh_size)) +-#define xsh_offset (off_t)(clazz == ELFCLASS32 \ ++ : elf_getu64(swap, sh64.sh_size))) ++#define xsh_offset CAST(off_t, (clazz == ELFCLASS32 \ + ? elf_getu32(swap, sh32.sh_offset) \ +- : elf_getu64(swap, sh64.sh_offset)) ++ : elf_getu64(swap, sh64.sh_offset))) + #define xsh_type (clazz == ELFCLASS32 \ + ? elf_getu32(swap, sh32.sh_type) \ + : elf_getu32(swap, sh64.sh_type)) + #define xsh_name (clazz == ELFCLASS32 \ + ? elf_getu32(swap, sh32.sh_name) \ + : elf_getu32(swap, sh64.sh_name)) ++ + #define xph_addr (clazz == ELFCLASS32 \ +- ? (void *) &ph32 \ +- : (void *) &ph64) ++ ? CAST(void *, &ph32) \ ++ : CAST(void *, &ph64)) + #define xph_sizeof (clazz == ELFCLASS32 \ + ? sizeof(ph32) \ + : sizeof(ph64)) + #define xph_type (clazz == ELFCLASS32 \ + ? elf_getu32(swap, ph32.p_type) \ + : elf_getu32(swap, ph64.p_type)) +-#define xph_offset (off_t)(clazz == ELFCLASS32 \ ++#define xph_offset CAST(off_t, (clazz == ELFCLASS32 \ + ? elf_getu32(swap, ph32.p_offset) \ +- : elf_getu64(swap, ph64.p_offset)) +-#define xph_align (size_t)((clazz == ELFCLASS32 \ +- ? (off_t) (ph32.p_align ? \ +- elf_getu32(swap, ph32.p_align) : 4) \ +- : (off_t) (ph64.p_align ? \ +- elf_getu64(swap, ph64.p_align) : 4))) +-#define xph_vaddr (size_t)((clazz == ELFCLASS32 \ +- ? (off_t) (ph32.p_vaddr ? \ +- elf_getu32(swap, ph32.p_vaddr) : 4) \ +- : (off_t) (ph64.p_vaddr ? \ +- elf_getu64(swap, ph64.p_vaddr) : 4))) +-#define xph_filesz (size_t)((clazz == ELFCLASS32 \ ++ : elf_getu64(swap, ph64.p_offset))) ++#define xph_align CAST(size_t, (clazz == ELFCLASS32 \ ++ ? CAST(off_t, (ph32.p_align ? \ ++ elf_getu32(swap, ph32.p_align) : 4))\ ++ : CAST(off_t, (ph64.p_align ? \ ++ elf_getu64(swap, ph64.p_align) : 4)))) ++#define xph_vaddr CAST(size_t, (clazz == ELFCLASS32 \ ++ ? CAST(off_t, (ph32.p_vaddr ? \ ++ elf_getu32(swap, ph32.p_vaddr) : 4))\ ++ : CAST(off_t, (ph64.p_vaddr ? \ ++ elf_getu64(swap, ph64.p_vaddr) : 4)))) ++#define xph_filesz CAST(size_t, (clazz == ELFCLASS32 \ + ? elf_getu32(swap, ph32.p_filesz) \ + : elf_getu64(swap, ph64.p_filesz))) +-#define xnh_addr (clazz == ELFCLASS32 \ +- ? (void *)&nh32 \ +- : (void *)&nh64) +-#define xph_memsz (size_t)((clazz == ELFCLASS32 \ ++#define xph_memsz CAST(size_t, ((clazz == ELFCLASS32 \ + ? elf_getu32(swap, ph32.p_memsz) \ +- : elf_getu64(swap, ph64.p_memsz))) ++ : elf_getu64(swap, ph64.p_memsz)))) ++#define xnh_addr (clazz == ELFCLASS32 \ ++ ? CAST(void *, &nh32) \ ++ : CAST(void *, &nh64)) + #define xnh_sizeof (clazz == ELFCLASS32 \ + ? sizeof(nh32) \ + : sizeof(nh64)) +@@ -203,24 +203,36 @@ getu64(int swap, uint64_t value) + #define xnh_descsz (clazz == ELFCLASS32 \ + ? elf_getu32(swap, nh32.n_descsz) \ + : elf_getu32(swap, nh64.n_descsz)) +-#define prpsoffsets(i) (clazz == ELFCLASS32 \ +- ? prpsoffsets32[i] \ +- : prpsoffsets64[i]) ++ ++#define xdh_addr (clazz == ELFCLASS32 \ ++ ? CAST(void *, &dh32) \ ++ : CAST(void *, &dh64)) ++#define xdh_sizeof (clazz == ELFCLASS32 \ ++ ? sizeof(dh32) \ ++ : sizeof(dh64)) ++#define xdh_tag (clazz == ELFCLASS32 \ ++ ? elf_getu32(swap, dh32.d_tag) \ ++ : elf_getu64(swap, dh64.d_tag)) ++#define xdh_val (clazz == ELFCLASS32 \ ++ ? elf_getu32(swap, dh32.d_un.d_val) \ ++ : elf_getu64(swap, dh64.d_un.d_val)) ++ + #define xcap_addr (clazz == ELFCLASS32 \ +- ? (void *)&cap32 \ +- : (void *)&cap64) ++ ? CAST(void *, &cap32) \ ++ : CAST(void *, &cap64)) + #define xcap_sizeof (clazz == ELFCLASS32 \ +- ? sizeof cap32 \ +- : sizeof cap64) ++ ? sizeof(cap32) \ ++ : sizeof(cap64)) + #define xcap_tag (clazz == ELFCLASS32 \ + ? elf_getu32(swap, cap32.c_tag) \ + : elf_getu64(swap, cap64.c_tag)) + #define xcap_val (clazz == ELFCLASS32 \ + ? elf_getu32(swap, cap32.c_un.c_val) \ + : elf_getu64(swap, cap64.c_un.c_val)) ++ + #define xauxv_addr (clazz == ELFCLASS32 \ +- ? (void *)&auxv32 \ +- : (void *)&auxv64) ++ ? CAST(void *, &auxv32) \ ++ : CAST(void *, &auxv64)) + #define xauxv_sizeof (clazz == ELFCLASS32 \ + ? sizeof(auxv32) \ + : sizeof(auxv64)) +@@ -231,6 +243,10 @@ getu64(int swap, uint64_t value) + ? elf_getu32(swap, auxv32.a_v) \ + : elf_getu64(swap, auxv64.a_v)) + ++#define prpsoffsets(i) (clazz == ELFCLASS32 \ ++ ? prpsoffsets32[i] \ ++ : prpsoffsets64[i]) ++ + #ifdef ELFCORE + /* + * Try larger offsets first to avoid false matches +@@ -269,8 +285,8 @@ static const size_t prpsoffsets64[] = { + 16, /* FreeBSD, 64-bit */ + }; + +-#define NOFFSETS32 (sizeof prpsoffsets32 / sizeof prpsoffsets32[0]) +-#define NOFFSETS64 (sizeof prpsoffsets64 / sizeof prpsoffsets64[0]) ++#define NOFFSETS32 (sizeof(prpsoffsets32) / sizeof(prpsoffsets32[0])) ++#define NOFFSETS64 (sizeof(prpsoffsets64) / sizeof(prpsoffsets64[0])) + + #define NOFFSETS (clazz == ELFCLASS32 ? NOFFSETS32 : NOFFSETS64) + +@@ -349,7 +365,8 @@ dophn_core(struct magic_set *ms, int clazz, int swap, int fd, off_t off, + * Loop through all the program headers. + */ + for ( ; num; num--) { +- if (pread(fd, xph_addr, xph_sizeof, off) < (ssize_t)xph_sizeof) { ++ if (pread(fd, xph_addr, xph_sizeof, off) < ++ CAST(ssize_t, xph_sizeof)) { + file_badread(ms); + return -1; + } +@@ -392,7 +409,7 @@ static void + do_note_netbsd_version(struct magic_set *ms, int swap, void *v) + { + uint32_t desc; +- (void)memcpy(&desc, v, sizeof(desc)); ++ memcpy(&desc, v, sizeof(desc)); + desc = elf_getu32(swap, desc); + + if (file_printf(ms, ", for NetBSD") == -1) +@@ -438,7 +455,7 @@ do_note_freebsd_version(struct magic_set *ms, int swap, void *v) + { + uint32_t desc; + +- (void)memcpy(&desc, v, sizeof(desc)); ++ memcpy(&desc, v, sizeof(desc)); + desc = elf_getu32(swap, desc); + if (file_printf(ms, ", for FreeBSD") == -1) + return; +@@ -536,7 +553,7 @@ do_bid_note(struct magic_set *ms, unsigned char *nbuf, uint32_t type, + } + if (file_printf(ms, ", BuildID[%s]=", btype) == -1) + return 1; +- (void)memcpy(desc, &nbuf[doff], descsz); ++ memcpy(desc, &nbuf[doff], descsz); + for (i = 0; i < descsz; i++) + if (file_printf(ms, "%02x", desc[i]) == -1) + return 1; +@@ -560,7 +577,7 @@ do_os_note(struct magic_set *ms, unsigned char *nbuf, uint32_t type, + if (namesz == 4 && strcmp((char *)&nbuf[noff], "GNU") == 0 && + type == NT_GNU_VERSION && descsz == 16) { + uint32_t desc[4]; +- (void)memcpy(desc, &nbuf[doff], sizeof(desc)); ++ memcpy(desc, &nbuf[doff], sizeof(desc)); + + *flags |= FLAGS_DID_OS_NOTE; + if (file_printf(ms, ", for GNU/") == -1) +@@ -627,7 +644,7 @@ do_os_note(struct magic_set *ms, unsigned char *nbuf, uint32_t type, + *flags |= FLAGS_DID_OS_NOTE; + if (file_printf(ms, ", for DragonFly") == -1) + return 1; +- (void)memcpy(&desc, &nbuf[doff], sizeof(desc)); ++ memcpy(&desc, &nbuf[doff], sizeof(desc)); + desc = elf_getu32(swap, desc); + if (file_printf(ms, " %d.%d.%d", desc / 100000, + desc / 10000 % 10, desc % 10000) == -1) +@@ -657,7 +674,7 @@ do_pax_note(struct magic_set *ms, unsigned char *nbuf, uint32_t type, + int did = 0; + + *flags |= FLAGS_DID_NETBSD_PAX; +- (void)memcpy(&desc, &nbuf[doff], sizeof(desc)); ++ memcpy(&desc, &nbuf[doff], sizeof(desc)); + desc = elf_getu32(swap, desc); + + if (desc && file_printf(ms, ", PaX: ") == -1) +@@ -957,7 +974,7 @@ do_auxv_note(struct magic_set *ms, unsigned char *nbuf, uint32_t type, + + nval = 0; + for (size_t off = 0; off + elsize <= descsz; off += elsize) { +- (void)memcpy(xauxv_addr, &nbuf[doff + off], xauxv_sizeof); ++ memcpy(xauxv_addr, &nbuf[doff + off], xauxv_sizeof); + /* Limit processing to 50 vector entries to prevent DoS */ + if (nval++ >= 50) { + file_error(ms, 0, "Too many ELF Auxv elements"); +@@ -1021,6 +1038,38 @@ do_auxv_note(struct magic_set *ms, unsigned char *nbuf, uint32_t type, + #endif + } + ++private size_t ++dodynamic(struct magic_set *ms, void *vbuf, size_t offset, size_t size, ++ int clazz, int swap) ++{ ++ Elf32_Dyn dh32; ++ Elf64_Dyn dh64; ++ unsigned char *dbuf = CAST(unsigned char *, vbuf); ++ ++ if (xdh_sizeof + offset > size) { ++ /* ++ * We're out of note headers. ++ */ ++ return xdh_sizeof + offset; ++ } ++ ++ memcpy(xdh_addr, &dbuf[offset], xdh_sizeof); ++ offset += xdh_sizeof; ++ ++ switch (xdh_tag) { ++ case DT_FLAGS_1: ++ if (xdh_val == DF_1_PIE) ++ ms->mode |= 0111; ++ else ++ ms->mode &= ~0111; ++ break; ++ default: ++ break; ++ } ++ return offset; ++} ++ ++ + private size_t + donote(struct magic_set *ms, void *vbuf, size_t offset, size_t size, + int clazz, int swap, size_t align, int *flags, uint16_t *notecount, +@@ -1043,7 +1092,7 @@ donote(struct magic_set *ms, void *vbuf, size_t offset, size_t size, + return xnh_sizeof + offset; + } + +- (void)memcpy(xnh_addr, &nbuf[offset], xnh_sizeof); ++ memcpy(xnh_addr, &nbuf[offset], xnh_sizeof); + offset += xnh_sizeof; + + namesz = xnh_namesz; +@@ -1057,14 +1106,14 @@ donote(struct magic_set *ms, void *vbuf, size_t offset, size_t size, + } + + if (namesz & 0x80000000) { +- (void)file_printf(ms, ", bad note name size %#lx", +- (unsigned long)namesz); ++ file_printf(ms, ", bad note name size %#lx", ++ CAST(unsigned long, namesz)); + return 0; + } + + if (descsz & 0x80000000) { +- (void)file_printf(ms, ", bad note description size %#lx", +- (unsigned long)descsz); ++ file_printf(ms, ", bad note description size %#lx", ++ CAST(unsigned long, descsz)); + return 0; + } + +@@ -1118,35 +1167,25 @@ donote(struct magic_set *ms, void *vbuf, size_t offset, size_t size, + return offset; + } + +- if (namesz == 7 && strcmp((char *)&nbuf[noff], "NetBSD") == 0) { ++ if (namesz == 7 && strcmp(CAST(char *, &nbuf[noff]), "NetBSD") == 0) { ++ int descw, flag; ++ const char *str, *tag; + if (descsz > 100) + descsz = 100; + switch (xnh_type) { + case NT_NETBSD_VERSION: + return offset; + case NT_NETBSD_MARCH: +- if (*flags & FLAGS_DID_NETBSD_MARCH) +- return offset; +- *flags |= FLAGS_DID_NETBSD_MARCH; +- if (file_printf(ms, ", compiled for: %.*s", +- (int)descsz, (const char *)&nbuf[doff]) == -1) +- return offset; ++ flag = FLAGS_DID_NETBSD_MARCH; ++ tag = "compiled for"; + break; + case NT_NETBSD_CMODEL: +- if (*flags & FLAGS_DID_NETBSD_CMODEL) +- return offset; +- *flags |= FLAGS_DID_NETBSD_CMODEL; +- if (file_printf(ms, ", compiler model: %.*s", +- (int)descsz, (const char *)&nbuf[doff]) == -1) +- return offset; ++ flag = FLAGS_DID_NETBSD_CMODEL; ++ tag = "compiler model"; + break; + case NT_NETBSD_EMULATION: +- if (*flags & FLAGS_DID_NETBSD_EMULATION) +- return offset; +- *flags |= FLAGS_DID_NETBSD_EMULATION; +- if (file_printf(ms, ", emulation: %.*s", +- (int)descsz, (const char *)&nbuf[doff]) == -1) +- return offset; ++ flag = FLAGS_DID_NETBSD_EMULATION; ++ tag = "emulation:"; + break; + default: + if (*flags & FLAGS_DID_NETBSD_UNKNOWN) +@@ -1154,8 +1193,15 @@ donote(struct magic_set *ms, void *vbuf, size_t offset, size_t size, + *flags |= FLAGS_DID_NETBSD_UNKNOWN; + if (file_printf(ms, ", note=%u", xnh_type) == -1) + return offset; +- break; ++ return offset; + } ++ ++ if (*flags & flag) ++ return offset; ++ str = CAST(const char *, &nbuf[doff]); ++ descw = CAST(int, descsz); ++ *flags |= flag; ++ file_printf(ms, ", %s: %.*s", tag, descw, str); + return offset; + } + +@@ -1236,7 +1282,7 @@ doshn(struct magic_set *ms, int clazz, int swap, int fd, off_t off, int num, + + /* Read offset of name section to be able to read section names later */ + if (pread(fd, xsh_addr, xsh_sizeof, CAST(off_t, (off + size * strtab))) +- < (ssize_t)xsh_sizeof) { ++ < CAST(ssize_t, xsh_sizeof)) { + if (file_printf(ms, ", missing section headers") == -1) + return -1; + return 0; +@@ -1245,7 +1291,8 @@ doshn(struct magic_set *ms, int clazz, int swap, int fd, off_t off, int num, + + for ( ; num; num--) { + /* Read the name of this section. */ +- if ((namesize = pread(fd, name, sizeof(name) - 1, name_off + xsh_name)) == -1) { ++ if ((namesize = pread(fd, name, sizeof(name) - 1, ++ name_off + xsh_name)) == -1) { + file_badread(ms); + return -1; + } +@@ -1255,7 +1302,8 @@ doshn(struct magic_set *ms, int clazz, int swap, int fd, off_t off, int num, + stripped = 0; + } + +- if (pread(fd, xsh_addr, xsh_sizeof, off) < (ssize_t)xsh_sizeof) { ++ if (pread(fd, xsh_addr, xsh_sizeof, off) < ++ CAST(ssize_t, xsh_sizeof)) { + file_badread(ms); + return -1; + } +@@ -1281,14 +1329,15 @@ doshn(struct magic_set *ms, int clazz, int swap, int fd, off_t off, int num, + /* Things we can determine when we seek */ + switch (xsh_type) { + case SHT_NOTE: +- if ((uintmax_t)(xsh_size + xsh_offset) > +- (uintmax_t)fsize) { ++ if (CAST(uintmax_t, (xsh_size + xsh_offset)) > ++ CAST(uintmax_t, fsize)) { + if (file_printf(ms, + ", note offset/size %#" INTMAX_T_FORMAT + "x+%#" INTMAX_T_FORMAT "x exceeds" + " file size %#" INTMAX_T_FORMAT "x", +- (uintmax_t)xsh_offset, (uintmax_t)xsh_size, +- (uintmax_t)fsize) == -1) ++ CAST(uintmax_t, xsh_offset), ++ CAST(uintmax_t, xsh_size), ++ CAST(uintmax_t, fsize)) == -1) + return -1; + return 0; + } +@@ -1298,7 +1347,7 @@ doshn(struct magic_set *ms, int clazz, int swap, int fd, off_t off, int num, + return -1; + } + if (pread(fd, nbuf, xsh_size, xsh_offset) < +- (ssize_t)xsh_size) { ++ CAST(ssize_t, xsh_size)) { + file_badread(ms); + free(nbuf); + return -1; +@@ -1306,9 +1355,9 @@ doshn(struct magic_set *ms, int clazz, int swap, int fd, off_t off, int num, + + noff = 0; + for (;;) { +- if (noff >= (off_t)xsh_size) ++ if (noff >= CAST(off_t, xsh_size)) + break; +- noff = donote(ms, nbuf, (size_t)noff, ++ noff = donote(ms, nbuf, CAST(size_t, noff), + xsh_size, clazz, swap, 4, flags, notecount, + fd, 0, 0, 0); + if (noff == 0) +@@ -1330,7 +1379,8 @@ doshn(struct magic_set *ms, int clazz, int swap, int fd, off_t off, int num, + + if (nbadcap > 5) + break; +- if (lseek(fd, xsh_offset, SEEK_SET) == (off_t)-1) { ++ if (lseek(fd, xsh_offset, SEEK_SET) ++ == CAST(off_t, -1)) { + file_badseek(ms); + return -1; + } +@@ -1339,11 +1389,12 @@ doshn(struct magic_set *ms, int clazz, int swap, int fd, off_t off, int num, + Elf32_Cap cap32; + Elf64_Cap cap64; + char cbuf[/*CONSTCOND*/ +- MAX(sizeof cap32, sizeof cap64)]; +- if ((coff += xcap_sizeof) > (off_t)xsh_size) ++ MAX(sizeof(cap32), sizeof(cap64))]; ++ if ((coff += xcap_sizeof) > ++ CAST(off_t, xsh_size)) + break; +- if (read(fd, cbuf, (size_t)xcap_sizeof) != +- (ssize_t)xcap_sizeof) { ++ if (read(fd, cbuf, CAST(size_t, xcap_sizeof)) != ++ CAST(ssize_t, xcap_sizeof)) { + file_badread(ms); + return -1; + } +@@ -1377,7 +1428,7 @@ doshn(struct magic_set *ms, int clazz, int swap, int fd, off_t off, int num, + #endif + break; + } +- (void)memcpy(xcap_addr, cbuf, xcap_sizeof); ++ memcpy(xcap_addr, cbuf, xcap_sizeof); + switch (xcap_tag) { + case CA_SUNW_NULL: + break; +@@ -1392,8 +1443,9 @@ doshn(struct magic_set *ms, int clazz, int swap, int fd, off_t off, int num, + ", with unknown capability " + "%#" INT64_T_FORMAT "x = %#" + INT64_T_FORMAT "x", +- (unsigned long long)xcap_tag, +- (unsigned long long)xcap_val) == -1) ++ CAST(unsigned long long, xcap_tag), ++ CAST(unsigned long long, xcap_val)) ++ == -1) + return -1; + if (nbadcap++ > 2) + coff = xsh_size; +@@ -1446,12 +1498,12 @@ doshn(struct magic_set *ms, int clazz, int swap, int fd, off_t off, int num, + if (file_printf(ms, + " unknown hardware capability %#" + INT64_T_FORMAT "x", +- (unsigned long long)cap_hw1) == -1) ++ CAST(unsigned long long, cap_hw1)) == -1) + return -1; + } else { + if (file_printf(ms, + " hardware capability %#" INT64_T_FORMAT "x", +- (unsigned long long)cap_hw1) == -1) ++ CAST(unsigned long long, cap_hw1)) == -1) + return -1; + } + } +@@ -1468,7 +1520,7 @@ doshn(struct magic_set *ms, int clazz, int swap, int fd, off_t off, int num, + if (file_printf(ms, + ", with unknown software capability %#" + INT64_T_FORMAT "x", +- (unsigned long long)cap_sf1) == -1) ++ CAST(unsigned long long, cap_sf1)) == -1) + return -1; + } + return 0; +@@ -1487,9 +1539,9 @@ dophn_exec(struct magic_set *ms, int clazz, int swap, int fd, off_t off, + Elf32_Phdr ph32; + Elf64_Phdr ph64; + const char *linking_style = "statically"; +- const char *interp = ""; + unsigned char nbuf[BUFSIZ]; + char ibuf[BUFSIZ]; ++ char interp[BUFSIZ]; + ssize_t bufsize; + size_t offset, align, len; + +@@ -1499,8 +1551,11 @@ dophn_exec(struct magic_set *ms, int clazz, int swap, int fd, off_t off, + return 0; + } + ++ interp[0] = '\0'; + for ( ; num; num--) { +- if (pread(fd, xph_addr, xph_sizeof, off) < (ssize_t)xph_sizeof) { ++ int doread; ++ if (pread(fd, xph_addr, xph_sizeof, off) < ++ CAST(ssize_t, xph_sizeof)) { + file_badread(ms); + return -1; + } +@@ -1513,6 +1568,7 @@ dophn_exec(struct magic_set *ms, int clazz, int swap, int fd, off_t off, + switch (xph_type) { + case PT_DYNAMIC: + linking_style = "dynamically"; ++ doread = 1; + break; + case PT_NOTE: + if (sh_num) /* Did this through section headers */ +@@ -1521,21 +1577,16 @@ dophn_exec(struct magic_set *ms, int clazz, int swap, int fd, off_t off, + align < 4) { + if (file_printf(ms, + ", invalid note alignment %#lx", +- (unsigned long)align) == -1) ++ CAST(unsigned long, align)) == -1) + return -1; + align = 4; + } + /*FALLTHROUGH*/ + case PT_INTERP: +- len = xph_filesz < sizeof(nbuf) ? xph_filesz +- : sizeof(nbuf); +- bufsize = pread(fd, nbuf, len, xph_offset); +- if (bufsize == -1) { +- file_badread(ms); +- return -1; +- } ++ doread = 1; + break; + default: ++ doread = 0; + if (fsize != SIZE_UNKNOWN && xph_offset > fsize) { + /* Maybe warn here? */ + continue; +@@ -1543,14 +1594,39 @@ dophn_exec(struct magic_set *ms, int clazz, int swap, int fd, off_t off, + break; + } + ++ if (doread) { ++ len = xph_filesz < sizeof(nbuf) ? xph_filesz ++ : sizeof(nbuf); ++ bufsize = pread(fd, nbuf, len, xph_offset); ++ if (bufsize == -1) { ++ file_badread(ms); ++ return -1; ++ } ++ } else ++ len = 0; ++ + /* Things we can determine when we seek */ + switch (xph_type) { ++ case PT_DYNAMIC: ++ offset = 0; ++ for (;;) { ++ if (offset >= (size_t)bufsize) ++ break; ++ offset = dodynamic(ms, nbuf, offset, ++ CAST(size_t, bufsize), clazz, swap); ++ if (offset == 0) ++ break; ++ } ++ if (ms->flags & MAGIC_MIME) ++ continue; ++ break; ++ + case PT_INTERP: + if (bufsize && nbuf[0]) { + nbuf[bufsize - 1] = '\0'; +- interp = (const char *)nbuf; ++ memcpy(interp, nbuf, bufsize); + } else +- interp = "*empty*"; ++ strlcpy(interp, "*empty*", sizeof(interp)); + break; + case PT_NOTE: + /* +@@ -1562,7 +1638,7 @@ dophn_exec(struct magic_set *ms, int clazz, int swap, int fd, off_t off, + if (offset >= (size_t)bufsize) + break; + offset = donote(ms, nbuf, offset, +- (size_t)bufsize, clazz, swap, align, ++ CAST(size_t, bufsize), clazz, swap, align, + flags, notecount, fd, 0, 0, 0); + if (offset == 0) + break; +@@ -1591,7 +1667,7 @@ file_tryelf(struct magic_set *ms, const struct buffer *b) + size_t nbytes = b->flen; + union { + int32_t l; +- char c[sizeof (int32_t)]; ++ char c[sizeof(int32_t)]; + } u; + int clazz; + int swap; +@@ -1619,7 +1695,8 @@ file_tryelf(struct magic_set *ms, const struct buffer *b) + /* + * If we cannot seek, it must be a pipe, socket or fifo. + */ +- if((lseek(fd, (off_t)0, SEEK_SET) == (off_t)-1) && (errno == ESPIPE)) ++ if((lseek(fd, CAST(off_t, 0), SEEK_SET) == CAST(off_t, -1)) ++ && (errno == ESPIPE)) + fd = file_pipe2file(ms, fd, buf, nbytes); + + if (fstat(fd, &st) == -1) { +diff --git a/src/readelf.h b/src/readelf.h +index ef880b9..f2f3dc3 100644 +--- a/src/readelf.h ++++ b/src/readelf.h +@@ -430,4 +430,107 @@ typedef struct { + #define AV_386_SSE4_1 0x00800000 + #define AV_386_SSE4_2 0x01000000 + ++/* ++ * Dynamic Section structure array ++ */ ++typedef struct { ++ Elf32_Word d_tag; /* entry tag value */ ++ union { ++ Elf32_Addr d_ptr; ++ Elf32_Word d_val; ++ } d_un; ++} Elf32_Dyn; ++ ++typedef struct { ++ Elf64_Xword d_tag; /* entry tag value */ ++ union { ++ Elf64_Addr d_ptr; ++ Elf64_Xword d_val; ++ } d_un; ++} Elf64_Dyn; ++ ++/* d_tag */ ++#define DT_NULL 0 /* Marks end of dynamic array */ ++#define DT_NEEDED 1 /* Name of needed library (DT_STRTAB offset) */ ++#define DT_PLTRELSZ 2 /* Size, in bytes, of relocations in PLT */ ++#define DT_PLTGOT 3 /* Address of PLT and/or GOT */ ++#define DT_HASH 4 /* Address of symbol hash table */ ++#define DT_STRTAB 5 /* Address of string table */ ++#define DT_SYMTAB 6 /* Address of symbol table */ ++#define DT_RELA 7 /* Address of Rela relocation table */ ++#define DT_RELASZ 8 /* Size, in bytes, of DT_RELA table */ ++#define DT_RELAENT 9 /* Size, in bytes, of one DT_RELA entry */ ++#define DT_STRSZ 10 /* Size, in bytes, of DT_STRTAB table */ ++#define DT_SYMENT 11 /* Size, in bytes, of one DT_SYMTAB entry */ ++#define DT_INIT 12 /* Address of initialization function */ ++#define DT_FINI 13 /* Address of termination function */ ++#define DT_SONAME 14 /* Shared object name (DT_STRTAB offset) */ ++#define DT_RPATH 15 /* Library search path (DT_STRTAB offset) */ ++#define DT_SYMBOLIC 16 /* Start symbol search within local object */ ++#define DT_REL 17 /* Address of Rel relocation table */ ++#define DT_RELSZ 18 /* Size, in bytes, of DT_REL table */ ++#define DT_RELENT 19 /* Size, in bytes, of one DT_REL entry */ ++#define DT_PLTREL 20 /* Type of PLT relocation entries */ ++#define DT_DEBUG 21 /* Used for debugging; unspecified */ ++#define DT_TEXTREL 22 /* Relocations might modify non-writable seg */ ++#define DT_JMPREL 23 /* Address of relocations associated with PLT */ ++#define DT_BIND_NOW 24 /* Process all relocations at load-time */ ++#define DT_INIT_ARRAY 25 /* Address of initialization function array */ ++#define DT_FINI_ARRAY 26 /* Size, in bytes, of DT_INIT_ARRAY array */ ++#define DT_INIT_ARRAYSZ 27 /* Address of termination function array */ ++#define DT_FINI_ARRAYSZ 28 /* Size, in bytes, of DT_FINI_ARRAY array*/ ++#define DT_RUNPATH 29 /* overrides DT_RPATH */ ++#define DT_FLAGS 30 /* Encodes ORIGIN, SYMBOLIC, TEXTREL, BIND_NOW, STATIC_TLS */ ++#define DT_ENCODING 31 /* ??? */ ++#define DT_PREINIT_ARRAY 32 /* Address of pre-init function array */ ++#define DT_PREINIT_ARRAYSZ 33 /* Size, in bytes, of DT_PREINIT_ARRAY array */ ++#define DT_NUM 34 ++ ++#define DT_LOOS 0x60000000 /* Operating system specific range */ ++#define DT_VERSYM 0x6ffffff0 /* Symbol versions */ ++#define DT_FLAGS_1 0x6ffffffb /* ELF dynamic flags */ ++#define DT_VERDEF 0x6ffffffc /* Versions defined by file */ ++#define DT_VERDEFNUM 0x6ffffffd /* Number of versions defined by file */ ++#define DT_VERNEED 0x6ffffffe /* Versions needed by file */ ++#define DT_VERNEEDNUM 0x6fffffff /* Number of versions needed by file */ ++#define DT_HIOS 0x6fffffff ++#define DT_LOPROC 0x70000000 /* Processor-specific range */ ++#define DT_HIPROC 0x7fffffff ++ ++/* Flag values for DT_FLAGS */ ++#define DF_ORIGIN 0x00000001 /* uses $ORIGIN */ ++#define DF_SYMBOLIC 0x00000002 /* */ ++#define DF_TEXTREL 0x00000004 /* */ ++#define DF_BIND_NOW 0x00000008 /* */ ++#define DF_STATIC_TLS 0x00000010 /* */ ++ ++/* Flag values for DT_FLAGS_1 */ ++#define DF_1_NOW 0x00000001 /* Same as DF_BIND_NOW */ ++#define DF_1_GLOBAL 0x00000002 /* Unused */ ++#define DF_1_GROUP 0x00000004 /* Is member of group */ ++#define DF_1_NODELETE 0x00000008 /* Cannot be deleted from process */ ++#define DF_1_LOADFLTR 0x00000010 /* Immediate loading of filters */ ++#define DF_1_INITFIRST 0x00000020 /* init/fini takes priority */ ++#define DF_1_NOOPEN 0x00000040 /* Do not allow loading on dlopen() */ ++#define DF_1_ORIGIN 0x00000080 /* Require $ORIGIN processing */ ++#define DF_1_DIRECT 0x00000100 /* Enable direct bindings */ ++#define DF_1_INTERPOSE 0x00000400 /* Is an interposer */ ++#define DF_1_NODEFLIB 0x00000800 /* Ignore default library search path */ ++#define DF_1_NODUMP 0x00001000 /* Cannot be dumped with dldump(3C) */ ++#define DF_1_CONFALT 0x00002000 /* Configuration alternative */ ++#define DF_1_ENDFILTEE 0x00004000 /* Filtee ends filter's search */ ++#define DF_1_DISPRELDNE 0x00008000 /* Did displacement relocation */ ++#define DF_1_DISPRELPND 0x00010000 /* Pending displacement relocation */ ++#define DF_1_NODIRECT 0x00020000 /* Has non-direct bindings */ ++#define DF_1_IGNMULDEF 0x00040000 /* Used internally */ ++#define DF_1_NOKSYMS 0x00080000 /* Used internally */ ++#define DF_1_NOHDR 0x00100000 /* Used internally */ ++#define DF_1_EDITED 0x00200000 /* Has been modified since build */ ++#define DF_1_NORELOC 0x00400000 /* Used internally */ ++#define DF_1_SYMINTPOSE 0x00800000 /* Has individual symbol interposers */ ++#define DF_1_GLOBAUDIT 0x01000000 /* Require global auditing */ ++#define DF_1_SINGLETON 0x02000000 /* Has singleton symbols */ ++#define DF_1_STUB 0x04000000 /* Stub */ ++#define DF_1_PIE 0x08000000 /* Position Independent Executable */ ++ + #endif +-- +2.39.1 + diff --git a/SOURCES/file-5.33-static-PIE-binaries-2.patch b/SOURCES/file-5.33-static-PIE-binaries-2.patch new file mode 100644 index 0000000..85446ae --- /dev/null +++ b/SOURCES/file-5.33-static-PIE-binaries-2.patch @@ -0,0 +1,68 @@ +From f8ba1437114e408de0f66efb272fdc1de986017a Mon Sep 17 00:00:00 2001 +From: Vincent Mihalkovic +Date: Mon, 6 Feb 2023 14:39:58 +0100 +Subject: [PATCH] We need to process the dynamic section so that we can set $x + for mime. + +9ffbd485ba4647827c4bdacf3a2de690f6765b0c +--- + src/readelf.c | 12 +++++++++++- + 1 file changed, 11 insertions(+), 1 deletion(-) + +diff --git a/src/readelf.c b/src/readelf.c +index cdc211f..94cdaca 100644 +--- a/src/readelf.c ++++ b/src/readelf.c +@@ -1273,6 +1273,8 @@ doshn(struct magic_set *ms, int clazz, int swap, int fd, off_t off, int num, + uint64_t cap_sf1 = 0; /* SunOS 5.x software capabilities */ + char name[50]; + ssize_t namesize; ++ if (ms->flags & MAGIC_MIME) ++ return 0; + + if (size != xsh_sizeof) { + if (file_printf(ms, ", corrupted section header size") == -1) +@@ -1622,6 +1624,8 @@ dophn_exec(struct magic_set *ms, int clazz, int swap, int fd, off_t off, + break; + + case PT_INTERP: ++ if (ms->flags & MAGIC_MIME) ++ continue; + if (bufsize && nbuf[0]) { + nbuf[bufsize - 1] = '\0'; + memcpy(interp, nbuf, bufsize); +@@ -1629,6 +1633,8 @@ dophn_exec(struct magic_set *ms, int clazz, int swap, int fd, off_t off, + strlcpy(interp, "*empty*", sizeof(interp)); + break; + case PT_NOTE: ++ if (ms->flags & MAGIC_MIME) ++ return 0; + /* + * This is a PT_NOTE section; loop through all the notes + * in the section. +@@ -1645,9 +1651,13 @@ dophn_exec(struct magic_set *ms, int clazz, int swap, int fd, off_t off, + } + break; + default: ++ if (ms->flags & MAGIC_MIME) ++ continue; + break; + } + } ++ if (ms->flags & MAGIC_MIME) ++ return 0; + if (file_printf(ms, ", %s linked", linking_style) + == -1) + return -1; +@@ -1678,7 +1688,7 @@ file_tryelf(struct magic_set *ms, const struct buffer *b) + Elf64_Ehdr elf64hdr; + uint16_t type, phnum, shnum, notecount; + +- if (ms->flags & (MAGIC_MIME|MAGIC_APPLE|MAGIC_EXTENSION)) ++ if (ms->flags & (MAGIC_APPLE|MAGIC_EXTENSION)) + return 0; + /* + * ELF executables have multiple section headers in arbitrary +-- +2.39.1 + diff --git a/SOURCES/file-5.33-static-PIE-binaries-3.patch b/SOURCES/file-5.33-static-PIE-binaries-3.patch new file mode 100644 index 0000000..13314a1 --- /dev/null +++ b/SOURCES/file-5.33-static-PIE-binaries-3.patch @@ -0,0 +1,36 @@ +From 27c951adbd5d7ebe95f08c18257ea031bdd59ee1 Mon Sep 17 00:00:00 2001 +From: Vincent Mihalkovic +Date: Mon, 6 Feb 2023 15:00:16 +0100 +Subject: [PATCH] For dynamic binaries let the df_1 pie flag determine if we + are pie or a shared object, and ignore the mode bits. + +upstream commit: 03084b161cf888b5286dbbcd964c31ccad4f64d9 +--- + src/readelf.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/src/readelf.c b/src/readelf.c +index 94cdaca..9c75c0a 100644 +--- a/src/readelf.c ++++ b/src/readelf.c +@@ -1058,7 +1058,7 @@ dodynamic(struct magic_set *ms, void *vbuf, size_t offset, size_t size, + + switch (xdh_tag) { + case DT_FLAGS_1: +- if (xdh_val == DF_1_PIE) ++ if (xdh_val & DF_1_PIE) + ms->mode |= 0111; + else + ms->mode &= ~0111; +@@ -1611,6 +1611,8 @@ dophn_exec(struct magic_set *ms, int clazz, int swap, int fd, off_t off, + switch (xph_type) { + case PT_DYNAMIC: + offset = 0; ++ // Let DF_1 determine if we are PIE or not. ++ ms->mode &= ~0111; + for (;;) { + if (offset >= (size_t)bufsize) + break; +-- +2.39.1 + diff --git a/SOURCES/file-5.33-static-PIE-binaries-4.patch b/SOURCES/file-5.33-static-PIE-binaries-4.patch new file mode 100644 index 0000000..03cf938 --- /dev/null +++ b/SOURCES/file-5.33-static-PIE-binaries-4.patch @@ -0,0 +1,125 @@ +From 948d0e24f33c3b411b5ec1e320acec889e6781b8 Mon Sep 17 00:00:00 2001 +From: Vincent Mihalkovic +Date: Mon, 6 Feb 2023 15:04:33 +0100 +Subject: [PATCH] Improve detection of static-pie binaries, and don't call them + "dynamically linked", but call them "static-pie" linked. + +363d7fcf703ad3ebf37b45693b2c9e43eb8b4176 +--- + src/readelf.c | 35 +++++++++++++++++++++++++---------- + 1 file changed, 25 insertions(+), 10 deletions(-) + +diff --git a/src/readelf.c b/src/readelf.c +index 9c75c0a..0011659 100644 +--- a/src/readelf.c ++++ b/src/readelf.c +@@ -1040,7 +1040,7 @@ do_auxv_note(struct magic_set *ms, unsigned char *nbuf, uint32_t type, + + private size_t + dodynamic(struct magic_set *ms, void *vbuf, size_t offset, size_t size, +- int clazz, int swap) ++ int clazz, int swap, int *pie, size_t *need) + { + Elf32_Dyn dh32; + Elf64_Dyn dh64; +@@ -1058,11 +1058,15 @@ dodynamic(struct magic_set *ms, void *vbuf, size_t offset, size_t size, + + switch (xdh_tag) { + case DT_FLAGS_1: ++ *pie = 1; + if (xdh_val & DF_1_PIE) + ms->mode |= 0111; + else + ms->mode &= ~0111; + break; ++ case DT_NEEDED: ++ (*need)++; ++ break; + default: + break; + } +@@ -1529,9 +1533,10 @@ doshn(struct magic_set *ms, int clazz, int swap, int fd, off_t off, int num, + } + + /* +- * Look through the program headers of an executable image, searching +- * for a PT_INTERP section; if one is found, it's dynamically linked, +- * otherwise it's statically linked. ++ * Look through the program headers of an executable image, to determine ++ * if it is statically or dynamically linked. If it has a dynamic section, ++ * it is pie, and does not have an interpreter or needed libraries, we ++ * call it static pie. + */ + private int + dophn_exec(struct magic_set *ms, int clazz, int swap, int fd, off_t off, +@@ -1540,12 +1545,13 @@ dophn_exec(struct magic_set *ms, int clazz, int swap, int fd, off_t off, + { + Elf32_Phdr ph32; + Elf64_Phdr ph64; +- const char *linking_style = "statically"; ++ const char *linking_style; + unsigned char nbuf[BUFSIZ]; + char ibuf[BUFSIZ]; + char interp[BUFSIZ]; + ssize_t bufsize; +- size_t offset, align, len; ++ size_t offset, align, len, need = 0; ++ int pie = 0, dynamic = 0; + + if (size != xph_sizeof) { + if (file_printf(ms, ", corrupted program header size") == -1) +@@ -1569,7 +1575,6 @@ dophn_exec(struct magic_set *ms, int clazz, int swap, int fd, off_t off, + /* Things we can determine before we seek */ + switch (xph_type) { + case PT_DYNAMIC: +- linking_style = "dynamically"; + doread = 1; + break; + case PT_NOTE: +@@ -1610,6 +1615,7 @@ dophn_exec(struct magic_set *ms, int clazz, int swap, int fd, off_t off, + /* Things we can determine when we seek */ + switch (xph_type) { + case PT_DYNAMIC: ++ dynamic = 1; + offset = 0; + // Let DF_1 determine if we are PIE or not. + ms->mode &= ~0111; +@@ -1617,7 +1623,8 @@ dophn_exec(struct magic_set *ms, int clazz, int swap, int fd, off_t off, + if (offset >= (size_t)bufsize) + break; + offset = dodynamic(ms, nbuf, offset, +- CAST(size_t, bufsize), clazz, swap); ++ CAST(size_t, bufsize), clazz, swap, ++ &pie, &need); + if (offset == 0) + break; + } +@@ -1626,6 +1633,7 @@ dophn_exec(struct magic_set *ms, int clazz, int swap, int fd, off_t off, + break; + + case PT_INTERP: ++ need++; + if (ms->flags & MAGIC_MIME) + continue; + if (bufsize && nbuf[0]) { +@@ -1660,8 +1668,15 @@ dophn_exec(struct magic_set *ms, int clazz, int swap, int fd, off_t off, + } + if (ms->flags & MAGIC_MIME) + return 0; +- if (file_printf(ms, ", %s linked", linking_style) +- == -1) ++ if (dynamic) { ++ if (pie && need == 0) ++ linking_style = "static-pie"; ++ else ++ linking_style = "dynamically"; ++ } else { ++ linking_style = "statically"; ++ } ++ if (file_printf(ms, ", %s linked", linking_style) == -1) + return -1; + if (interp[0]) + if (file_printf(ms, ", interpreter %s", +-- +2.39.1 + diff --git a/SOURCES/file-5.33-static-PIE-binaries-5.patch b/SOURCES/file-5.33-static-PIE-binaries-5.patch new file mode 100644 index 0000000..6597ac1 --- /dev/null +++ b/SOURCES/file-5.33-static-PIE-binaries-5.patch @@ -0,0 +1,13 @@ +diff --git a/src/readelf.c b/src/readelf.c +index d836e68..6d4b40b 100644 +--- a/src/readelf.c ++++ b/src/readelf.c +@@ -69,7 +69,7 @@ toomany(struct magic_set *ms, const char *name, uint16_t num) + { + if (file_printf(ms, ", too many %s (%u)", name, num) == -1) + return -1; +- return 0; ++ return 1; + } + + private uint16_t diff --git a/SOURCES/file-5.33-thermocam-magic.patch b/SOURCES/file-5.33-thermocam-magic.patch new file mode 100644 index 0000000..38a1156 --- /dev/null +++ b/SOURCES/file-5.33-thermocam-magic.patch @@ -0,0 +1,49 @@ +diff --git a/magic/Magdir/measure b/magic/Magdir/measure +index f23c1d6..963d85f 100644 +--- a/magic/Magdir/measure ++++ b/magic/Magdir/measure +@@ -8,31 +8,31 @@ + >0 beshort x scale %d- + >2 beshort x \b%d, + >4 lefloat x spot sensor temperature %f, +->9 byte 0 unit celsius, +->9 byte 1 unit fahrenheit, +->8 byte x color scheme %d +->10 byte 1 \b, show spot sensor +->11 byte 1 \b, show scale bar +->12 byte &1 \b, minimum point enabled +->12 byte &2 \b, maximum point enabled ++>9 ubyte 0 unit celsius, ++>9 ubyte 1 unit fahrenheit, ++>8 ubyte x color scheme %d ++>10 ubyte 1 \b, show spot sensor ++>11 ubyte 1 \b, show scale bar ++>12 ubyte &1 \b, minimum point enabled ++>12 ubyte &2 \b, maximum point enabled + >13 lefloat x \b, calibration: offset %f, + >17 lefloat x slope %f + + 0 name diy-thermocam-checker +->9 byte <2 +->>10 byte <2 +->>>11 byte <2 +->>>>12 byte <4 ++>9 ubyte <2 ++>>10 ubyte <2 ++>>>11 ubyte <2 ++>>>>12 ubyte <4 + >>>>>17 lefloat >0.0001 DIY-Thermocam raw data + + # V2 and Leption 3.x: +-38408 byte <19 ++38408 ubyte <19 + >38400 use diy-thermocam-checker + >>38400 default x (Lepton 3.x), + >>>38400 use diy-thermocam-parser + + # V1 or Lepton 2.x +-9608 byte <19 ++9608 ubyte <19 + >9600 use diy-thermocam-checker + >>9600 default x (Lepton 2.x), + >>>9600 use diy-thermocam-parser diff --git a/SOURCES/file-5.33-whitespace-compare.patch b/SOURCES/file-5.33-whitespace-compare.patch new file mode 100644 index 0000000..8e035a0 --- /dev/null +++ b/SOURCES/file-5.33-whitespace-compare.patch @@ -0,0 +1,14 @@ +diff -urp file-5.33.orig/src/softmagic.c file-5.33/src/softmagic.c +--- file-5.33.orig/src/softmagic.c 2018-04-15 14:49:15.000000000 -0400 ++++ file-5.33/src/softmagic.c 2020-12-14 12:21:13.298285158 -0500 +@@ -1758,7 +1758,9 @@ file_strncmp(const char *s1, const char + */ + const unsigned char *a = (const unsigned char *)s1; + const unsigned char *b = (const unsigned char *)s2; +- const unsigned char *eb = b + len; ++ uint32_t ws = flags & (STRING_COMPACT_WHITESPACE | ++ STRING_COMPACT_OPTIONAL_WHITESPACE); ++ const unsigned char *eb = b + (ws ? strlen(s2) : len); + uint64_t v; + + /* diff --git a/SOURCES/file-5.34-ebpf-magic.patch b/SOURCES/file-5.34-ebpf-magic.patch new file mode 100644 index 0000000..abcadf8 --- /dev/null +++ b/SOURCES/file-5.34-ebpf-magic.patch @@ -0,0 +1,26 @@ +From b675e1cf6c5f047a1ab52b7dcea3c83ea6aac69f Mon Sep 17 00:00:00 2001 +From: Christos Zoulas +Date: Fri, 9 Nov 2018 17:51:12 +0000 +Subject: [PATCH] Add eBPF magic from Matteo Croce + +Upstream-commit: 4cf4e817457ce6ca32452a7c80b27e96be6441dc +Signed-off-by: Kamil Dudka +--- + magic/Magdir/elf | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/magic/Magdir/elf b/magic/Magdir/elf +index 133bd1f..7c6011c 100644 +--- a/magic/Magdir/elf ++++ b/magic/Magdir/elf +@@ -263,6 +263,7 @@ + >18 leshort 217 iCelero CoolEngine, + >18 leshort 218 Nanoradio Optimized RISC, + >18 leshort 243 UCB RISC-V, ++>18 leshort 247 eBPF, + >18 leshort 0x1057 AVR (unofficial), + >18 leshort 0x1059 MSP430 (unofficial), + >18 leshort 0x1223 Adapteva Epiphany (unofficial), +-- +2.17.2 + diff --git a/SOURCES/file-5.35-man-apple.patch b/SOURCES/file-5.35-man-apple.patch new file mode 100644 index 0000000..78b0fdf --- /dev/null +++ b/SOURCES/file-5.35-man-apple.patch @@ -0,0 +1,56 @@ +From 5bccda402a33b4b6fee13cbc910580a85f1ab73a Mon Sep 17 00:00:00 2001 +From: Christos Zoulas +Date: Mon, 18 Feb 2019 18:59:25 +0000 +Subject: [PATCH 1/2] Mention that the apple filetype/creator is only available for + entries that have it (Kamil Dudka) + +Upstream-commit: 642f269ef99930b44daa2236908da7d05a68eb08 +Signed-off-by: Kamil Dudka +--- + doc/file.man | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/doc/file.man b/doc/file.man +index 0968321..98061ba 100644 +--- a/doc/file.man ++++ b/doc/file.man +@@ -171,6 +171,9 @@ Causes the file command to output the file type and creator code as + used by older MacOS versions. + The code consists of eight letters, + the first describing the file type, the latter the creator. ++the first describing the file type, the latter the creator. ++This option works properly only for file formats that have the ++apple-style output defined. + .It Fl b , Fl Fl brief + Do not prepend filenames to output lines (brief mode). + .It Fl C , Fl Fl compile +-- +2.20.1 + + +From f7f3e751c0e606592b4d377a479b40f6964705ab Mon Sep 17 00:00:00 2001 +From: Christos Zoulas +Date: Sun, 3 Mar 2019 02:32:40 +0000 +Subject: [PATCH 2/2] remove duplicate line (chefe) + +Upstream-commit: cde5f5962ebfd057fc2e330da3b36470e6ee3724 +Signed-off-by: Kamil Dudka +--- + doc/file.man | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/doc/file.man b/doc/file.man +index 98061ba..05da3a7 100644 +--- a/doc/file.man ++++ b/doc/file.man +@@ -171,7 +171,6 @@ Causes the file command to output the file type and creator code as + used by older MacOS versions. + The code consists of eight letters, + the first describing the file type, the latter the creator. +-the first describing the file type, the latter the creator. + This option works properly only for file formats that have the + apple-style output defined. + .It Fl b , Fl Fl brief +-- +2.21.1 + diff --git a/SOURCES/file-5.35-netpbm.patch b/SOURCES/file-5.35-netpbm.patch new file mode 100644 index 0000000..1ae9637 --- /dev/null +++ b/SOURCES/file-5.35-netpbm.patch @@ -0,0 +1,67 @@ +From b3842fb61c829b0b62e7b8a058b8a86cd83aa0e7 Mon Sep 17 00:00:00 2001 +From: Christos Zoulas +Date: Tue, 22 Jan 2019 16:17:25 +0000 +Subject: [PATCH] Make netpbm beat DOS/MBR magic again (Kamil Dudka) + +Upstream-commit: d2f82e2601e551badc03c4ac7a463d8e18f53e32 +Signed-off-by: Kamil Dudka +--- + magic/Magdir/images | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +diff --git a/magic/Magdir/images b/magic/Magdir/images +index fd20261..afe906c 100644 +--- a/magic/Magdir/images ++++ b/magic/Magdir/images +@@ -175,42 +175,42 @@ + >0 regex/4 P1[\040\t\f\r\n] + >>0 use netpbm + >>>0 string x \b, bitmap +-!:strength + 45 ++!:strength + 65 + !:mime image/x-portable-bitmap + + 0 search/1 P2 + >0 regex/4 P2[\040\t\f\r\n] + >>0 use netpbm + >>>0 string x \b, greymap +-!:strength + 45 ++!:strength + 65 + !:mime image/x-portable-greymap + + 0 search/1 P3 + >0 regex/4 P3[\040\t\f\r\n] + >>0 use netpbm + >>>0 string x \b, pixmap +-!:strength + 45 ++!:strength + 65 + !:mime image/x-portable-pixmap + + 0 string P4 + >0 regex/4 P4[\040\t\f\r\n] + >>0 use netpbm + >>>0 string x \b, rawbits, bitmap +-!:strength + 45 ++!:strength + 65 + !:mime image/x-portable-bitmap + + 0 string P5 + >0 regex/4 P5[\040\t\f\r\n] + >>0 use netpbm + >>>0 string x \b, rawbits, greymap +-!:strength + 45 ++!:strength + 65 + !:mime image/x-portable-greymap + + 0 string P6 + >0 regex/4 P6[\040\t\f\r\n] + >>0 use netpbm + >>>0 string x \b, rawbits, pixmap +-!:strength + 45 ++!:strength + 65 + !:mime image/x-portable-pixmap + + 0 string P7 Netpbm PAM image file +-- +2.20.1 + diff --git a/SOURCES/file-5.35-ppc-core.patch b/SOURCES/file-5.35-ppc-core.patch new file mode 100644 index 0000000..1c8a9e7 --- /dev/null +++ b/SOURCES/file-5.35-ppc-core.patch @@ -0,0 +1,62 @@ +From 7a4b49897c3bc63bdf680f8cb1d7a04ac932a4ff Mon Sep 17 00:00:00 2001 +From: Christos Zoulas +Date: Mon, 21 May 2018 16:32:34 +0000 +Subject: [PATCH 1/2] Add missing commas. + +Upstream-commit: defcf7e39943780dd19ca002c478e52ec9ee5cbc +Signed-off-by: Kamil Dudka +--- + magic/Magdir/elf | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/magic/Magdir/elf b/magic/Magdir/elf +index 7c6ac8f..d5b2d02 100644 +--- a/magic/Magdir/elf ++++ b/magic/Magdir/elf +@@ -50,7 +50,7 @@ + !:mime application/x-executable + >16 leshort 3 shared object, + !:mime application/x-sharedlib +->16 leshort 4 core file ++>16 leshort 4 core file, + !:mime application/x-coredump + # Core file detection is not reliable. + #>>>(0x38+0xcc) string >\0 of '%s' +-- +2.20.1 + + +From 1c7aa7b88ef9f53e19a64961867427b0c1f04857 Mon Sep 17 00:00:00 2001 +From: Christos Zoulas +Date: Tue, 22 Jan 2019 16:28:42 +0000 +Subject: [PATCH 2/2] Add Linux PowerPC core offsets for Linux (which are off-by-4 + of the regular offsets), after the regular Linux offsets so that there is no + confusion. The linux offsets are tried first since they are before, so on PPC + they should contain binary data and not match. Addition requested by: Ondrej + Dubaj/Kamil Dudka + +Upstream-commit: 6367a7c9b476767a692f76e78e3b355dc9386e48 +Signed-off-by: Kamil Dudka +--- + src/readelf.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/src/readelf.c b/src/readelf.c +index d96a538..c101483 100644 +--- a/src/readelf.c ++++ b/src/readelf.c +@@ -246,7 +246,10 @@ static const size_t prpsoffsets32[] = { + 84, /* SunOS 5.x (short name) */ + + 44, /* Linux (command line) */ +- 28, /* Linux 2.0.36 (short name) */ ++ 28, /* Linux (short name) */ ++ ++ 48, /* Linux PowerPC (command line) */ ++ 32, /* Linux PowerPC (short name) */ + + 8, /* FreeBSD */ + }; +-- +2.20.1 + diff --git a/SOURCES/file-5.37-CVE-2019-18218.patch b/SOURCES/file-5.37-CVE-2019-18218.patch new file mode 100644 index 0000000..89b9bde --- /dev/null +++ b/SOURCES/file-5.37-CVE-2019-18218.patch @@ -0,0 +1,52 @@ +From f73ad90e797824569008a054bea6c8215883a3a0 Mon Sep 17 00:00:00 2001 +From: Christos Zoulas +Date: Mon, 26 Aug 2019 14:31:39 +0000 +Subject: [PATCH] Limit the number of elements in a vector (found by oss-fuzz) + +Upstream-commit: 46a8443f76cec4b41ec736eca396984c74664f84 +Signed-off-by: Kamil Dudka +--- + src/cdf.c | 7 +++---- + src/cdf.h | 1 + + 2 files changed, 4 insertions(+), 4 deletions(-) + +diff --git a/src/cdf.c b/src/cdf.c +index 556a3ff..8bb0a6d 100644 +--- a/src/cdf.c ++++ b/src/cdf.c +@@ -1013,8 +1013,9 @@ cdf_read_property_info(const cdf_stream_t *sst, const cdf_header_t *h, + goto out; + } + nelements = CDF_GETUINT32(q, 1); +- if (nelements == 0) { +- DPRINTF(("CDF_VECTOR with nelements == 0\n")); ++ if (nelements > CDF_ELEMENT_LIMIT || nelements == 0) { ++ DPRINTF(("CDF_VECTOR with nelements == %" ++ SIZE_T_FORMAT "u\n", nelements)); + goto out; + } + slen = 2; +@@ -1056,8 +1057,6 @@ cdf_read_property_info(const cdf_stream_t *sst, const cdf_header_t *h, + goto out; + inp += nelem; + } +- DPRINTF(("nelements = %" SIZE_T_FORMAT "u\n", +- nelements)); + for (j = 0; j < nelements && i < sh.sh_properties; + j++, i++) + { +diff --git a/src/cdf.h b/src/cdf.h +index 2f7e554..0505666 100644 +--- a/src/cdf.h ++++ b/src/cdf.h +@@ -48,6 +48,7 @@ + typedef int32_t cdf_secid_t; + + #define CDF_LOOP_LIMIT 10000 ++#define CDF_ELEMENT_LIMIT 100000 + + #define CDF_SECID_NULL 0 + #define CDF_SECID_FREE -1 +-- +2.20.1 + diff --git a/SOURCES/file-5.37-jffs-magic.patch b/SOURCES/file-5.37-jffs-magic.patch new file mode 100644 index 0000000..1c25151 --- /dev/null +++ b/SOURCES/file-5.37-jffs-magic.patch @@ -0,0 +1,40 @@ +From 432267e707aca36bec55704fd404fa572e2c4b45 Mon Sep 17 00:00:00 2001 +From: Christos Zoulas +Date: Fri, 15 Nov 2019 23:49:38 +0000 +Subject: [PATCH] fix JFFS2 (the old magic was just hex encoded 0x1984 which is + wrong (Kamil Dudka) + +Upstream-commit: 5ad78c726bb03e0fbdb6d237ef2b13e51968ffea +Signed-off-by: Kamil Dudka +--- + magic/Magdir/filesystems | 6 ++---- + 1 file changed, 2 insertions(+), 4 deletions(-) + +diff --git a/magic/Magdir/filesystems b/magic/Magdir/filesystems +index 1920e56..da5c580 100644 +--- a/magic/Magdir/filesystems ++++ b/magic/Magdir/filesystems +@@ -2057,10 +2057,6 @@ + >0x10040 lelong 2 yura hash + >0x10040 lelong 3 r5 hash + +-# JFFS - russell@coker.com.au +-0 lelong 0x34383931 Linux Journalled Flash File system, little endian +-0 belong 0x34383931 Linux Journalled Flash File system, big endian +- + # EST flat binary format (which isn't, but anyway) + # From: Mark Brown + 0 string ESTFBINR EST flat binary +@@ -2144,7 +2140,9 @@ + + # JFFS2 file system + 0 leshort 0x1984 Linux old jffs2 filesystem data little endian ++0 beshort 0x1984 Linux old jffs2 filesystem data big endian + 0 leshort 0x1985 Linux jffs2 filesystem data little endian ++0 beshort 0x1985 Linux jffs2 filesystem data big endian + + # Squashfs + 0 string sqsh Squashfs filesystem, big endian, +-- +2.20.1 + diff --git a/SOURCES/file-5.41-python-magic-threads.patch b/SOURCES/file-5.41-python-magic-threads.patch new file mode 100644 index 0000000..9636840 --- /dev/null +++ b/SOURCES/file-5.41-python-magic-threads.patch @@ -0,0 +1,77 @@ +diff --git a/python/magic.py b/python/magic.py +index 662569e..2be58cd 100644 +--- a/python/magic.py ++++ b/python/magic.py +@@ -5,6 +5,7 @@ Python bindings for libmagic + ''' + + import ctypes ++import threading + + from collections import namedtuple + +@@ -241,11 +242,25 @@ def open(flags): + + + # Objects used by `detect_from_` functions +-mime_magic = Magic(_open(MAGIC_MIME)) +-mime_magic.load() +-none_magic = Magic(_open(MAGIC_NONE)) +-none_magic.load() +- ++class MagicDetect(object): ++ def __init__(self): ++ self.mime_magic = Magic(_open(MAGIC_MIME)) ++ self.mime_magic.load() ++ self.none_magic = Magic(_open(MAGIC_NONE)) ++ self.none_magic.load() ++ ++ def __del__(self): ++ self.mime_magic.close() ++ self.none_magic.close() ++ ++threadlocal = threading.local() ++ ++def _detect_make(): ++ v = getattr(threadlocal, "magic_instance", None) ++ if v is None: ++ v = MagicDetect() ++ setattr(threadlocal, "magic_instance", v) ++ return v + + def _create_filemagic(mime_detected, type_detected): + mime_type, mime_encoding = mime_detected.split('; ') +@@ -259,9 +274,9 @@ def detect_from_filename(filename): + + Returns a `FileMagic` namedtuple. + ''' +- +- return _create_filemagic(mime_magic.file(filename), +- none_magic.file(filename)) ++ x = _detect_make() ++ return _create_filemagic(x.mime_magic.file(filename), ++ x.none_magic.file(filename)) + + + def detect_from_fobj(fobj): +@@ -271,8 +286,9 @@ def detect_from_fobj(fobj): + ''' + + file_descriptor = fobj.fileno() +- return _create_filemagic(mime_magic.descriptor(file_descriptor), +- none_magic.descriptor(file_descriptor)) ++ x = _detect_make() ++ return _create_filemagic(x.mime_magic.descriptor(file_descriptor), ++ x.none_magic.descriptor(file_descriptor)) + + + def detect_from_content(byte_content): +@@ -281,5 +297,6 @@ def detect_from_content(byte_content): + Returns a `FileMagic` namedtuple. + ''' + +- return _create_filemagic(mime_magic.buffer(byte_content), +- none_magic.buffer(byte_content)) ++ x = _detect_make() ++ return _create_filemagic(x.mime_magic.buffer(byte_content), ++ x.none_magic.buffer(byte_content)) diff --git a/SOURCES/file-localmagic.patch b/SOURCES/file-localmagic.patch new file mode 100644 index 0000000..d0d5350 --- /dev/null +++ b/SOURCES/file-localmagic.patch @@ -0,0 +1,64 @@ +From f25107f625e88726e8ae9d4963573b5a0dda8f4c Mon Sep 17 00:00:00 2001 +From: Jan Kaluza +Date: Thu, 15 Dec 2011 16:15:41 +0100 +Subject: [PATCH] file-localmagic.patch + +Upstream says it's up to distributions to add a way to support local-magic. + +Signed-off-by: Kamil Dudka +--- + magic/magic.local | 3 +++ + src/Makefile.am | 2 +- + src/Makefile.in | 2 +- + src/apprentice.c | 2 +- + 4 files changed, 6 insertions(+), 3 deletions(-) + create mode 100644 magic/magic.local + +diff --git a/magic/magic.local b/magic/magic.local +new file mode 100644 +index 0000000..283a863 +--- /dev/null ++++ b/magic/magic.local +@@ -0,0 +1,3 @@ ++# Magic local data for file(1) command. ++# Insert here your local magic data. Format is described in magic(5). ++ +diff --git a/src/Makefile.am b/src/Makefile.am +index 155aec4..0f22539 100644 +--- a/src/Makefile.am ++++ b/src/Makefile.am +@@ -1,4 +1,4 @@ +-MAGIC = $(pkgdatadir)/magic ++MAGIC = /etc/magic:$(pkgdatadir)/magic + lib_LTLIBRARIES = libmagic.la + nodist_include_HEADERS = magic.h + +diff --git a/src/Makefile.in b/src/Makefile.in +index b6eeb20..78dce55 100644 +--- a/src/Makefile.in ++++ b/src/Makefile.in +@@ -337,7 +337,7 @@ target_alias = @target_alias@ + top_build_prefix = @top_build_prefix@ + top_builddir = @top_builddir@ + top_srcdir = @top_srcdir@ +-MAGIC = $(pkgdatadir)/magic ++MAGIC = /etc/magic:$(pkgdatadir)/magic + lib_LTLIBRARIES = libmagic.la + nodist_include_HEADERS = magic.h + AM_CPPFLAGS = -DMAGIC='"$(MAGIC)"' +diff --git a/src/apprentice.c b/src/apprentice.c +index e395854..ecc1214 100644 +--- a/src/apprentice.c ++++ b/src/apprentice.c +@@ -454,7 +454,7 @@ apprentice_1(struct magic_set *ms, const char *fn, int action) + if (map == (struct magic_map *)-1) + return -1; + if (map == NULL) { +- if (ms->flags & MAGIC_CHECK) ++ if (ms->flags & MAGIC_CHECK && strcmp("/etc/magic", fn) != 0) + file_magwarn(ms, "using regular magic file `%s'", fn); + map = apprentice_load(ms, fn, action); + if (map == NULL) +-- +2.5.5 + diff --git a/SOURCES/file-magic-filesystems.patch b/SOURCES/file-magic-filesystems.patch new file mode 100644 index 0000000..5f87ceb --- /dev/null +++ b/SOURCES/file-magic-filesystems.patch @@ -0,0 +1,13 @@ +diff --git a/magic/Magdir/filesystems b/magic/Magdir/filesystems +index eb41868f..44805a35 100644 +--- a/magic/Magdir/filesystems ++++ b/magic/Magdir/filesystems +@@ -1973,7 +1973,7 @@ + # to display CD-ROM (70=81-11) after MBR (113=40+72+1), partition-table (71=50+21) and before Apple Driver Map (51) + #!:strength -11 + # to display CD-ROM (114=81+33) before MBR (113=40+72+1), partition-table (71=50+21) and Apple Driver Map (51) +-!:strength +34 ++!:strength +35 + >0 use cdrom + + # URL: https://en.wikipedia.org/wiki/NRG_(file_format) diff --git a/SPECS/file.spec b/SPECS/file.spec new file mode 100644 index 0000000..3eb7468 --- /dev/null +++ b/SPECS/file.spec @@ -0,0 +1,1253 @@ +# python3 is not available on RHEL <= 7 +%if 0%{?fedora} || 0%{?rhel} > 7 +%bcond_without python3 +%else +%bcond_with python3 +%endif + +# python2 is not available on RHEL > 7 and not needed on Fedora > 29 +%if 0%{?rhel} > 7 || 0%{?fedora} > 29 +%bcond_with python2 +%else +%bcond_without python2 +%endif + +Summary: A utility for determining file types +Name: file +Version: 5.33 +Release: 26%{?dist} +License: BSD +Group: Applications/File +Source0: ftp://ftp.astron.com/pub/file/file-%{version}.tar.gz + +# Upstream says it's up to distributions to add a way to support local-magic. +Patch0: file-localmagic.patch + +# not yet upstream +Patch1: file-4.17-rpm-name.patch +Patch2: file-5.04-volume_key.patch + +# picked from upstream +Patch3: file-5.33-gif.patch +Patch4: file-5.33-seccomp.patch + +# do not classify shared libraries as pie executables (#1581343) +Patch5: file-5.33-pie-executable-revert.patch + +# fix out-of-bounds read via a crafted ELF file (CVE-2018-10360) +Patch6: file-5.33-CVE-2018-10360.patch + +# support longer version strings for clamav database (#1539107) +Patch7: file-5.33-clamav.patch + +# show details about ppc swap partition (#1224668) +Patch8: file-5.33-ppc-swap.patch + +# fix memory leak on an error path (#1602492) +Patch9: file-5.33-covscan.patch + +# add magic for eBPF objects (#1648667) +Patch10: file-5.34-ebpf-magic.patch + +# make netpbm beat DOS/MBR magic again (#1658158) +Patch11: file-5.35-netpbm.patch + +# improve parsing of ppc core files (#1658171) +Patch12: file-5.35-ppc-core.patch + +# improve documentation of --apple in file(1) man page (#1677442) +Patch13: file-5.35-man-apple.patch + +# remove wrong magic for JFFS file system (#1773477) +Patch14: file-5.37-jffs-magic.patch + +# increase CDROM strength to beat MBR (#1696798) +Patch15: file-magic-filesystems.patch + +# search deeper in the zip file (#1845169) +Patch16: file-5.33-msooxml-magic.patch + +# when ignoring whitespace compare up to the length of the string +Patch17: file-5.33-whitespace-compare.patch + +# Use \040 to make space clearer +Patch18: file-5.33-python-space.patch + +# Pass an upper bound to file_strncmp (string is not always NULL) +Patch19: file-5.33-bound-file_strncmp.patch + +# improve magic for python scripts +Patch20: file-5.33-more-python.patch + +# improve magic for Shell, Gnome Javascript and TCL scripts +Patch21: file-5.33-other-languages.patch + +# fix heap-based buffer overflow in cdf_read_property_info() (CVE-2019-18218) +Patch22: file-5.37-CVE-2019-18218.patch + +# not yet upstream (#2095828) +Patch23: file-5.33-fix-compression.patch + +# upstream commit: 709dfecf25c2eb2822f7e0b8c30d6329cd2d97fb (#2061557) +Patch24: file-5.33-floating-point-exception.patch + +# upstream commit: e2adab1456c2bd8b005ddf8ed71540a37d05cb08 (#2071581) +Patch25: file-5.33-static-PIE-binaries-0.patch +# upstream commit: 9109a696f3289ba00eaa222fd432755ec4287e28 (#2071581) +Patch26: file-5.33-static-PIE-binaries-1.patch +# upstream commit: 9ffbd485ba4647827c4bdacf3a2de690f6765b0c (#2071581) +Patch27: file-5.33-static-PIE-binaries-2.patch +# upstream commit: 03084b161cf888b5286dbbcd964c31ccad4f64d9 (#2071581) +Patch28: file-5.33-static-PIE-binaries-3.patch +# upstream commit: 363d7fcf703ad3ebf37b45693b2c9e43eb8b4176 (#2071581) +Patch29: file-5.33-static-PIE-binaries-4.patch +# upstream commit: 9c3137904e59d68debb97fceaced46a691ba241a (#2071581) +Patch30: file-5.33-static-PIE-binaries-5.patch + +# https://github.com/file/file/commit/39e43a669d1260f0df36f0b2e78b3012ffd5f086 (#2158115) +Patch31: file-5.33-thermocam-magic.patch + +# Upstream commit c8deb32eab1089d1841482fb2e91833f114b6712 (#13737) +Patch32: file-5.41-python-magic-threads.patch + +URL: http://www.darwinsys.com/file/ +Requires: file-libs = %{version}-%{release} +BuildRequires: zlib-devel +BuildRequires: autoconf automake libtool + +%description +The file command is used to identify a particular file according to the +type of data contained by the file. File can identify many different +file types, including ELF binaries, system libraries, RPM packages, and +different graphics formats. + +%package libs +Summary: Libraries for applications using libmagic +Group: Applications/File +License: BSD + +%description libs + +Libraries for applications using libmagic. + +%package devel +Summary: Libraries and header files for file development +Group: Applications/File +Requires: %{name} = %{version}-%{release} +Requires: file-libs%{?_isa} = %{version}-%{release} + +%description devel +The file-devel package contains the header files and libmagic library +necessary for developing programs using libmagic. + +%if %{with python2} +%package -n python2-magic +Summary: Python 2 bindings for the libmagic API +Group: Development/Libraries +BuildRequires: python2-devel +%if 0%{?rhel} && 0%{?rhel} <= 7 +BuildRequires: python-setuptools +%endif +BuildArch: noarch +Requires: %{name} = %{version}-%{release} +%{?python_provide:%python_provide python2-magic} + +%description -n python2-magic +This package contains the Python 2 bindings to allow access to the +libmagic API. The libmagic library is also used by the familiar +file(1) command. +%endif + +%if %{with python3} +%package -n python3-magic +Summary: Python 3 bindings for the libmagic API +Group: Development/Libraries +BuildRequires: python3-devel +BuildArch: noarch +Requires: %{name} = %{version}-%{release} + +%description -n python3-magic +This package contains the Python 3 bindings to allow access to the +libmagic API. The libmagic library is also used by the familiar +file(1) command. +%endif + +%prep +%autosetup -p1 + +iconv -f iso-8859-1 -t utf-8 < doc/libmagic.man > doc/libmagic.man_ +touch -r doc/libmagic.man doc/libmagic.man_ +mv doc/libmagic.man_ doc/libmagic.man + +%if %{with python3} +rm -rf %{py3dir} +cp -a python %{py3dir} +%endif + +%build +# Fix config.guess to find aarch64 - #925339 +autoreconf -fi + +CFLAGS="%{optflags} -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE" \ +%configure --enable-fsect-man5 --disable-rpath +# remove hardcoded library paths from local libtool +sed -i 's|^hardcode_libdir_flag_spec=.*|hardcode_libdir_flag_spec=""|g' libtool +sed -i 's|^runpath_var=LD_RUN_PATH|runpath_var=DIE_RPATH_DIE|g' libtool +export LD_LIBRARY_PATH=%{_builddir}/%{name}-%{version}/src/.libs +make %{?_smp_mflags} V=1 +%if %{with python2} +cd python +CFLAGS="%{optflags}" %{__python2} setup.py build +%endif +%if %{with python3} +cd %{py3dir} +CFLAGS="%{optflags}" %{__python3} setup.py build +%endif + +%install +mkdir -p ${RPM_BUILD_ROOT}%{_bindir} +mkdir -p ${RPM_BUILD_ROOT}%{_mandir}/man1 +mkdir -p ${RPM_BUILD_ROOT}%{_mandir}/man5 +mkdir -p ${RPM_BUILD_ROOT}%{_datadir}/misc +mkdir -p ${RPM_BUILD_ROOT}%{_datadir}/file + +make DESTDIR=${RPM_BUILD_ROOT} install +rm -f ${RPM_BUILD_ROOT}%{_libdir}/*.la + +# local magic in /etc/magic +mkdir -p ${RPM_BUILD_ROOT}%{_sysconfdir} +cp -a ./magic/magic.local ${RPM_BUILD_ROOT}%{_sysconfdir}/magic + +cat magic/Magdir/* > ${RPM_BUILD_ROOT}%{_datadir}/misc/magic +ln -s misc/magic ${RPM_BUILD_ROOT}%{_datadir}/magic +ln -s ../magic ${RPM_BUILD_ROOT}%{_datadir}/file/magic + +%if %{with python2} +cd python +%{__python2} setup.py install -O1 --skip-build --root ${RPM_BUILD_ROOT} +%endif +%if %{with python3} +cd %{py3dir} +%{__python3} setup.py install -O1 --skip-build --root ${RPM_BUILD_ROOT} +%endif +%{__install} -d ${RPM_BUILD_ROOT}%{_datadir}/%{name} + +%ldconfig_scriptlets libs + +%files +%{!?_licensedir:%global license %%doc} +%license COPYING +%doc ChangeLog README +%{_bindir}/* +%{_mandir}/man1/* +%config(noreplace) %{_sysconfdir}/magic + +%files libs +%{!?_licensedir:%global license %%doc} +%license COPYING +%doc ChangeLog README +%{_libdir}/*so.* +%{_datadir}/magic* +%{_mandir}/man5/* +%{_datadir}/file +%{_datadir}/misc/* + +%files devel +%{_libdir}/*.so +%{_includedir}/magic.h +%{_mandir}/man3/* + +%if %{with python2} +%files -n python2-magic +%{!?_licensedir:%global license %%doc} +%license COPYING +%doc python/README python/example.py +%{python2_sitelib}/magic.py +%{python2_sitelib}/magic.pyc +%{python2_sitelib}/magic.pyo +%if 0%{?fedora} || 0%{?rhel} >= 6 +%{python2_sitelib}/*egg-info +%endif +%endif + +%if %{with python3} +%files -n python3-magic +%{!?_licensedir:%global license %%doc} +%license COPYING +%doc python/README python/example.py +%{python3_sitelib}/magic.py +%{python3_sitelib}/*egg-info +%{python3_sitelib}/__pycache__/* +%endif + +%changelog +* Thu Oct 12 2023 Vincent Mihalkovic - 5.33-26 +- Fix segfault in python3-file-magic concurrent method calls (#13737) + +* Thu Apr 20 2023 Vincent Mihalkovic - 5.33-25 +- Improve thermocam magic (rhbz#2158115) + +* Wed Feb 22 2023 Vincent Mihalkovic - 5.33-24 +- fix detection of static-pie binaries (#2071581) + +* Wed Feb 01 2023 Vincent Mihalkovic - 5.33-23 +- fix detection of static-pie binaries (#2071581) + +* Tue Jan 31 2023 Vincent Mihalkovic - 5.33-22 +- fix issue with libmagic and floating point exceptions (#2061557) + +* Wed Aug 17 2022 Vincent Mihalkovic - 5.33-21 +- fix recognition (src/compress.c) of compressed empty files (#2095828) + +* Tue May 04 2021 Vincent Mihalkovic - 5.33-20 +- rebuild (#1954434) + +* Wed Apr 14 2021 Vincent Mihalkovic - 5.33-18 +- fix heap-based buffer overflow in cdf_read_property_info() (CVE-2019-18218) + +* Thu Jan 21 2021 Vincent Mihalkovic - 5.33-17 +- improve magic for script recognition and other changes (#1903531) + +* Mon Jun 22 2020 Vincent Mihalkovic - 5.33-16 +- magic/Magdir/msooxml: Search deeper in the zip file (#1845169) + +* Fri May 22 2020 Kamil Dudka - 5.33-15 +- remove duplicate line in file(1) man page (#1677442) + +* Thu May 21 2020 Vincent Mihalkovič - 5.33-14 +- increase magic/Magdir/filesystems CDROM strength to beat MBR (#1696798) + +* Mon Nov 18 2019 Kamil Dudka - 5.33-13 +- remove wrong magic for JFFS file system (#1773477) + +* Tue Oct 15 2019 Kamil Dudka - 5.33-12 +- restore missing comma in the output for core files (#1658171) + +* Tue Oct 15 2019 Kamil Dudka - 5.33-11 +- improve documentation of --apple in file(1) man page (#1677442) +- improve parsing of ppc core files (#1658171) + +* Mon Oct 14 2019 Kamil Dudka - 5.33-10 +- make netpbm beat DOS/MBR magic again (#1658158) + +* Wed Jul 03 2019 Kamil Dudka - 5.33-9 +- add magic for eBPF objects (#1652993) + +* Mon Nov 05 2018 Kamil Dudka - 5.33-8 +- fix memory leak on an error path (#1602492) + +* Tue Jul 17 2018 Kamil Dudka - 5.33-7 +- show details about ppc swap partition (#1224668) +- support longer version strings for clamav database (#1539107) + +* Wed Jun 13 2018 Kamil Dudka - 5.33-6 +- fix out-of-bounds read via a crafted ELF file (CVE-2018-10360) + +* Thu May 24 2018 Kamil Dudka - 5.33-5 +- do not classify shared libraries as pie executables in MIME output (#1581343) + +* Tue May 22 2018 Kamil Dudka - 5.33-4 +- do not classify shared libraries as pie executables (#1581343) +- seccomp: fix build failure due to missing syscalls + +* Mon Apr 30 2018 Miro Hrončok - 5.33-3 +- Update Python macros to new packaging standards + (See https://fedoraproject.org/wiki/Changes/Avoid_usr_bin_python_in_RPM_Build) + +* Wed Apr 18 2018 Kamil Dudka - 5.33-2 +- increase strength of GIF to beat MBR (#1515180) + +* Mon Apr 16 2018 Kamil Dudka - 5.33-1 +- update to new version 5.33 + +* Wed Mar 28 2018 Kamil Dudka - 5.32-4 +- make the python2-magic subpackage optional + +* Wed Feb 07 2018 Fedora Release Engineering - 5.32-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Sat Feb 03 2018 Igor Gnatenko - 5.32-2 +- Switch to %%ldconfig_scriptlets + +* Mon Sep 04 2017 Kamil Dudka - 5.32-1 +- update to new version 5.32 + +* Sat Aug 19 2017 Zbigniew Jędrzejewski-Szmek - 5.31-10 +- Python 2 binary package renamed to python2-file + See https://fedoraproject.org/wiki/FinalizingFedoraSwitchtoPython3 + +* Fri Aug 18 2017 Marek Cermak - 5.31-9 +- Ruby script recognition and classification (#1050897) + +* Mon Aug 14 2017 Marek Cermak - 5.31-8 +- New magic entry for iconv/gconv module configuration cache (#1342428) + +* Fri Aug 4 2017 Marek Cermak - 5.31-7 +- Changes in commands and images magic files +- Fixes awk/perl script recognition + +* Wed Aug 02 2017 Fedora Release Engineering - 5.31-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Mon Jul 31 2017 Marek Cermak - 5.31-5 +- fixed patch for recognition of gnu message catalog (.mo) files (#1226215) + +* Sun Jul 30 2017 Florian Weimer - 5.31-4 +- Rebuild with binutils fix for ppc64le (#1475636) + +* Wed Jul 26 2017 Fedora Release Engineering - 5.31-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Tue Jul 25 2017 Marek Cermak - 5.31-2 +- fixed recognition of gnu message catalog (.mo) files (#1226215) + +* Wed May 24 2017 Kamil Dudka - 5.31-1 +- update to new version 5.31 + +* Wed Apr 05 2017 Kamil Dudka - 5.30-6 +- fix utf-8 conversion in Python 2 bindings (#1433364) + +* Thu Feb 23 2017 Kamil Dudka - 5.30-5 +- make the package build on EPEL-6 and EPEL-7 +- drop undocumented override of the __libtoolize RPM macro +- drop undocumented non-upstream file-5.24-varied.patch +- drop undocumented non-upstream file-5.22-awk-perl.patch +- drop non-upstream file-5.19-cafebabe.patch no longer needed (#1134580) +- drop undocumented non-upstream file-5.14-x86boot.patch +- drop undocumented non-upstream file-5.04-generic-msdos.patch + +* Thu Feb 23 2017 Kamil Dudka - 5.30-4 +- increase strength of perl modules to exceed C sources (#772651) +- drop non-upstream file-5.14-perl.patch (#1051598) +- drop undocumented non-upstream file-5.10-strength.patch (#772651) + +* Tue Feb 14 2017 Kamil Dudka - 5.30-3 +- restore compatibility with certain RPM scripts + +* Tue Feb 14 2017 Kamil Dudka - 5.30-2 +- fix debug info reversed logic + +* Mon Feb 13 2017 Kamil Dudka - 5.30-1 +- apply patches automatically to ease maintenance +- update to new version 5.30 + +* Wed Feb 08 2017 Kamil Dudka - 5.29-3 +- build in parallel and in verbose mode +- fix assertion failure on certain files (thanks to Christoph Biedl) + +* Tue Dec 13 2016 Charalampos Stratakis - 5.29-2 +- Rebuild for Python 3.6 + +* Tue Oct 25 2016 Kamil Dudka - 5.29-1 +- update to new version 5.29 + +* Wed Aug 17 2016 Kamil Dudka - 5.28-4 +- avoid double encoding with Python 3 (#1367144) + +* Tue Jul 19 2016 Fedora Release Engineering - 5.28-3 +- https://fedoraproject.org/wiki/Changes/Automatic_Provides_for_Python_RPM_Packages + +* Mon Jun 27 2016 Igor Gnatenko - 5.28-2 +- Fix crash during uncompression of zlib (RHBZ #1350252) + +* Fri Jun 24 2016 Kamil Dudka - 5.28-1 +- update to new version 5.28 + +* Wed Feb 03 2016 Fedora Release Engineering - 5.25-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + +* Thu Jan 28 2016 Jan Kaluza - 5.25-5 +- fix #1302297 - fix misdetection of some Perl scripts as Minix filesystem + +* Wed Jan 06 2016 Jan Kaluza - 5.25-4 +- fix #1291903 - fix misdetection of some text files as MSX binary files + +* Fri Nov 20 2015 Jan kaluza - 5.25-3 +- fix #1279401 - change the order of Perl patterns to try "Perl script" + patterns before "Perl Module" + +* Thu Nov 05 2015 Robert Kuska - 5.25-2 +- Rebuilt for Python3.5 rebuild + +* Fri Sep 18 2015 Jan Kaluza - 5.25-1 +- update to new version 5.25 + +* Thu Jul 16 2015 Jan Kaluza - 5.24-1 +- update to new version 5.24 + +* Mon Jun 22 2015 Jan Kaluza - 5.22-5 +- fix #1201630 - fix recursion in JPEG magic pattern + +* Wed Jun 17 2015 Fedora Release Engineering - 5.22-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Sat Feb 21 2015 Till Maas - 5.22-3 +- Rebuilt for Fedora 23 Change + https://fedoraproject.org/wiki/Changes/Harden_all_packages_with_position-independent_code + +* Mon Feb 16 2015 Jan Kaluza - 5.22-2 +- remove weak zlib pattern + +* Wed Feb 04 2015 Jan Kaluza - 5.22-1 +- update to new version 5.22 + +* Thu Oct 23 2014 Jan Kaluza - 5.19-7 +- fix #1155464 - fix for CVE-2014-3710 + +* Wed Sep 03 2014 Jan Kaluza - 5.19-6 +- fix #1134580 - detect Mach-O universal binary + +* Wed Sep 03 2014 Jan Kaluza - 5.19-5 +- fix #1101404 - remove weak Pascal patterns +- fix #1107995 - detect locale-archive +- fix #1130693, #1115111 - fix detection of MSOOXML, OOXML and ZIP +- fix #1124940 - detect Python 3.4 byte-compiled files + +* Fri Aug 22 2014 Jan Kaluza - 5.19-4 +- fix #1132787 - CVE-2014-3587 + +* Sat Aug 16 2014 Fedora Release Engineering - 5.19-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild + +* Sat Jul 12 2014 Tom Callaway - 5.19-2 +- fix license handling + +* Wed Jun 25 2014 Jan Kaluza - 5.19-1 +- fix #1011789 - update to version 5.19 + +* Sat Jun 07 2014 Fedora Release Engineering - 5.14-22 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + +* Tue May 27 2014 Kalev Lember - 5.14-21 +- Rebuilt for https://fedoraproject.org/wiki/Changes/Python_3.4 + +* Tue Mar 25 2014 Jan Kaluza - 5.14-20 +- fix #1079847 - fix potential regression in Perl detection caused + by original patch for CVE-2013-7345 + +* Mon Mar 24 2014 Jan Kaluza - 5.14-19 +- fix redefinition of OFFSET_OOB in CVE-2014-2270 patch + +* Mon Mar 24 2014 Jan Kaluza - 5.14-18 +- fix #1079847 - fix for CVE-2013-7345 +- fix #1080450 - remove *.orig files before compiling magic/Magdir + +* Fri Mar 07 2014 Jan Kaluza - 5.14-17 +- fix #1073555 - fix for CVE-2014-2270 + +* Tue Feb 25 2014 Jan Kaluza - 5.14-16 +- fix potential memory leak introduced in previous commit + +* Tue Feb 18 2014 Jan Kaluza - 5.14-15 +- fix #1065837 - fix for CVE-2014-1943 + +* Wed Jan 15 2014 Jan Kaluza - 5.14-14 +- fix #1051598 - reverse the order of shebang vs. package keyword detection + in Perl by increasing strength of all Perl patterns + +* Mon Sep 09 2013 Jan Kaluza - 5.14-13 +- fix #1001689 - fix segfault when calling magic_load twice + +* Thu Aug 22 2013 Jan Kaluza - 5.14-12 +- fix #985072 - add support for journald files + +* Thu Aug 8 2013 Ville Skyttä - 5.14-11 +- Build python-magic for python3 where applicable. + +* Sat Aug 03 2013 Fedora Release Engineering - 5.14-10 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild + +* Tue Jul 02 2013 Jan Kaluza - 5.14-9 +- fix #980446 - do not segfault when no magic is loaded + +* Mon Jun 17 2013 Jan Kaluza - 5.14-8 +- replace sitearch with sitelib + +* Mon Jun 17 2013 Jan Kaluza - 5.14-7 +- build python-magic as noarch + +* Wed May 15 2013 Jan Kaluza - 5.14-6 +- fix #962678 - do not exit if no magic file is loaded, we can still provide + useful info without magic file + +* Mon May 13 2013 Jan Kaluza - 5.14-5 +- fix #925339 - support aarch64 + +* Mon Apr 08 2013 Jan Kaluza - 5.14-4 +- fix #948255 - print white-space in fsmagic, but only when + we know there will be some more output + +* Fri Mar 29 2013 Jan Kaluza - 5.14-3 +- fix #928995 - do not print white-space in the end of fsmagic + +* Mon Mar 25 2013 Jan Kaluza - 5.14-2 +- fix useless space in ELF output which could break libtool + +* Fri Mar 22 2013 Jan Kaluza - 5.14-1 +- fix #891856 - update to file-5.14 +- fix #909754 - magic number for Python-3.3 +- fix #912271 - do not report dwarf debug info packages as 'stripped' +- fix #882321 - do not print 'unknown capability' for ELF capabilities for + architectures which File does not support +- fix #866000 - show proper build id for ELF binaries +- fix #860139 - better dump file recognition on big endian architectures +- remove file-static subpackage +- move python-magic .py files to python_sitearch + +* Mon Mar 11 2013 Jan Kaluza - 5.11-9 +- fix #919466 - fix memory leak in get_default_magic + +* Wed Feb 13 2013 Fedora Release Engineering - 5.11-8 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild + +* Tue Dec 04 2012 Jan Kaluza - 5.11-7 +- removed duplicated patterns for backups generated by "dump" tool +- recognize volume_key escrow packets +- mention exit code in manpage +- remove weak msdos patterns + +* Wed Nov 21 2012 Jan Kaluza - 5.11-6 +- clean up the spec file + +* Tue Aug 14 2012 Jan Kaluza - 5.11-5 +- fix #847936 - decompress bzip2 properly when using -z param +- fix #847937 - read magic patterns also from ~/.magic.mgc + +* Fri Jul 27 2012 Fedora Release Engineering - 5.11-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild + +* Thu Jul 19 2012 Jan Kaluza - 5.11-3 +- removed buildroot, defattr + +* Thu Jun 21 2012 Jan Kaluza - 5.11-2 +- detect names of RPM packages +- detect swap on ia64 architecture + +* Mon Feb 27 2012 Jan Kaluza - 5.11-1 +- fix #796130 - update to file-5.11 +- fix #796209 - recognize VDI images +- fix #795709 - recognize QED images + +* Wed Jan 18 2012 Jan Kaluza - 5.10-5 +- fix detection of ASCII text files with setuid, setgid, or sticky bits + +* Tue Jan 10 2012 Jan Kaluza - 5.10-4 +- fix #772651 - decrease strength of newly added "C source" patterns + +* Tue Jan 03 2012 Jan Kaluza - 5.10-3 +- fix #771292 - do not show 'using regular magic file' warning for /etc/magic, + because this file is not supposed to be compiled + +* Mon Jan 02 2012 Jan Kaluza - 5.10-2 +- fix #770006 - detect tnef files + +* Mon Jan 02 2012 Jan Kaluza - 5.10-1 +- fix #771030 - update to file-5.10 + +* Mon Jan 02 2012 Jan Kaluza - 5.09-3 +- fix #720321 - added /etc/magic config file to let users define their local + magic patterns + +* Wed Oct 26 2011 Fedora Release Engineering - 5.09-2 +- Rebuilt for glibc bug#747377 + +* Thu Sep 29 2011 Jan Kaluza - 5.09-1 +- fix #739286 - update to file-5.09 + +* Thu Aug 04 2011 Jan Kaluza - 5.08-1 +- fix #728181 - update to file-5.08 +- remove unused patches + +* Tue Jun 14 2011 Jan Kaluza - 5.07-5 +- fix #712991 - include RPM noarch in /usr/share/magic + +* Thu Jun 09 2011 Jan Kaluza - 5.07-4 +- fix #711843 - fix postscript detection + +* Thu Jun 09 2011 Jan Kaluza - 5.07-3 +- fix #709953 - add support for BIOS version detection + +* Mon May 23 2011 Jan Kaluza - 5.07-2 +- backported patches to fix 5.07 regressions +- fix #706231 - fixed ZIP detection +- fix #705183, #705499 - removed weak DOS device driver pattern + +* Wed May 11 2011 Jan Kaluza - 5.07-1 +- update to new upstream version 5.07 +- remove unused patches + +* Tue Mar 01 2011 Jan Kaluza - 5.05-4 +- fix #678458 - support for Python 3.2 compiled files + +* Thu Feb 10 2011 Jan Kaluza - 5.05-3 +- fix #676543 - improved TeX and LaTeX recognition +- fix #676041 - detect all supported RPM architectures + +* Tue Feb 08 2011 Fedora Release Engineering - 5.05-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild + +* Tue Jan 18 2011 Jan Kaluza - 5.05-1 +- fix #670319 - update to new upstream release 5.05 +- removed useless patches + +* Mon Jan 10 2011 Jan Kaluza - 5.04-18 +- fix #668304 - support for com32r programs +- distinguish between GFS2 and GFS1 filesystems + +* Wed Nov 24 2010 Jan Kaluza - 5.04-17 +- fix #656395 - "string" magic directive supports longer strings + +* Wed Aug 25 2010 Jan Kaluza - 5.04-16 +- fix #637785 - support for zip64 format + +* Tue Aug 24 2010 Jan Kaluza - 5.04-15 +- fix #626591 - support for WebM format + +* Thu Aug 12 2010 Jan Kaluza - 5.04-14 +- fix #623602 - support for Python 2.7 compiled files + +* Wed Jul 21 2010 David Malcolm - 5.04-13 +- Rebuilt for https://fedoraproject.org/wiki/Features/Python_2.7/MassRebuild + +* Thu Jul 15 2010 Jan Kaluza 5.04-12 +- fix #599695 - try to get "from" attribute for ELF binaries + only from core dumps. + +* Thu Jul 08 2010 Jan Kaluza 5.04-11 +- added docs for file-libs + +* Tue Jun 29 2010 Jan Kaluza 5.04-10 +- fix #608922 - updated z-machine magic + +* Fri Jun 11 2010 Jan Kaluza 5.04-9 +- removed excessive HTML/SGML "magic patterns" (#603040) + +* Wed Apr 14 2010 Daniel Novotny 5.04-8 +- fix #580046 - the file command returns zero exit code + even in case of unexisting file being tested + +* Wed Apr 07 2010 Daniel Novotny 5.04-7 +- fix #566305 - "file" may trim too much of command line from core file + +* Wed Mar 24 2010 Daniel Novotny 5.04-6 +- fix #550212 - 'file' gives bad meta-data for squashfs-4.0 + +* Wed Mar 24 2010 Daniel Novotny 5.04-5 +- fix #575184 - file command does not print separator + when --print0 option is used + +* Thu Mar 11 2010 Daniel Novotny 5.04-4 +- fix #570785 - "file" misidentifies filesystem type + +* Tue Feb 09 2010 Daniel Novotny 5.04-3 +- fix #562840 - [PATCH] Add matches for ruby modules + +* Thu Jan 28 2010 Daniel Novotny 5.04-2 +- fix #533245 - segfaults on star.ulaw + +* Mon Jan 25 2010 Daniel Novotny 5.04-1 +- update to new upstream release 5.04 + +* Mon Jan 18 2010 Daniel Novotny 5.03-18 +- static library moved to new "-static" subpackage (#556048) + +* Fri Dec 25 2009 Robert Scheck 5.03-17 +- removed broken install of example.py (%%doc is much enough) + +* Mon Nov 30 2009 Daniel Novotny 5.03-16 +- fixed the patch for multilib (#515767) + +* Tue Nov 24 2009 Daniel Novotny 5.03-15 +- BuildRequires: autoconf, automake + +* Tue Nov 24 2009 Daniel Novotny 5.03-14 +- BuildRequires: automake because of the Makefile.am patch + +* Fri Nov 13 2009 Daniel Novotny 5.03-13 +- fix #537324 - update spec conditional for rhel + +* Thu Nov 05 2009 Daniel Novotny 5.03-12 +- fix #533151 - file command doesn't recognize deltaisos or rpm-only deltarpms + +* Tue Oct 27 2009 Daniel Novotny 5.03-11 +- fix #531082 - RFE: add detection of Python 3 bytecode +- fix #531127 - `file' command does not recognize mime type `image/vnd.djvu' + +* Wed Oct 21 2009 Daniel Novotny 5.03-10 +- fix #530083 - file -s is not able to detect swap signature on ppc + +* Tue Aug 25 2009 Daniel Novotny 5.03-9 +- fix #515767 - multilib: file /usr/share/misc/magic.mgc conflicts + +* Thu Aug 06 2009 Daniel Novotny 5.03-8 +- rebuild for #515767 - multilib: file /usr/share/misc/magic.mgc conflicts + +* Fri Jul 24 2009 Fedora Release Engineering - 5.03-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild + +* Thu Jul 23 2009 Daniel Novotny 5.03-6 +- fix #510429 - file is confused by string "/* (if any) */" + in C header and claims it "Lisp/Scheme program text" + +* Wed Jul 22 2009 Daniel Novotny 5.03-5 +- #513079 - RFE: file - recognize xfs metadump images + +* Fri Jul 10 2009 Adam Jackson 5.03-4 +- Clean up %%description. + +* Tue Jun 16 2009 Daniel Novotny 5.03-4 +- one more PostScript font magic added (#505762), + updated font patch + +* Tue Jun 16 2009 Daniel Novotny 5.03-3 +- added magic for three font issues (PostScript fonts) + (#505758, #505759, #505765) + +* Thu May 14 2009 Daniel Novotny 5.03-2 +- fix #500739 - Disorganized magic* file locations in file-libs + +* Mon May 11 2009 Daniel Novotny 5.03-1 +- new upstream version + +* Tue May 05 2009 Daniel Novotny 5.02-1 +- new upstream version; drop upstreamed patches; this fixes #497913 + +* Wed Apr 29 2009 Daniel Novotny 5.00-8 +- fix #498036 - Elang JAM file definition breaks detection of postscript-files + +* Mon Apr 20 2009 Daniel Novotny 5.00-7 +- fix previous patch: + the name of the format is a bit different (MDUMP -> MDMP) + +* Fri Apr 17 2009 Daniel Novotny 5.00-6 +- fix #485835 (MDUMP files) + +* Mon Mar 23 2009 Daniel Novotny 5.00-5 +- added two font definitions (#491594, #491595) + and a fix for file descriptor leak when MAGIC_COMPRESS used (#491596) + +* Tue Feb 24 2009 Fedora Release Engineering - 5.00-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild + +* Mon Feb 23 2009 Daniel Novotny 5.00-3 +- fix #486105 - file-5.00-2.fc11 fails to recognise a file + (and makes rpmbuild fail) + +* Mon Feb 16 2009 Daniel Novotny 5.00-2 +- fix #485141 - rpm failed while checking a French Word file + +* Mon Feb 09 2009 Daniel Novotny 5.00-1 +- upgrade to 5.00 +- drop upstreamed patches, rebase remaining patch + +* Wed Jan 14 2009 Daniel Novotny 4.26-9 +- fix #476655 detect JPEG-2000 Code Stream Bitmap + +* Mon Jan 12 2009 Daniel Novotny 4.26-8 +- fix #479300 - add btrfs filesystem magic + +* Mon Dec 15 2008 Daniel Novotny 4.26-7 +- fix the LaTex issue in bz#474156 + +* Thu Dec 04 2008 Ignacio Vazquez-Abrams - 4.26-6 +- Rebuild for Python 2.6 + +* Thu Dec 04 2008 Daniel Novotny - 4.26-5 +- fix #470811 - Spurious perl auto-requires + +* Sat Nov 29 2008 Ignacio Vazquez-Abrams - 4.26-4 +- Rebuild for Python 2.6 + +* Thu Oct 16 2008 Daniel Novotny 4.26-3 +- fix #465994 file --mime-encoding seems broken + +* Tue Oct 07 2008 Daniel Novotny 4.26-2 +- fix #463809: rpmbuild rpmfcClassify: Assertion fails on some binary files + (false positive test on "DOS device driver" crashed file(1) + and rpmbuild(8) failed) + +* Mon Sep 15 2008 Daniel Novotny 4.26-1 +- new upstream version: fixes #462064 + +* Mon Jul 21 2008 Tomas Smetana - 4.25-1 +- new upstream version; drop upstreamed patches + +* Fri Jun 06 2008 Tomas Smetana - 4.24-4 +- add GFS2 filesystem magic; thanks to Eric Sandeen +- add LVM snapshots magic (#449755); thanks to Jason Farrell + +* Wed Jun 04 2008 Tomas Smetana - 4.24-3 +- drop patches that do nothing in recent build system +- create the text magic file during installation + +* Tue Jun 03 2008 Tomas Smetana - 4.24-2 +- rebuild because of egg-info + +* Tue Jun 03 2008 Tomas Smetana - 4.24-1 +- new upstream version + +* Tue Mar 11 2008 Tomas Smetana - 4.23-5 +- fix EFI detection patch + +* Fri Feb 01 2008 Tomas Smetana - 4.23-4 +- fix mismatching gzip files and text files as animations + +* Fri Feb 01 2008 Tomas Smetana - 4.23-3 +- fix #430927 - detect ext4 filesystems + +* Thu Jan 31 2008 Tomas Smetana - 4.23-2 +- fix #430952 - wrong handling of ELF binaries + +* Tue Jan 29 2008 Tomas Smetana - 4.23-1 +- new upstream version; update patches; drop unused patches + +* Thu Jan 24 2008 Tomas Smetana - 4.21-5 +- build a separate python-magic package; thanks to Terje Rosten + +* Thu Dec 06 2007 Tomas Smetana - 4.21-4 +- add PE32/PE32+ magic + +* Wed Aug 15 2007 Martin Bacovsky - 4.21-3 +- resolves: #172015: no longer reports filename of crashed app when run on core files. +- resolves: #249578: Weird output from "file -i" +- resolves: #234817: file reports wrong filetype for microsoft word file + +* Wed Jul 4 2007 Martin Bacovsky - 4.21-2 +- resolves: #246700: RPM description isn't related to product +- resolves: #238789: file-devel depends on %%{version} + but not on %%{version}-%%{release} +- resolves: #235267: for core files, file doesn't display the executable name + +* Tue May 29 2007 Martin Bacovsky - 4.21-1 +- upgrade to new upstream 4.21 +- resolves: #241034: CVE-2007-2799 file integer overflow + +* Wed Mar 7 2007 Martin Bacovsky - 4.20-1 +- upgrade to new upstream 4.20 + +* Tue Feb 20 2007 Martin Bacovsky - 4.19-4 +- rpath in file removal + +* Mon Feb 19 2007 Martin Bacovsky - 4.19-3 +- Resolves: #225750 - Merge Review: file + +* Thu Jan 25 2007 Martin Bacovsky - 4.19-2 +- Resolves: #223297 - file does not recognize OpenOffice "native" formats +- Resolves: #224344 - Magic rules should be in file-libs + +* Tue Jan 9 2007 Martin Bacovsky - 4.19-1 +- Resolves: #208880 - Pointless file(1) error message while detecting ELF 64-bit file + thanks to for patch +- Resolves: #214992 - file-devel should own %%_includedir/* %%_libdir/lib*.so +- Resolves: #203548 - a -devel package should be split out for libmagic +- upgrade to new upstream 4.19 +- patch revision and cleaning +- split package to file, file-devel and file-libs + +* Wed Aug 23 2006 Martin Bacovsky - 4.17-8 +- fix recognition of perl script with embed awk (#203610) + +* Fri Aug 18 2006 Martin Bacovsky - 4.17-7 +- fix recognition of bash script with embed awk (#202185) + +* Thu Aug 03 2006 Martin Bacovsky - 4.17-6 +- fix gziped empty file (#72986) + +* Wed Jul 12 2006 Jesse Keating - 4.17-5.1 +- rebuild + +* Mon Jul 10 2006 Radek Vokal 4.17-5 +- fix powerpoint mine (#190373) + +* Wed May 24 2006 Radek Vokal 4.17-4 +- /usr/share/file is owned by package (#192858) +- fix magic for Clamav files (#192406) + +* Fri Apr 21 2006 Radek Vokal 4.17-3 +- add support for OCFS or ASM (#189017) + +* Tue Mar 14 2006 Radek Vokal 4.17-2 +- fix segfault when compiling magic +- add check for wctype.h +- fix for flac and mp3 files + +* Mon Mar 13 2006 Radek Vokal 4.17-1 +- upgrade to file-4.17, patch clean-up + +* Fri Feb 10 2006 Jesse Keating - 4.16-6.2 +- bump again for double-long bug on ppc(64) + +* Tue Feb 07 2006 Jesse Keating - 4.16-6.1 +- rebuilt for new gcc4.1 snapshot and glibc changes + +* Sat Feb 04 2006 Radek Vokal 4.16-6 +- xen patch, recognizes Xen saved domain + +* Fri Jan 13 2006 Radek Vokal 4.16-5 +- fix for 64bit arrays + +* Fri Dec 09 2005 Jesse Keating +- rebuilt + +* Tue Nov 29 2005 Radek Vokal - 4.16-4 +- printf utf8 filenames and don't use isprint() (#174348) + +* Tue Nov 08 2005 Radek Vokal - 4.16-3 +- remove .la files (#172633) + +* Mon Oct 31 2005 Radek Vokal - 4.16-2 +- fix core files output, show "from" (#172015) + +* Tue Oct 18 2005 Radek Vokal - 4.16-1 +- upgrade to upstream + +* Mon Oct 03 2005 Radek Vokal - 4.15-4 +- file output for Berkeley DB gains Cracklib (#168917) + +* Mon Sep 19 2005 Radek Vokal - 4.15-3 +- small fix in previously added patch, now it works for multiple params + +* Mon Sep 19 2005 Radek Vokal - 4.15-2 +- print xxx-style only once (#168617) + +* Tue Aug 09 2005 Radek Vokal - 4.15-1 +- upgrade to upstream + +* Tue Aug 09 2005 Radek Vokal - 4.14-4 +- mime for mpeg and aac files fixed (#165323) + +* Fri Aug 05 2005 Radek Vokal - 4.14-3 +- mime for 3ds files removed, conflicts with text files (#165165) + +* Fri Jul 22 2005 Radek Vokal - 4.14-2 +- fixed mime types recognition (#163866) + +* Thu Jul 14 2005 Radek Vokal - 4.14-1 +- sync with upstream, patch clean-up + +* Mon Jul 04 2005 Radek Vokal - 4.13-5 +- fixed reiserfs check (#162378) + +* Mon Apr 11 2005 Radek Vokal - 4.13-4 +- check Cyrus files before Apple Quicktime movies (#154342) + +* Mon Mar 07 2005 Radek Vokal - 4.13-3 +- check for shared libs before fs dump files (#149868) + +* Fri Mar 04 2005 Radek Vokal - 4.13-2 +- gcc4 rebuilt + +* Tue Feb 15 2005 Radek Vokal - 4.13-1 +- new version, fixing few bugs, patch clean-up +- consistent output for bzip files (#147440) + +* Mon Jan 24 2005 Radek Vokal - 4.12-3 +- core64 patch fixing output on core files (#145354) +- minor change in magic patch + +* Mon Jan 03 2005 Radek Vokal - 4.12-2 +- fixed crashes in threaded environment (#143871) + +* Thu Dec 02 2004 Radek Vokal - 4.12-1 +- upgrade to file-4.12 +- removed Tim's patch, tuned magic patch + +* Sat Nov 20 2004 Miloslav Trmac - 4.10-4 +- Convert libmagic.3 to UTF-8 + +* Thu Nov 18 2004 Radek Vokal 4.10-3 +- set of patches from debian.org +- new magic types (#128763) +- zlib added to BuildReq (#125294) + +* Tue Oct 12 2004 Tim Waugh 4.10-2 +- Fixed occasional segfault (bug #131892). + +* Wed Aug 11 2004 Radek Vokal +- zlib patch deleted, note patch deleted, rh patch updated, debian patch updated +- upgrade to file-4.10 + +* Tue Jun 15 2004 Elliot Lee +- rebuilt + +* Mon May 10 2004 Jakub Jelinek +- fix ELF note handling (#109495) + +* Tue Mar 23 2004 Karsten Hopp 4.07-3 +- add docs (#115966) + +* Tue Mar 02 2004 Elliot Lee +- rebuilt + +* Fri Feb 13 2004 Elliot Lee +- rebuilt + +* Sun Jan 18 2004 Jeff Johnson 4.07-1 +- upgrade to 4.07. +- deal gracefully with unreadable files (#113207). +- detect PO files (from Debian). + +* Tue Dec 16 2003 Jeff Johnson 4.06-1 +- upgrade to file-4.06. + +* Mon Nov 10 2003 Tim Waugh 4.02-4 +- Minimal fix for busy loop problem (bug #109495). + +* Mon Oct 13 2003 Jeff Johnson 4.05-1 +- upgrade to 4.05. + +* Thu Oct 9 2003 Jeff Johnson 4.02-3 +- use zlib rather than exec'ing gzip. + +-* Thu Aug 28 2003 Dan Walsh +-- Add Selinux support. + +* Wed Jun 04 2003 Elliot Lee +- rebuilt + +* Sat May 24 2003 Florian La Roche +- add ldconfig to post/postun + +* Mon Apr 21 2003 Jeff Johnson 4.02-1 +- upgrade to file-4.02. + +* Thu Feb 27 2003 Jeff Johnson 3.39-9 +- check size read from elf header (#85297). + +* Tue Feb 18 2003 Matt Wilson 3.39-8 +- add FHS compatibility symlink from /usr/share/misc/magic -> ../magic + (#84509) + +* Fri Feb 14 2003 Jeff Johnson 3.39-7 +- the "real" fix to the vorbis/ogg magic details (#82810). + +* Mon Jan 27 2003 Jeff Johnson 3.39-6 +- avoid vorbis/ogg magic details (#82810). + +* Wed Jan 22 2003 Tim Powers 3.39-5 +- rebuilt + +* Sun Jan 12 2003 Nalin Dahyabhai 3.39-4 +- PT_NOTE, take 3 + +* Fri Jan 10 2003 Nalin Dahyabhai 3.39-3 +- don't barf in ELF headers with align = 0 + +* Tue Jan 7 2003 Nalin Dahyabhai 3.39-2 +- don't get lost when looking at PT_NOTE sections + +* Sat Oct 26 2002 Jeff Johnson 3.39-1 +- update to 3.39. + +* Fri Jun 21 2002 Tim Powers +- automated rebuild + +* Thu May 23 2002 Tim Powers +- automated rebuild + +* Mon May 6 2002 Trond Eivind Glomsrød 3.37-6 +- Don't use an old magic.mime +- Add mng detection (#64229) + +* Tue Feb 26 2002 Trond Eivind Glomsrød 3.37-5 +- Rebuild + +* Mon Jan 14 2002 Trond Eivind Glomsrød 3.37-4 +- Fix missing include of (#58209) + +* Tue Dec 11 2001 Trond Eivind Glomsrød 3.37-2 +- Add CFLAGS to handle large files (#53576) + +* Mon Dec 10 2001 Trond Eivind Glomsrød 3.37-1 +- 3.37 +- s/Copyright/License/ +- build with --enable-fsect-man5, drop patch +- disable two old patches + +* Fri Jul 06 2001 Florian La Roche +- revert a patch to Magdir/elf, which breaks many libtool scripts + in several rpm packages + +* Mon Jun 25 2001 Crutcher Dunnavant +- iterate to 3.35 + +* Sun Jun 24 2001 Elliot Lee +- Bump release + rebuild. + +* Sun Nov 26 2000 Jeff Johnson +- update to 3.33. + +* Mon Aug 14 2000 Preston Brown +- Bill made the patch but didn't apply it. :) + +* Mon Aug 14 2000 Bill Nottingham +- 'ASCII text', not 'ASCII test' (#16168) + +* Mon Jul 31 2000 Jeff Johnson +- fix off-by-1 error when creating filename for use with -i. +- include a copy of GNOME /etc/mime-types in %%{_datadir}/magic.mime (#14741). + +* Sat Jul 22 2000 Jeff Johnson +- install magic as man5/magic.5 with other formats (#11172). + +* Wed Jul 12 2000 Prospector +- automatic rebuild + +* Wed Jun 14 2000 Jeff Johnson +- FHS packaging. + +* Fri Apr 14 2000 Bernhard Rosenkraenzer +- 3.30 + +* Wed Feb 16 2000 Cristian Gafton +- add ia64 patch from rth + +* Mon Feb 7 2000 Bill Nottingham +- handle compressed manpages +- update to 3.28 + +* Mon Aug 23 1999 Jeff Johnson +- identify ELF stripped files correctly (#4665). +- use SPARC (not sparc) consistently throughout (#4665). +- add entries for MS Office files (#4665). + +* Thu Aug 12 1999 Jeff Johnson +- diddle magic so that *.tfm files are identified correctly. + +* Tue Jul 6 1999 Jeff Johnson +- update to 3.27. + +* Mon Mar 22 1999 Preston Brown +- experimental support for realmedia files added + +* Sun Mar 21 1999 Cristian Gafton +- auto rebuild in the new build environment (release 5) + +* Fri Mar 19 1999 Jeff Johnson +- strip binary. + +* Fri Nov 27 1998 Jakub Jelinek +- add SPARC V9 magic. + +* Tue Nov 10 1998 Jeff Johnson +- update to 3.26. + +* Mon Aug 24 1998 Jeff Johnson +- update to 3.25. +- detect gimp XCF versions. + +* Thu May 07 1998 Prospector System +- translations modified for de, fr, tr + +* Wed Apr 08 1998 Erik Troan +- updated to 3.24 +- buildrooted + +* Mon Jun 02 1997 Erik Troan +- built against glibc + +* Mon Mar 31 1997 Erik Troan +- Fixed problems caused by 64 bit time_t. + +* Thu Mar 06 1997 Michael K. Johnson +- Improved recognition of Linux kernel images.