SHA256
1
0
forked from pool/file
file/file-5.12-upstream.patch

3788 lines
121 KiB
Diff
Raw Normal View History

--- file-5.12/ChangeLog 2012-12-13 14:48:08.000000000 +0100
+++ upstream/ChangeLog 2013-01-21 16:12:12.877493299 +0100
@@ -1,3 +1,27 @@
+2013-01-11 14:50 Christos Zoulas <christos@zoulas.com>
+
+ * Warn about inconsistent continuation levels.
+ * Change fsmagic to add a space after it prints.
+
+2013-01-10 21:00 Christos Zoulas <christos@zoulas.com>
+
+ * Make getline public so that file can link against it.
+ Perhaps it is better to rename it, or hide it differently.
+ Fixes builds on platforms that do not provide it.
+
+2013-01-07 16:30 Christos Zoulas <christos@zoulas.com>
+
+ * Add SuS d{,1,2,4,8}, u{,1,2,4,8} and document
+ what long, int, short, etc is (Guy Harris)
+
+2013-01-06 11:20 Christos Zoulas <christos@zoulas.com>
+
+ * add magic_version function and constant
+ * Redo memory allocation and de-allocation.
+ (prevents double frees on non mmap platforms)
+ * Fix bug with name/use having to do with passing
+ found state from the parent to the child and back.
+
2012-12-19 8:47 Christos Zoulas <christos@zoulas.com>
* Only print elf capabilities for archs we know (Jan Kaluza)
--- file-5.12/README 2011-04-07 21:20:29.000000000 +0200
+++ upstream/README 2013-01-21 16:12:12.877493299 +0100
@@ -68,15 +68,19 @@ src/apprentice.c - parses /etc/magic to
src/apptype.c - used for OS/2 specific application type magic
src/asprintf.c - replacement for OS's that don't have it.
src/ascmagic.c - third & last set of tests, based on hardwired assumptions.
+src/asctime_r.c - for systems that don't have it.
+src/asprintf.c - for systems that don't have it.
src/cdf.c - parser for Microsoft Compound Document Files
src/cdf_time.c - time converter for CDF.
src/compress.c - handles decompressing files to look inside.
+src/ctime_r.c - for systems that don't have it.
src/encoding.c - handles unicode encodings
src/file.c - the main program
src/file.h - header file
src/fsmagic.c - first set of tests the program runs, based on filesystem info
src/funcs.c - utilility functions
-src/getopt_long.c - used for OS/2 specific application type magic
+src/getopt_long.c - for systems that don't have it.
+src/getline.c - for systems that don't have it.
src/is_tar.c, tar.h - knows about tarchives (courtesy John Gilmore).
src/names.h - header file for ascmagic.c
src/magic.c - the libmagic api
@@ -84,14 +88,13 @@ src/print.c - print results, errors, war
src/readcdf.c - CDF wrapper.
src/readelf.[ch] - Stand-alone elf parsing code.
src/softmagic.c - 2nd set of tests, based on /etc/magic
-src/strlcat.c - used for OS/2 specific application type magic
-src/strlcpy.c - used for OS/2 specific application type magic
-src/vasprintf.c - used for OS/2 specific application type magic
-doc/file.1 - man page for the command
-doc/magic.4 - man page for the magic file, courtesy Guy Harris.
+src/strlcat.c - for systems that don't have it.
+src/strlcpy.c - for systems that don't have it.
+src/vasprintf.c - for systems that don't have it.
+doc/file.man - man page for the command
+doc/magic.man - man page for the magic file, courtesy Guy Harris.
Install as magic.4 on USG and magic.5 on V7 or Berkeley; cf Makefile.
Magdir - directory of /etc/magic pieces
-
------------------------------------------------------------------------------
If you submit a new magic entry please make sure you read the following
--- file-5.12/doc/file.man 2012-11-13 17:32:01.000000000 +0100
+++ upstream/doc/file.man 2013-01-21 16:12:12.893533522 +0100
@@ -557,16 +557,20 @@ or the mailing list at
.Sh TODO
.Pp
Fix output so that tests for MIME and APPLE flags are not needed all
-over the place, and actual output is only done in one place. This
-needs a design. Suggestion: push possible outputs on to a list, then
-pick the last-pushed (most specific, one hopes) value at the end, or
-use a default if the list is empty. This should not slow down evaluation.
+over the place, and actual output is only done in one place.
+This needs a design.
+Suggestion: push possible outputs on to a list, then pick the
+last-pushed (most specific, one hopes) value at the end, or
+use a default if the list is empty.
+This should not slow down evaluation.
.Pp
-Continue to squash all magic bugs. See Debian BTS for a good source.
+Continue to squash all magic bugs.
+See Debian BTS for a good source.
.Pp
Store arbitrarily long strings, for example for %s patterns, so that
-they can be printed out. Fixes Debian bug #271672. Would require more
-complex store/load code in apprentice.
+they can be printed out.
+Fixes Debian bug #271672.
+Would require more complex store/load code in apprentice.
.Pp
Add syntax for relative offsets after current level (Debian bug #466037).
.Pp
@@ -579,8 +583,9 @@ Add an option to print URLs for the sour
.Pp
Combine script searches and add a way to map executable names to MIME
types (e.g. have a magic value for !:mime which causes the resulting
-string to be looked up in a table). This would avoid adding the same
-magic repeatedly for each new hash-bang interpreter.
+string to be looked up in a table).
+This would avoid adding the same magic repeatedly for each new
+hash-bang interpreter.
.Pp
Fix
.Dq name
--- file-5.12/doc/libmagic.man 2011-12-19 18:49:31.000000000 +0100
+++ upstream/doc/libmagic.man 2013-01-21 16:12:12.893533522 +0100
@@ -25,7 +25,7 @@
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.Dd December 19, 2011
+.Dd January 6, 2012
.Dt LIBMAGIC 3
.Os
.Sh NAME
@@ -37,7 +37,9 @@
.Nm magic_setflags ,
.Nm magic_check ,
.Nm magic_compile ,
-.Nm magic_load
+.Nm magic_list ,
+.Nm magic_load ,
+.Nm magic_version
.Nd Magic number recognition library
.Sh LIBRARY
.Lb libmagic
@@ -67,6 +69,8 @@
.Fn magic_list "magic_t cookie" "const char *filename"
.Ft int
.Fn magic_load "magic_t cookie" "const char *filename"
+.Ft int
+.Fn magic_version "void"
.Sh DESCRIPTION
These functions
operate on the magic database file
@@ -246,6 +250,16 @@ If that variable is not set, the default
adds
.Dq .mgc
to the database filename as appropriate.
+.Pp
+The
+.Fn magic_version
+command returns the version number of this library which is compiled into
+the shared library using the constant
+.Dv MAGIC_VERSION
+from
+.In magic.h .
+This can be used by client programs to verify that the version they compile
+against is the same as the version that they run against.
.Sh RETURN VALUES
The function
.Fn magic_open
@@ -276,6 +290,9 @@ function returns a textual description o
functions, or
.Dv NULL
if there was no error.
+The
+.Fn magic_version
+always returns the version number of the library.
Finally,
.Fn magic_setflags
returns \-1 on systems that don't support
--- file-5.12/doc/magic.man 2012-11-13 17:32:01.000000000 +0100
+++ upstream/doc/magic.man 2013-01-21 16:12:12.893533522 +0100
@@ -1,5 +1,5 @@
-.\" $File: magic.man,v 1.76 2012/11/07 20:29:27 christos Exp $
-.Dd November 7, 2012
+.\" $File: magic.man,v 1.77 2013/01/08 01:37:01 christos Exp $
+.Dd January 7, 2013
.Dt MAGIC __FSECTION__
.Os
.\" install as magic.4 on USG, magic.5 on V7, Berkeley and Linux systems.
@@ -265,6 +265,67 @@ This is intended to be used with the tes
no other matches.
.El
.Pp
+For compatibility with the Single
+.Ux
+Standard, the type specifiers
+.Dv dC
+and
+.Dv d1
+are equivalent to
+.Dv byte ,
+the type specifiers
+.Dv uC
+and
+.Dv u1
+are equivalent to
+.Dv ubyte ,
+the type specifiers
+.Dv dS
+and
+.Dv d2
+are equivalent to
+.Dv short ,
+the type specifiers
+.Dv uS
+and
+.Dv u2
+are equivalent to
+.Dv ushort ,
+the type specifiers
+.Dv dI ,
+.Dv dL ,
+and
+.Dv d4
+are equivalent to
+.Dv long ,
+the type specifiers
+.Dv uI ,
+.Dv uL ,
+and
+.Dv u4
+are equivalent to
+.Dv ulong ,
+the type specifier
+.Dv d8
+is equivalent to
+.Dv quad ,
+the type specifier
+.Dv u8
+is equivalent to
+.Dv uquad ,
+and the type specifier
+.Dv s
+is equivalent to
+.Dv string .
+In addition, the type specifier
+.Dv dQ
+is equivalent to
+.Dv quad
+and the type specifier
+.Dv uQ
+is equivalent to
+.Dv uquad .
+.Pp
Each top-level magic pattern (see below for an explanation of levels)
is classified as text or binary according to the types used.
Types
@@ -570,19 +631,41 @@ The formats
.Dv melong ,
.Dv short ,
.Dv beshort ,
-.Dv leshort ,
-.Dv date ,
-.Dv bedate ,
-.Dv medate ,
-.Dv ledate ,
-.Dv beldate ,
-.Dv leldate ,
-and
-.Dv meldate
-are system-dependent; perhaps they should be specified as a number
-of bytes (2B, 4B, etc),
-since the files being recognized typically come from
-a system on which the lengths are invariant.
+and
+.Dv leshort
+do not depend on the length of the C data types
+.Dv short
+and
+.Dv long
+on the platform, even though the Single
+.Ux
+Specification implies that they do. However, as OS X Mountain Lion has
+passed the Single
+.Ux
+Specification validation suite, and supplies a version of
+.Xr file __CSECTION__
+in which they do not depend on the sizes of the C data types and that is
+built for a 64-bit environment in which
+.Dv long
+is 8 bytes rather than 4 bytes, presumably the validation suite does not
+test whether, for example
+.Dv long
+refers to an item with the same size as the C data type
+.Dv long .
+There should probably be
+.Dv type
+names
+.Dv int8 ,
+.Dv uint8 ,
+.Dv int16 ,
+.Dv uint16 ,
+.Dv int32 ,
+.Dv uint32 ,
+.Dv int64 ,
+and
+.Dv uint64 ,
+and specified-byte-order variants of them,
+to make it clearer that those types have specified widths.
.\"
.\" From: guy@sun.uucp (Guy Harris)
.\" Newsgroups: net.bugs.usg
--- file-5.12/magic/Magdir/alpha 1970-01-01 01:00:00.000000000 +0100
+++ upstream/magic/Magdir/alpha 2013-01-21 16:12:12.901972883 +0100
@@ -0,0 +1,32 @@
+
+#------------------------------------------------------------------------------
+# $File$
+# alpha architecture description
+#
+
+0 leshort 0603 COFF format alpha
+>22 leshort&030000 !020000 executable
+>24 leshort 0410 pure
+>24 leshort 0413 paged
+>22 leshort&020000 !0 dynamically linked
+>16 lelong !0 not stripped
+>16 lelong 0 stripped
+>22 leshort&030000 020000 shared library
+>24 leshort 0407 object
+>27 byte x - version %d
+>26 byte x .%d
+>28 byte x -%d
+
+# Basic recognition of Digital UNIX core dumps - Mike Bremford <mike@opac.bl.uk>
+#
+# The actual magic number is just "Core", followed by a 2-byte version
+# number; however, treating any file that begins with "Core" as a Digital
+# UNIX core dump file may produce too many false hits, so we include one
+# byte of the version number as well; DU 5.0 appears only to be up to
+# version 2.
+#
+0 string Core\001 Alpha COFF format core dump (Digital UNIX)
+>24 string >\0 \b, from '%s'
+0 string Core\002 Alpha COFF format core dump (Digital UNIX)
+>24 string >\0 \b, from '%s'
+
--- file-5.12/magic/Magdir/aout 1970-01-01 01:00:00.000000000 +0100
+++ upstream/magic/Magdir/aout 2013-01-21 16:12:12.901972883 +0100
@@ -0,0 +1,46 @@
+
+#------------------------------------------------------------------------------
+# $File$
+# aout: file(1) magic for a.out executable/object/etc entries that
+# handle executables on multiple platforms.
+#
+
+#
+# Little-endian 32-bit-int a.out, merged from bsdi (for BSD/OS, from
+# BSDI), netbsd, and vax (for UNIX/32V and BSD)
+#
+# XXX - is there anything we can look at to distinguish BSD/OS 386 from
+# NetBSD 386 from various VAX binaries? The BSD/OS shared library flag
+# works only for binaries using shared libraries. Grabbing the entry
+# point from the a.out header, using it to find the first code executed
+# in the program, and looking at that might help.
+#
+0 lelong 0407 a.out little-endian 32-bit executable
+>16 lelong >0 not stripped
+>32 byte 0x6a (uses BSD/OS shared libs)
+
+0 lelong 0410 a.out little-endian 32-bit pure executable
+>16 lelong >0 not stripped
+>32 byte 0x6a (uses BSD/OS shared libs)
+
+0 lelong 0413 a.out little-endian 32-bit demand paged pure executable
+>16 lelong >0 not stripped
+>32 byte 0x6a (uses BSD/OS shared libs)
+
+#
+# Big-endian 32-bit-int a.out, merged from sun (for old 68010 SunOS a.out),
+# mips (for old 68020(!) SGI a.out), and netbsd (for old big-endian a.out).
+#
+# XXX - is there anything we can look at to distinguish old SunOS 68010
+# from old 68020 IRIX from old NetBSD? Again, I guess we could look at
+# the first instruction or instructions in the program.
+#
+0 belong 0407 a.out big-endian 32-bit executable
+>16 belong >0 not stripped
+
+0 belong 0410 a.out big-endian 32-bit pure executable
+>16 belong >0 not stripped
+
+0 belong 0413 a.out big-endian 32-bit demand paged executable
+>16 belong >0 not stripped
+
--- file-5.12/magic/Magdir/archive 2012-11-13 17:32:01.000000000 +0100
+++ upstream/magic/Magdir/archive 2013-01-21 16:12:12.901972883 +0100
@@ -36,7 +36,60 @@
0 string 070701 ASCII cpio archive (SVR4 with no CRC)
0 string 070702 ASCII cpio archive (SVR4 with CRC)
-# Debian package (needs to go before regular portable archives)
+#
+# Various archive formats used by various versions of the "ar"
+# command.
+#
+
+#
+# Original UNIX archive formats.
+# They were written with binary values in host byte order, and
+# the magic number was a host "int", which might have been 16 bits
+# or 32 bits. We don't say "PDP-11" or "VAX", as there might have
+# been ports to little-endian 16-bit-int or 32-bit-int platforms
+# (x86?) using some of those formats; if none existed, feel free
+# to use "PDP-11" for little-endian 16-bit and "VAX" for little-endian
+# 32-bit. There might have been big-endian ports of that sort as
+# well.
+#
+0 leshort 0177555 very old 16-bit-int little-endian archive
+0 beshort 0177555 very old 16-bit-int big-endian archive
+0 lelong 0177555 very old 32-bit-int little-endian archive
+0 belong 0177555 very old 32-bit-int big-endian archive
+
+0 leshort 0177545 old 16-bit-int little-endian archive
+>2 string __.SYMDEF random library
+0 beshort 0177545 old 16-bit-int big-endian archive
+>2 string __.SYMDEF random library
+0 lelong 0177545 old 32-bit-int little-endian archive
+>4 string __.SYMDEF random library
+0 belong 0177545 old 32-bit-int big-endian archive
+>4 string __.SYMDEF random library
+
+#
+# From "pdp" (but why a 4-byte quantity?)
+#
+0 lelong 0x39bed PDP-11 old archive
+0 lelong 0x39bee PDP-11 4.0 archive
+
+#
+# XXX - what flavor of APL used this, and was it a variant of
+# some ar archive format? It's similar to, but not the same
+# as, the APL workspace magic numbers in pdp.
+#
+0 long 0100554 apl workspace
+
+#
+# System V Release 1 portable(?) archive format.
+#
+0 string =<ar> System V Release 1 ar archive
+!:mime application/x-archive
+
+#
+# Debian package; it's in the portable archive format, and needs to go
+# before the entry for regular portable archives, as it's recognized as
+# a portable archive whose first member has a name beginning with
+# "debian".
#
0 string =!<arch>\ndebian
!:mime application/x-debian-package
@@ -53,23 +106,14 @@
#>84 string gz \b, uses gzip compression
#>136 ledate x created: %s
-0 string =!<thin>\n thin archive with
->68 belong 0 no symbol entries
->68 belong 1 %d symbol entry
->68 belong >1 %d symbol entries
-
-# other archives
-0 long 0177555 very old archive
-0 short 0177555 very old PDP-11 archive
-0 long 0177545 old archive
-0 short 0177545 old PDP-11 archive
-0 long 0100554 apl workspace
-0 string =<ar> archive
-!:mime application/x-archive
-
-# MIPS archive (needs to go before regular portable archives)
+#
+# MIPS archive; they're in the portable archive format, and need to go
+# before the entry for regular portable archives, as it's recognized as
+# a portable archive whose first member has a name beginning with
+# "__________E".
#
0 string =!<arch>\n__________E MIPS archive
+!:mime application/x-archive
>20 string U with MIPS Ucode members
>21 string L with MIPSEL members
>21 string B with MIPSEB members
@@ -80,56 +124,26 @@
0 search/1 -h- Software Tools format archive text
#
-# XXX - why are there multiple <ar> thingies? Note that 0x213c6172 is
-# "!<ar", so, for new-style (4.xBSD/SVR2andup) archives, we have:
-#
-# 0 string =!<arch> current ar archive
-# 0 long 0x213c6172 archive file
-#
-# and for SVR1 archives, we have:
-#
-# 0 string \<ar> System V Release 1 ar archive
-# 0 string =<ar> archive
-#
-# XXX - did Aegis really store shared libraries, breakpointed modules,
-# and absolute code program modules in the same format as new-style
-# "ar" archives?
+# BSD/SVR2-and-later portable archive formats.
#
0 string =!<arch> current ar archive
!:mime application/x-archive
>8 string __.SYMDEF random library
+>68 string __.SYMDEF\ SORTED random library
>0 belong =65538 - pre SR9.5
>0 belong =65539 - post SR9.5
>0 beshort 2 - object archive
>0 beshort 3 - shared library module
>0 beshort 4 - debug break-pointed module
>0 beshort 5 - absolute code program module
-0 string \<ar> System V Release 1 ar archive
-0 string =<ar> archive
-#
-# XXX - from "vax", which appears to collect a bunch of byte-swapped
-# thingies, to help you recognize VAX files on big-endian machines;
-# with "leshort", "lelong", and "string", that's no longer necessary....
-#
-0 belong 0x65ff0000 VAX 3.0 archive
-0 belong 0x3c61723e VAX 5.0 archive
-#
-0 long 0x213c6172 archive file
-0 lelong 0177555 very old VAX archive
-0 leshort 0177555 very old PDP-11 archive
-#
-# XXX - "pdp" claims that 0177545 can have an __.SYMDEF member and thus
-# be a random library (it said 0xff65 rather than 0177545).
-#
-0 lelong 0177545 old VAX archive
->8 string __.SYMDEF random library
-0 leshort 0177545 old PDP-11 archive
->8 string __.SYMDEF random library
+
#
-# From "pdp" (but why a 4-byte quantity?)
+# "Thin" archive, as can be produced by GNU ar.
#
-0 lelong 0x39bed PDP-11 old archive
-0 lelong 0x39bee PDP-11 4.0 archive
+0 string =!<thin>\n thin archive with
+>68 belong 0 no symbol entries
+>68 belong 1 %d symbol entry
+>68 belong >1 %d symbol entries
# ARC archiver, from Daniel Quinlan (quinlan@yggdrasil.com)
#
@@ -666,11 +680,10 @@
!:mime application/vnd.oasis.opendocument.image-template
# EPUB (OEBPS) books using OCF (OEBPS Container Format)
-# From: Adam Buchbinder <adam.buchbinder@gmail.com>
# http://www.idpf.org/ocf/ocf1.0/download/ocf10.htm, section 4.
-# (mimetype contains "application/epub+zip")
->>50 string epub+zip EPUB ebook data
-!:mime application/epub+zip
+# From: Ralf Brown <ralf.brown@gmail.com>
+>0x1E string mimetypeapplication/epub+zip EPUB document
+!:mime application/epub+zip
# Catch other ZIP-with-mimetype formats
# In a ZIP file, the bytes immediately after a member's contents are
@@ -895,12 +908,6 @@
# archive must be an uncompressed file called 'mimetype' with contents
# 'application/epub+zip'
-# start by checking that this is a ZIP archive, then check for the
-# proper mimetype file
-# From: Ralf Brown <ralf.brown@gmail.com>
-0 string PK\003\004
->0x1E string mimetypeapplication/epub+zip EPUB document
-!:mime application/epub+zip
# From: "Michał Górny" <mgorny@gentoo.org>
# ZPAQ: http://mattmahoney.net/dc/zpaq.html
--- file-5.12/magic/Magdir/assembler 2012-11-06 21:37:19.000000000 +0100
+++ upstream/magic/Magdir/assembler 2013-01-21 16:12:12.901972883 +0100
@@ -1,18 +1,18 @@
#------------------------------------------------------------------------------
-# $File: assembler,v 1.2 2012/10/31 18:41:42 christos Exp $
+# $File: assembler,v 1.3 2013/01/04 17:23:28 christos Exp $
# make: file(1) magic for assembler source
#
-0 regex \^[\020\t]*\.asciiz\? assembler source text
+0 regex \^[\020\t]*\\.asciiz assembler source text
!:mime text/x-asm
-0 regex \^[\020\t]*\.byte assembler source text
+0 regex \^[\020\t]*\\.byte assembler source text
!:mime text/x-asm
-0 regex \^[\020\t]*\.even assembler source text
+0 regex \^[\020\t]*\\.even assembler source text
!:mime text/x-asm
-0 regex \^[\020\t]*\.globl assembler source text
+0 regex \^[\020\t]*\\.globl assembler source text
!:mime text/x-asm
-0 regex \^[\020\t]*\.text assembler source text
+0 regex \^[\020\t]*\\.text assembler source text
!:mime text/x-asm
-0 regex \^[\020\t]*\.file assembler source text
+0 regex \^[\020\t]*\\.file assembler source text
!:mime text/x-asm
-0 regex \^[\020\t]*\.type assembler source text
+0 regex \^[\020\t]*\\.type assembler source text
!:mime text/x-asm
--- file-5.12/magic/Magdir/bsdi 2009-09-19 18:28:08.000000000 +0200
+++ upstream/magic/Magdir/bsdi 2013-01-21 16:12:12.921512911 +0100
@@ -2,24 +2,14 @@
#------------------------------------------------------------------------------
# $File: bsdi,v 1.5 2009/09/19 16:28:08 christos Exp $
# bsdi: file(1) magic for BSD/OS (from BSDI) objects
+# Some object/executable formats use the same magic numbers as are used
+# in other OSes; those are handled by entries in aout.
#
0 lelong 0314 386 compact demand paged pure executable
>16 lelong >0 not stripped
>32 byte 0x6a (uses shared libs)
-0 lelong 0407 386 executable
->16 lelong >0 not stripped
->32 byte 0x6a (uses shared libs)
-
-0 lelong 0410 386 pure executable
->16 lelong >0 not stripped
->32 byte 0x6a (uses shared libs)
-
-0 lelong 0413 386 demand paged pure executable
->16 lelong >0 not stripped
->32 byte 0x6a (uses shared libs)
-
# same as in SunOS 4.x, except for static shared libraries
0 belong&077777777 0600413 sparc demand paged
>0 byte &0x80
--- file-5.12/magic/Magdir/cafebabe 2012-10-31 19:31:28.000000000 +0100
+++ upstream/magic/Magdir/cafebabe 2013-01-21 16:12:12.929502699 +0100
@@ -1,13 +1,13 @@
#------------------------------------------------------------------------------
-# $File: cafebabe,v 1.10 2012/10/31 16:32:01 christos Exp $
+# $File: cafebabe,v 1.11 2013/01/04 23:27:55 christos Exp $
# Cafe Babes unite!
#
-# Since Java bytecode and Mach-O fat-files have the same magic number, the test
-# must be performed in the same "magic" sequence to get both right. The long
-# at offset 4 in a mach-O fat file tells the number of architectures; the short at
-# offset 4 in a Java bytecode file is the JVM minor version and the
-# short at offset 6 is the JVM major version. Since there are only
+# Since Java bytecode and Mach-O universal binaries have the same magic number,
+# the test must be performed in the same "magic" sequence to get both right.
+# The long at offset 4 in a Mach-O universal binary tells the number of
+# architectures; the short at offset 4 in a Java bytecode file is the JVM minor
+# version and the short at offset 6 is the JVM major version. Since there are only
# only 18 labeled Mach-O architectures at current, and the first released
# Java class format was version 43.0, we can safely choose any number
# between 18 and 39 to test the number of architectures against
@@ -30,14 +30,14 @@
>>4 belong 0x0032 (Java 1.6)
0 belong 0xcafed00d JAR compressed with pack200,
->>5 byte x version %d.
->>4 byte x \b%d
+>5 byte x version %d.
+>4 byte x \b%d
!:mime application/x-java-pack200
0 belong 0xcafed00d JAR compressed with pack200,
->>5 byte x version %d.
->>4 byte x \b%d
+>5 byte x version %d.
+>4 byte x \b%d
!:mime application/x-java-pack200
### JAVA END ###
@@ -64,10 +64,10 @@
>0 belong x \b]
0 belong 0xcafebabe
->4 belong 1 Mach-O fat file with 1 architecture:
+>4 belong 1 Mach-O universal binary with 1 architecture:
>>8 use mach-o
>4 belong >1
->>4 belong <20 Mach-O fat file with %ld architectures:
+>>4 belong <20 Mach-O universal binary with %ld architectures:
>>>8 use mach-o
>>>28 use mach-o
>>>4 belong >2
--- file-5.12/magic/Magdir/database 2012-09-06 16:16:05.000000000 +0200
+++ upstream/magic/Magdir/database 2013-01-21 16:12:12.953452459 +0100
@@ -271,14 +271,6 @@
>48 lequad x \b, rnum=%lld
>56 lequad x \b, fsiz=%lld
-# G-IR database made by gobject-introspect toolset,
-# http://live.gnome.org/GObjectIntrospection
-0 string GOBJ\nMETADATA\r\n\032 G-IR binary database
->16 byte x \b, v%d
->17 byte x \b.%d
->20 leshort x \b, %d entries
->22 leshort x \b/%d local
-
# Type: QDBM Quick Database Manager
# From: Benoit Sibaud <bsibaud@april.org>
0 string \\[depot\\]\n\f Quick Database Manager, little endian
--- file-5.12/magic/Magdir/digital 2011-05-11 03:32:28.000000000 +0200
+++ upstream/magic/Magdir/digital 2013-01-21 16:12:12.953452459 +0100
@@ -8,20 +8,20 @@
#
0 leshort 0603
->>24 leshort 0410 COFF format alpha pure
->>24 leshort 0413 COFF format alpha demand paged
->>>22 leshort&030000 !020000 executable
->>>22 leshort&020000 !0 dynamically linked
->>>16 lelong !0 not stripped
->>>16 lelong 0 stripped
->>>27 byte x - version %d
->>>26 byte x \b.%d
->>>28 byte x \b-%d
->>24 leshort 0407 COFF format alpha object
->>>22 leshort&030000 020000 shared library
->>>27 byte x - version %d
->>>26 byte x \b.%d
->>>28 byte x \b-%d
+>24 leshort 0410 COFF format alpha pure
+>24 leshort 0413 COFF format alpha demand paged
+>>22 leshort&030000 !020000 executable
+>>22 leshort&020000 !0 dynamically linked
+>>16 lelong !0 not stripped
+>>16 lelong 0 stripped
+>>27 byte x - version %d
+>>26 byte x \b.%d
+>>28 byte x \b-%d
+>24 leshort 0407 COFF format alpha object
+>>22 leshort&030000 020000 shared library
+>>27 byte x - version %d
+>>26 byte x \b.%d
+>>28 byte x \b-%d
# Basic recognition of Digital UNIX core dumps - Mike Bremford <mike@opac.bl.uk>
#
--- file-5.12/magic/Magdir/gnome 1970-01-01 01:00:00.000000000 +0100
+++ upstream/magic/Magdir/gnome 2013-01-21 16:12:12.997452122 +0100
@@ -0,0 +1,59 @@
+
+#------------------------------------------------------------------------------
+# $File: gnome,v 1.3 2012/06/21 01:19:51 christos Exp $
+# GNOME related files
+
+# Contributed by Josh Triplett
+# FIXME: Could be simplified if pstring supported two-byte counts
+0 string GnomeKeyring\n\r\0\n GNOME keyring
+>&0 ubyte 0 \b, major version 0
+>>&0 ubyte 0 \b, minor version 0
+>>>&0 ubyte 0 \b, crypto type 0 (AES)
+>>>&0 ubyte >0 \b, crypto type %hhu (unknown)
+>>>&1 ubyte 0 \b, hash type 0 (MD5)
+>>>&1 ubyte >0 \b, hash type %hhu (unknown)
+>>>&2 ubelong 0xFFFFFFFF \b, name NULL
+>>>&2 ubelong !0xFFFFFFFF
+>>>>&-4 ubelong >255 \b, name too long for file's pstring type
+>>>>&-4 ubelong <256
+>>>>>&-1 pstring x \b, name "%s"
+>>>>>>&0 ubeqdate x \b, last modified %s
+>>>>>>&8 ubeqdate x \b, created %s
+>>>>>>&16 ubelong &1
+>>>>>>>&0 ubelong x \b, locked if idle for %u seconds
+>>>>>>&16 ubelong ^1 \b, not locked if idle
+>>>>>>&24 ubelong x \b, hash iterations %u
+>>>>>>&28 ubequad x \b, salt %llu
+>>>>>>&52 ubelong x \b, %u item(s)
+
+# From: Alex Beregszaszi <alex@fsn.hu>
+4 string gtktalog GNOME Catalogue (gtktalog)
+>13 string >\0 version %s
+
+# Summary: GStreamer binary registry
+# Extension: .bin
+# Submitted by: Josh Triplett <josh@joshtriplett.org>
+0 belong 0xc0def00d GStreamer binary registry
+>4 string x \b, version %s
+
+# GVariant Database file
+# By Elan Ruusam=E4e <glen@delfi.ee>
+# https://github.com/GNOME/gvdb/blob/master/gvdb-format.h
+# It's always "GVariant", it's byte swapped on incompatible archs
+# See https://github.com/GNOME/gvdb/blob/master/gvdb-builder.c
+# file_builder_serialise()
+# http://developer.gnome.org/glib/2.34/glib-GVariant.html#GVariant
+0 string GVariant GVariant Database file,
+# version is never filled. probably future extension
+>8 lelong x version %d
+# not sure are these usable, so commented out
+#>>16 lelong x start %d,
+#>>>20 lelong x end %d
+
+# G-IR database made by gobject-introspect toolset,
+# http://live.gnome.org/GObjectIntrospection
+0 string GOBJ\nMETADATA\r\n\032 G-IR binary database
+>16 byte x \b, v%d
+>17 byte x \b.%d
+>20 leshort x \b, %d entries
+>22 leshort x \b/%d local
--- file-5.12/magic/Magdir/gnome-keyring 2012-06-21 03:19:51.000000000 +0200
+++ upstream/magic/Magdir/gnome-keyring 1970-01-01 01:00:00.000000000 +0100
@@ -1,26 +0,0 @@
-
-#------------------------------------------------------------------------------
-# $File: gnome-keyring,v 1.3 2012/06/21 01:19:51 christos Exp $
-# GNOME keyring
-# Contributed by Josh Triplett
-# FIXME: Could be simplified if pstring supported two-byte counts
-0 string GnomeKeyring\n\r\0\n GNOME keyring
->&0 ubyte 0 \b, major version 0
->>&0 ubyte 0 \b, minor version 0
->>>&0 ubyte 0 \b, crypto type 0 (AES)
->>>&0 ubyte >0 \b, crypto type %hhu (unknown)
->>>&1 ubyte 0 \b, hash type 0 (MD5)
->>>&1 ubyte >0 \b, hash type %hhu (unknown)
->>>&2 ubelong 0xFFFFFFFF \b, name NULL
->>>&2 ubelong !0xFFFFFFFF
->>>>&-4 ubelong >255 \b, name too long for file's pstring type
->>>>&-4 ubelong <256
->>>>>&-1 pstring x \b, name "%s"
->>>>>>&0 ubeqdate x \b, last modified %s
->>>>>>&8 ubeqdate x \b, created %s
->>>>>>&16 ubelong &1
->>>>>>>&0 ubelong x \b, locked if idle for %u seconds
->>>>>>&16 ubelong ^1 \b, not locked if idle
->>>>>>&24 ubelong x \b, hash iterations %u
->>>>>>&28 ubequad x \b, salt %llu
->>>>>>&52 ubelong x \b, %u item(s)
--- file-5.12/magic/Magdir/ibm6000 2012-08-10 17:06:07.000000000 +0200
+++ upstream/magic/Magdir/ibm6000 2013-01-21 16:12:12.997452122 +0100
@@ -21,6 +21,7 @@
0 beshort 0x01f7 64-bit XCOFF executable or object module
>20 belong 0 not stripped
4 belong &0x0feeddb0 AIX core file
+>1 byte &0x01 fulldump
>7 byte &0x01 32-bit
>>0x6e0 string >\0 \b, %s
>7 byte &0x02 64-bit
--- file-5.12/magic/Magdir/icc 1970-01-01 01:00:00.000000000 +0100
+++ upstream/magic/Magdir/icc 2013-01-21 16:12:13.021452655 +0100
@@ -0,0 +1,51 @@
+
+#------------------------------------------------------------------------------
+# $File$
+# icc: file(1) magic for International Color Consortium file formats
+
+#
+# Color profiles as per the ICC's "Image technology colour management -
+# Architecture, profile format, and data structure" specification.
+# See
+#
+# http://www.color.org/specification/ICC1v43_2010-12.pdf
+#
+# for Specification ICC.1:2010 (Profile version 4.3.0.0).
+#
+# Bytes 36 to 39 contain a generic profile file signature of "acsp";
+# bytes 40 to 43 "may be used to identify the primary platform/operating
+# system framework for which the profile was created".
+#
+# There are other fields that might be worth dumping as well.
+#
+
+# This appears to be what's used for Apple ColorSync profiles.
+# Instead of adding that, Apple just changed the generic "acsp" entry
+# to be for "ColorSync ICC Color Profile" rather than "Kodak Color
+# Management System, ICC Profile".
+# Yes, it's "APPL", not "AAPL"; see the spec.
+36 string acspAPPL ColorSync ICC Profile
+!:mime application/vnd.iccprofile
+
+# Microsoft ICM color profile
+36 string acspMSFT Microsoft ICM Color Profile
+!:mime application/vnd.iccprofile
+
+# Yes, that's a blank after "SGI".
+36 string acspSGI\ SGI ICC Profile
+!:mime application/vnd.iccprofile
+
+# XXX - is this what's used for the Sun KCMS or not? The standard file
+# uses just "acsp" for that, but Apple's file uses it for "ColorSync",
+# and there *is* an identified "primary platform" value of SUNW.
+36 string acspSUNW Sun KCMS ICC Profile
+!:mime application/vnd.iccprofile
+
+# Any other profile.
+# XXX - should we use "acsp\0\0\0\0" for "no primary platform" profiles,
+# and use "acsp" for everything else and dump the "primary platform"
+# string in those cases?
+36 string acsp ICC Profile
+!:mime application/vnd.iccprofile
+
+
--- file-5.12/magic/Magdir/linux 2012-10-29 18:36:49.000000000 +0100
+++ upstream/magic/Magdir/linux 2013-01-21 16:12:13.057952501 +0100
@@ -98,6 +98,7 @@
# All known start with: b8 c0 07 8e d8 b8 00 90 8e c0 b9 00 01 29 f6 29
# Linux kernel boot images (i386 arch) (Wolfram Kleff)
514 string HdrS Linux kernel
+!:strength + 5
>510 leshort 0xAA55 x86 boot executable
>>518 leshort >0x1ff
>>>529 byte 0 zImage,
--- file-5.12/magic/Magdir/llvm 2010-10-07 03:13:42.000000000 +0200
+++ upstream/magic/Magdir/llvm 2013-01-21 16:12:13.057952501 +0100
@@ -9,5 +9,13 @@
0 string llvc0 LLVM byte-codes, null compression
0 string llvc1 LLVM byte-codes, gzip compression
0 string llvc2 LLVM byte-codes, bzip2 compression
-0 string \xde\xc0\x17\x0b LLVM bitcode, wrapper
-0 string BC\xc0\xde LLVM bitcode
+
+0 lelong 0x0b17c0de LLVM bitcode, wrapper
+# Are these Mach-O ABI values? They appear to be.
+>16 lelong 0x01000007 x86_64
+>16 lelong 0x00000007 i386
+>16 lelong 0x00000012 ppc
+>16 lelong 0x01000012 ppc64
+>16 lelong 0x0000000c arm
+
+0 string BC\xc0\xde LLVM IR bitcode
--- file-5.12/magic/Magdir/lua 2009-09-19 18:28:10.000000000 +0200
+++ upstream/magic/Magdir/lua 2013-01-21 16:12:13.057952501 +0100
@@ -19,3 +19,4 @@
0 string \033Lua Lua bytecode,
>4 byte 0x50 version 5.0
>4 byte 0x51 version 5.1
+>4 byte 0x52 version 5.2
--- file-5.12/magic/Magdir/mach 2012-11-06 21:37:19.000000000 +0100
+++ upstream/magic/Magdir/mach 2013-01-21 16:12:13.085452498 +0100
@@ -1,118 +1,191 @@
#------------------------------------------------------------
-# $File: mach,v 1.12 2012/11/01 04:26:40 christos Exp $
+# $File: mach,v 1.13 2013/01/04 21:46:59 christos Exp $
# Mach has two magic numbers, 0xcafebabe and 0xfeedface.
# Unfortunately the first, cafebabe, is shared with
# Java ByteCode, so they are both handled in the file "cafebabe".
# The "feedface" ones are handled herein.
#------------------------------------------------------------
-0 name mach-o-bed
+0 name mach-o-be
>0 byte 0xcf 64-bit
->4 belong <0
->>4 belong x architecture=%ld
->4 belong 1
->>8 belong 0 vax
->>8 belong 1 vax11/780
->>8 belong 2 vax11/785
->>8 belong 3 vax11/750
->>8 belong 4 vax11/730
->>8 belong 5 uvaxI
->>8 belong 6 uvaxII
->>8 belong 7 vax8200
->>8 belong 8 vax8500
->>8 belong 9 vax8600
->>8 belong 10 vax8650
->>8 belong 11 vax8800
->>8 belong 12 uvaxIII
->4 belong 2 romp
->4 belong 3 architecture=3
->4 belong 4 ns32032
->4 belong 5 ns32332
->4 belong 6 m68k
->4 belong 7
->>8 belong 3 i386
->>8 belong 4 i486
->>8 belong 132 i486sx
->>8 belong 5 i586
->>8 belong 8 pentium_3
->>8 belong 9 pentiumM
->>8 belong 10 pentiumIV
->>8 belong 11 itanium
->>8 belong 12 xeon
->>8 belong 14 pentiumIV_M
->>8 belong 15 itanium2
->>8 belong 21 pentiumpro
->>8 belong 23 pentiumIII
->>8 belong 24 pentium_3_M
->>8 belong 25 pentiumV
->>8 belong 26 xeon_mp
->>8 belong 40 pentium_3_xeon
->>8 belong 113 celeron
->>8 belong 119 celeron_mobile
->4 belong 8 mips
->>8 belong 1 R2300
->>8 belong 2 R2600
->>8 belong 3 R2800
->>8 belong 4 R2000a
->>8 belong 5 R2000
->>8 belong 6 R3000a
->>8 belong 7 R3000
->4 belong 9 ns32532
->4 belong 10 mc98000
->4 belong 11 hppa
->>8 belong 0 7100
->>8 belong 1 7100LC
->4 belong 12
->>8 belong 0 arm
->>8 belong 1 arm_v4t
->>8 belong 2 arm_v6
->>8 belong 3 arm_v5tej
->>8 belong 4 arm_xscale
->>8 belong 5 arm_v7
->>8 belong 6 arm_v7f
->>8 belong 7 arm_v7k
->4 belong 13
->>8 belong 0 mc88000
->>8 belong 1 mc88100
->>8 belong 2 mc88110
->4 belong 14 sparc
->4 belong 15 i860g
->4 belong 16 alpha
->4 belong 17 rs6000
->4 belong 18
->>8 belong 0 ppc
->>8 belong 1 ppc_601
->>8 belong 2 ppc_602
->>8 belong 3 ppc_603
->>8 belong 4 ppc_603e
->>8 belong 5 ppc_603ev
->>8 belong 6 ppc_604
->>8 belong 7 ppc_604e
->>8 belong 8 ppc_620
->>8 belong 9 ppc_650
->>8 belong 10 ppc_7400
->>8 belong 11 ppc_7450
->>8 belong 100 ppc_970
->4 belong 16777223
->>8 belong 3 x86_64
->>8 belong 4 x86_64_arch1
->4 belong 16777234
->>8 belong 0 ppc64
->>8 belong 1 ppc64_601
->>8 belong 2 ppc64_602
->>8 belong 3 ppc64_603
->>8 belong 4 ppc64_603e
->>8 belong 5 ppc64_603ev
->>8 belong 6 ppc64_604
->>8 belong 7 ppc64_604e
->>8 belong 8 ppc64_620
->>8 belong 9 ppc64_650
->>8 belong 10 ppc64_7400
->>8 belong 11 ppc64_7450
->>8 belong 100 ppc64_970
->4 belong >16777234
->>4 belong x architecture=%ld
+# if set, it's for the 64-bit version of the architecture
+# yes, this is separate from the low-order magic number bit
+# it's also separate from the "64-bit libraries" bit in the
+# upper 8 bits of the CPU subtype
+>4 belong&0x01000000 0
+#
+# 32-bit ABIs.
+#
+# 1 vax
+>>4 belong&0x00ffffff 1
+>>>8 belong&0x00ffffff 0 vax
+>>>8 belong&0x00ffffff 1 vax11/780
+>>>8 belong&0x00ffffff 2 vax11/785
+>>>8 belong&0x00ffffff 3 vax11/750
+>>>8 belong&0x00ffffff 4 vax11/730
+>>>8 belong&0x00ffffff 5 uvaxI
+>>>8 belong&0x00ffffff 6 uvaxII
+>>>8 belong&0x00ffffff 7 vax8200
+>>>8 belong&0x00ffffff 8 vax8500
+>>>8 belong&0x00ffffff 9 vax8600
+>>>8 belong&0x00ffffff 10 vax8650
+>>>8 belong&0x00ffffff 11 vax8800
+>>>8 belong&0x00ffffff 12 uvaxIII
+>>>8 belong&0x00ffffff >12 vax subarchitecture=%ld
+>>4 belong&0x00ffffff 2 romp
+>>4 belong&0x00ffffff 3 architecture=3
+>>4 belong&0x00ffffff 4 ns32032
+>>4 belong&0x00ffffff 5 ns32332
+>>4 belong&0x00ffffff 6 m68k
+# 7 x86
+>>4 belong&0x00ffffff 7
+>>>8 belong&0x0000000f 3 i386
+>>>8 belong&0x0000000f 4 i486
+>>>>8 belong&0x00fffff0 0
+>>>>8 belong&0x00fffff0 0x80 \bsx
+>>>8 belong&0x0000000f 5 i586
+>>>8 belong&0x0000000f 6
+>>>>8 belong&0x00fffff0 0 p6
+>>>>8 belong&0x00fffff0 0x10 pentium_pro
+>>>>8 belong&0x00fffff0 0x20 pentium_2_m0x20
+>>>>8 belong&0x00fffff0 0x30 pentium_2_m3
+>>>>8 belong&0x00fffff0 0x40 pentium_2_m0x40
+>>>>8 belong&0x00fffff0 0x50 pentium_2_m5
+>>>>8 belong&0x00fffff0 >0x50 pentium_2_m0x%lx
+>>>8 belong&0x0000000f 7 celeron
+>>>>8 belong&0x00fffff0 0x00 \b_m0x%lx
+>>>>8 belong&0x00fffff0 0x10 \b_m0x%lx
+>>>>8 belong&0x00fffff0 0x20 \b_m0x%lx
+>>>>8 belong&0x00fffff0 0x30 \b_m0x%lx
+>>>>8 belong&0x00fffff0 0x40 \b_m0x%lx
+>>>>8 belong&0x00fffff0 0x50 \b_m0x%lx
+>>>>8 belong&0x00fffff0 0x60
+>>>>8 belong&0x00fffff0 0x70 \b_mobile
+>>>>8 belong&0x00fffff0 >0x70 \b_m0x%lx
+>>>8 belong&0x0000000f 8 pentium_3
+>>>>8 belong&0x00fffff0 0x00
+>>>>8 belong&0x00fffff0 0x10 \b_m
+>>>>8 belong&0x00fffff0 0x20 \b_xeon
+>>>>8 belong&0x00fffff0 >0x20 \b_m0x%lx
+>>>8 belong&0x0000000f 9 pentiumM
+>>>>8 belong&0x00fffff0 0x00
+>>>>8 belong&0x00fffff0 >0x00 \b_m0x%lx
+>>>8 belong&0x0000000f 10 pentium_4
+>>>>8 belong&0x00fffff0 0x00
+>>>>8 belong&0x00fffff0 0x10 \b_m
+>>>>8 belong&0x00fffff0 >0x10 \b_m0x%lx
+>>>8 belong&0x0000000f 11 itanium
+>>>>8 belong&0x00fffff0 0x00
+>>>>8 belong&0x00fffff0 0x10 \b_2
+>>>>8 belong&0x00fffff0 >0x10 \b_m0x%lx
+>>>8 belong&0x0000000f 12 xeon
+>>>>8 belong&0x00fffff0 0x00
+>>>>8 belong&0x00fffff0 0x10 \b_mp
+>>>>8 belong&0x00fffff0 >0x10 \b_m0x%lx
+>>>8 belong&0x0000000f >12 ia32 family=%ld
+>>>>8 belong&0x00fffff0 0x00
+>>>>8 belong&0x00fffff0 >0x00 model=%lx
+>>4 belong&0x00ffffff 8 mips
+>>>8 belong&0x00ffffff 1 R2300
+>>>8 belong&0x00ffffff 2 R2600
+>>>8 belong&0x00ffffff 3 R2800
+>>>8 belong&0x00ffffff 4 R2000a
+>>>8 belong&0x00ffffff 5 R2000
+>>>8 belong&0x00ffffff 6 R3000a
+>>>8 belong&0x00ffffff 7 R3000
+>>>8 belong&0x00ffffff >7 subarchitecture=%ld
+>>4 belong&0x00ffffff 9 ns32532
+>>4 belong&0x00ffffff 10 mc98000
+>>4 belong&0x00ffffff 11 hppa
+>>>8 belong&0x00ffffff 0 7100
+>>>8 belong&0x00ffffff 1 7100LC
+>>>8 belong&0x00ffffff >1 subarchitecture=%ld
+>>4 belong&0x00ffffff 12 arm
+>>>8 belong&0x00ffffff 0
+>>>8 belong&0x00ffffff 1 subarchitecture=%ld
+>>>8 belong&0x00ffffff 2 subarchitecture=%ld
+>>>8 belong&0x00ffffff 3 subarchitecture=%ld
+>>>8 belong&0x00ffffff 4 subarchitecture=%ld
+>>>8 belong&0x00ffffff 5 \b_v4t
+>>>8 belong&0x00ffffff 6 \b_v6
+>>>8 belong&0x00ffffff 7 \b_v5tej
+>>>8 belong&0x00ffffff 8 \b_xscale
+>>>8 belong&0x00ffffff 9 \b_v7
+>>>8 belong&0x00ffffff 10 \b_v7f
+>>>8 belong&0x00ffffff 11 subarchitecture=%ld
+>>>8 belong&0x00ffffff 12 \b_v7k
+>>>8 belong&0x00ffffff >12 subarchitecture=%ld
+# 13 m88k
+>>4 belong&0x00ffffff 13
+>>>8 belong&0x00ffffff 0 mc88000
+>>>8 belong&0x00ffffff 1 mc88100
+>>>8 belong&0x00ffffff 2 mc88110
+>>>8 belong&0x00ffffff >2 mc88000 subarchitecture=%ld
+>>4 belong&0x00ffffff 14 sparc
+>>4 belong&0x00ffffff 15 i860g
+>>4 belong&0x00ffffff 16 alpha
+>>4 belong&0x00ffffff 17 rs6000
+>>4 belong&0x00ffffff 18 ppc
+>>>8 belong&0x00ffffff 0
+>>>8 belong&0x00ffffff 1 \b_601
+>>>8 belong&0x00ffffff 2 \b_602
+>>>8 belong&0x00ffffff 3 \b_603
+>>>8 belong&0x00ffffff 4 \b_603e
+>>>8 belong&0x00ffffff 5 \b_603ev
+>>>8 belong&0x00ffffff 6 \b_604
+>>>8 belong&0x00ffffff 7 \b_604e
+>>>8 belong&0x00ffffff 8 \b_620
+>>>8 belong&0x00ffffff 9 \b_650
+>>>8 belong&0x00ffffff 10 \b_7400
+>>>8 belong&0x00ffffff 11 \b_7450
+>>>8 belong&0x00ffffff 100 \b_970
+>>>8 belong&0x00ffffff >100 subarchitecture=%ld
+>>4 belong&0x00ffffff >18 architecture=%ld
+>4 belong&0x01000000 0x01000000
+#
+# 64-bit ABIs.
+#
+>>4 belong&0x00ffffff 0 64-bit architecture=%ld
+>>4 belong&0x00ffffff 1 64-bit architecture=%ld
+>>4 belong&0x00ffffff 2 64-bit architecture=%ld
+>>4 belong&0x00ffffff 3 64-bit architecture=%ld
+>>4 belong&0x00ffffff 4 64-bit architecture=%ld
+>>4 belong&0x00ffffff 5 64-bit architecture=%ld
+>>4 belong&0x00ffffff 6 64-bit architecture=%ld
+>>4 belong&0x00ffffff 7 x86_64
+>>>8 belong&0x00ffffff 0 subarchitecture=%ld
+>>>8 belong&0x00ffffff 1 subarchitecture=%ld
+>>>8 belong&0x00ffffff 2 subarchitecture=%ld
+>>>8 belong&0x00ffffff 3
+>>>8 belong&0x00ffffff 4 \b_arch1
+>>>8 belong&0x00ffffff >4 subarchitecture=%ld
+>>4 belong&0x00ffffff 8 64-bit architecture=%ld
+>>4 belong&0x00ffffff 9 64-bit architecture=%ld
+>>4 belong&0x00ffffff 10 64-bit architecture=%ld
+>>4 belong&0x00ffffff 11 64-bit architecture=%ld
+>>4 belong&0x00ffffff 12 64-bit architecture=%ld
+>>4 belong&0x00ffffff 13 64-bit architecture=%ld
+>>4 belong&0x00ffffff 14 64-bit architecture=%ld
+>>4 belong&0x00ffffff 15 64-bit architecture=%ld
+>>4 belong&0x00ffffff 16 64-bit architecture=%ld
+>>4 belong&0x00ffffff 17 64-bit architecture=%ld
+>>4 belong&0x00ffffff 18 ppc64
+>>>8 belong&0x00ffffff 0
+>>>8 belong&0x00ffffff 1 \b_601
+>>>8 belong&0x00ffffff 2 \b_602
+>>>8 belong&0x00ffffff 3 \b_603
+>>>8 belong&0x00ffffff 4 \b_603e
+>>>8 belong&0x00ffffff 5 \b_603ev
+>>>8 belong&0x00ffffff 6 \b_604
+>>>8 belong&0x00ffffff 7 \b_604e
+>>>8 belong&0x00ffffff 8 \b_620
+>>>8 belong&0x00ffffff 9 \b_650
+>>>8 belong&0x00ffffff 10 \b_7400
+>>>8 belong&0x00ffffff 11 \b_7450
+>>>8 belong&0x00ffffff 100 \b_970
+>>>8 belong&0x00ffffff >100 subarchitecture=%ld
+>>4 belong&0x00ffffff >18 64-bit architecture=%ld
>12 belong 1 object
>12 belong 2 executable
>12 belong 3 fixed virtual memory shared library
@@ -122,7 +195,9 @@
>12 belong 7 dynamic linker
>12 belong 8 bundle
>12 belong 9 dynamically linked shared library stub
->12 belong >9
+>12 belong 10 dSYM companion file
+>12 belong 11 kext bundle
+>12 belong >11
>>12 belong x filetype=%ld
#
--- file-5.12/magic/Magdir/mail.news 2012-06-21 03:44:52.000000000 +0200
+++ upstream/magic/Magdir/mail.news 2013-01-21 16:12:13.085452498 +0100
@@ -14,9 +14,9 @@
!:mime message/rfc822
0 string/t Pipe\ to mail piping text
!:mime message/rfc822
-0 string/t Delivered-To: SMTP mail text
+0 string/tc delivered-to: SMTP mail text
!:mime message/rfc822
-0 string/t Return-Path: SMTP mail text
+0 string/tc return-path: SMTP mail text
!:mime message/rfc822
0 string/t Path: news text
!:mime message/news
--- file-5.12/magic/Magdir/maple 2009-09-19 18:28:10.000000000 +0200
+++ upstream/magic/Magdir/maple 2013-01-21 16:12:13.093452481 +0100
@@ -33,7 +33,7 @@
# that is {VERSION major_version miunor_version computer_type version_string}
0 string {VERSION\ Maple worksheet
>9 string >\0 version %.1s.
->>>11 string >\0 %.1s
+>>11 string >\0 %.1s
# .mps
0 string \0\0\001$ Maple something
--- file-5.12/magic/Magdir/mips 2011-05-11 03:32:28.000000000 +0200
+++ upstream/magic/Magdir/mips 2013-01-21 16:12:13.113952530 +0100
@@ -1,32 +1,8 @@
#------------------------------------------------------------------------------
-# $File: mips,v 1.7 2011/05/03 01:44:17 christos Exp $
-# mips: file(1) magic for Silicon Graphics (MIPS, IRIS, IRIX, etc.)
-# Dec Ultrix (MIPS)
-# all of SGI's *current* machines and OSes run in big-endian mode on the
-# MIPS machines, as far as I know.
-#
-# XXX - what is the blank "-" line?
-#
-# kbd file definitions
-0 string kbd!map kbd map file
->8 byte >0 Ver %d:
->10 short >0 with %d table(s)
-0 belong 0407 old SGI 68020 executable
-0 belong 0410 old SGI 68020 pure executable
-0 beshort 0x8765 disk quotas file
-0 beshort 0x0506 IRIS Showcase file
->2 byte 0x49 -
->3 byte x - version %ld
-0 beshort 0x0226 IRIS Showcase template
->2 byte 0x63 -
->3 byte x - version %ld
-0 belong 0x5343464d IRIS Showcase file
->4 byte x - version %ld
-0 belong 0x5443464d IRIS Showcase template
->4 byte x - version %ld
-0 belong 0xdeadbabe IRIX Parallel Arena
->8 belong >0 - version %ld
+# $File: mips,v 1.8 2013/01/09 22:37:24 christos Exp $
+# mips: file(1) magic for MIPS ECOFF and Ucode, as used in SGI IRIX
+# and DEC Ultrix
#
0 beshort 0x0160 MIPSEB ECOFF executable
>20 beshort 0407 (impure)
@@ -142,41 +118,3 @@
#
0 beshort 0x180 MIPSEB Ucode
0 beshort 0x182 MIPSEL-BE Ucode
-# 32bit core file
-0 belong 0xdeadadb0 IRIX core dump
->4 belong 1 of
->16 string >\0 '%s'
-# 64bit core file
-0 belong 0xdeadad40 IRIX 64-bit core dump
->4 belong 1 of
->16 string >\0 '%s'
-# N32bit core file
-0 belong 0xbabec0bb IRIX N32 core dump
->4 belong 1 of
->16 string >\0 '%s'
-# New style crash dump file
-0 string \x43\x72\x73\x68\x44\x75\x6d\x70 IRIX vmcore dump of
->36 string >\0 '%s'
-# Trusted IRIX info
-0 string SGIAUDIT SGI Audit file
->8 byte x - version %d
->9 byte x \b.%ld
-#
-0 string WNGZWZSC Wingz compiled script
-0 string WNGZWZSS Wingz spreadsheet
-0 string WNGZWZHP Wingz help file
-#
-0 string #Inventor V IRIS Inventor 1.0 file
-0 string #Inventor V2 Open Inventor 2.0 file
-# GLF is OpenGL stream encoding
-0 string glfHeadMagic(); GLF_TEXT
-4 belong 0x7d000000 GLF_BINARY_LSB_FIRST
-!:strength -30
-4 belong 0x0000007d GLF_BINARY_MSB_FIRST
-!:strength -30
-# GLS is OpenGL stream encoding; GLS is the successor of GLF
-0 string glsBeginGLS( GLS_TEXT
-4 belong 0x10000000 GLS_BINARY_LSB_FIRST
-!:strength -30
-4 belong 0x00000010 GLS_BINARY_MSB_FIRST
-!:strength -30
--- file-5.12/magic/Magdir/misctools 2010-10-07 03:13:42.000000000 +0200
+++ upstream/magic/Magdir/misctools 2013-01-21 16:12:13.113952530 +0100
@@ -9,16 +9,6 @@
0 string/c BEGIN:VCARD vCard visiting card
!:mime text/x-vcard
-# From: Alex Beregszaszi <alex@fsn.hu>
-4 string gtktalog GNOME Catalogue (gtktalog)
->13 string >\0 version %s
-
-# Summary: GStreamer binary registry
-# Extension: .bin
-# Submitted by: Josh Triplett <josh@joshtriplett.org>
-0 belong 0xc0def00d GStreamer binary registry
->4 string x \b, version %s
-
# Summary: Libtool library file
# Extension: .la
# Submitted by: Tomasz Trojanowski <tomek@uninet.com.pl>
--- file-5.12/magic/Magdir/neko 1970-01-01 01:00:00.000000000 +0100
+++ upstream/magic/Magdir/neko 2013-01-21 16:12:13.153952609 +0100
@@ -0,0 +1,12 @@
+
+#------------------------------------------------------------
+# $File: java,v 1.12 2009/09/19 16:28:10 christos Exp $
+
+# From: Mikhail Gusarov <dottedmag@dottedmag.net>
+# NekoVM (http://nekovm.org/) bytecode
+0 string NEKO NekoVM bytecode
+>4 lelong x (%d global symbols,
+>8 lelong x %d global fields,
+>12 lelong x %d bytecode ops)
+!:mime application/x-nekovm-bytecode
+
--- file-5.12/magic/Magdir/netbsd 2011-12-13 14:52:48.000000000 +0100
+++ upstream/magic/Magdir/netbsd 2013-01-21 16:12:13.153952609 +0100
@@ -4,13 +4,11 @@
# netbsd: file(1) magic for NetBSD objects
#
# All new-style magic numbers are in network byte order.
+# The old-style magic numbers are indistinguishable from the same magic
+# numbers used in other systems, and are handled, for all those systems,
+# in aout.
#
-0 lelong 000000407 a.out NetBSD little-endian object file
->16 lelong >0 not stripped
-0 belong 000000407 a.out NetBSD big-endian object file
->16 belong >0 not stripped
-
0 belong&0377777777 041400413 a.out NetBSD/i386 demand paged
>0 byte &0x80
>>20 lelong <4096 shared library
--- file-5.12/magic/Magdir/rpm 2011-06-14 14:47:41.000000000 +0200
+++ upstream/magic/Magdir/rpm 2013-01-21 16:12:13.257451964 +0100
@@ -31,22 +31,15 @@
>>8 beshort 255 noarch
#delta RPM Daniel Novotny (dnovotny@redhat.com)
-0 string drpm Delta RPM
+0 string drpm Delta RPM
!:mime application/x-rpm
>12 string x %s
-
->>>8 beshort 11 MIPSel
->>>8 beshort 12 ARM
->>>8 beshort 13 MiNT
->>>8 beshort 14 S/390
->>>8 beshort 15 S/390x
->>>8 beshort 16 PowerPC64
->>>8 beshort 17 SuperH
->>>8 beshort 18 Xtensa
+>>8 beshort 11 MIPSel
+>>8 beshort 12 ARM
+>>8 beshort 13 MiNT
+>>8 beshort 14 S/390
+>>8 beshort 15 S/390x
+>>8 beshort 16 PowerPC64
+>>8 beshort 17 SuperH
+>>8 beshort 18 Xtensa
>>10 string x %s
-
-# Type: Delta RPM
-# From: Daniel Novotny (dnovotny@redhat.com)
-0 string drpm Delta RPM
-!:mime application/x-rpm
->12 string x %s
--- file-5.12/magic/Magdir/sgi 2010-11-25 16:00:12.000000000 +0100
+++ upstream/magic/Magdir/sgi 2013-01-21 16:12:13.257451964 +0100
@@ -1,7 +1,74 @@
#------------------------------------------------------------------------------
# $File: sgi,v 1.18 2010/11/25 15:00:12 christos Exp $
-# sgi: file(1) magic for Silicon Graphics applications
+# sgi: file(1) magic for Silicon Graphics operating systems and applications
+#
+# Executable images are handled either in aout (for old-style a.out
+# files for 68K; they are indistinguishable from other big-endian 32-bit
+# a.out files) or in mips (for MIPS ECOFF and Ucode files)
+#
+
+# kbd file definitions
+0 string kbd!map kbd map file
+>8 byte >0 Ver %d:
+>10 short >0 with %d table(s)
+
+0 beshort 0x8765 disk quotas file
+
+0 beshort 0x0506 IRIS Showcase file
+>2 byte 0x49 -
+>3 byte x - version %ld
+0 beshort 0x0226 IRIS Showcase template
+>2 byte 0x63 -
+>3 byte x - version %ld
+0 belong 0x5343464d IRIS Showcase file
+>4 byte x - version %ld
+0 belong 0x5443464d IRIS Showcase template
+>4 byte x - version %ld
+0 belong 0xdeadbabe IRIX Parallel Arena
+>8 belong >0 - version %ld
+
+# core files
+#
+# 32bit core file
+0 belong 0xdeadadb0 IRIX core dump
+>4 belong 1 of
+>16 string >\0 '%s'
+# 64bit core file
+0 belong 0xdeadad40 IRIX 64-bit core dump
+>4 belong 1 of
+>16 string >\0 '%s'
+# N32bit core file
+0 belong 0xbabec0bb IRIX N32 core dump
+>4 belong 1 of
+>16 string >\0 '%s'
+# New style crash dump file
+0 string \x43\x72\x73\x68\x44\x75\x6d\x70 IRIX vmcore dump of
+>36 string >\0 '%s'
+
+# Trusted IRIX info
+0 string SGIAUDIT SGI Audit file
+>8 byte x - version %d
+>9 byte x \b.%ld
+#
+0 string WNGZWZSC Wingz compiled script
+0 string WNGZWZSS Wingz spreadsheet
+0 string WNGZWZHP Wingz help file
+#
+0 string #Inventor V IRIS Inventor 1.0 file
+0 string #Inventor V2 Open Inventor 2.0 file
+# GLF is OpenGL stream encoding
+0 string glfHeadMagic(); GLF_TEXT
+4 belong 0x7d000000 GLF_BINARY_LSB_FIRST
+!:strength -30
+4 belong 0x0000007d GLF_BINARY_MSB_FIRST
+!:strength -30
+# GLS is OpenGL stream encoding; GLS is the successor of GLF
+0 string glsBeginGLS( GLS_TEXT
+4 belong 0x10000000 GLS_BINARY_LSB_FIRST
+!:strength -30
+4 belong 0x00000010 GLS_BINARY_MSB_FIRST
+!:strength -30
#
#
--- file-5.12/magic/Magdir/sniffer 2011-08-08 10:49:27.000000000 +0200
+++ upstream/magic/Magdir/sniffer 2013-01-21 16:12:13.273452401 +0100
@@ -17,6 +17,7 @@
>6 leshort 2 (Token Ring)
>6 leshort 3 (FDDI)
>6 leshort 4 (ATM)
+>6 leshort >4 (type %d)
#
# Microsoft Network Monitor 2.x capture files.
@@ -29,6 +30,12 @@
>6 leshort 2 (Token Ring)
>6 leshort 3 (FDDI)
>6 leshort 4 (ATM)
+>6 leshort 5 (IP-over-IEEE 1394)
+>6 leshort 6 (802.11)
+>6 leshort 7 (Raw IP)
+>6 leshort 8 (Raw IP)
+>6 leshort 9 (Raw IP)
+>6 leshort >9 (type %d)
#
# Network General Sniffer capture files.
@@ -57,6 +64,7 @@
# Sorry, make that "Network Associates Sniffer Basic, and Windows
# Sniffer Pro", capture files."
# Sorry, make that "Network General Sniffer capture files."
+# Sorry, make that "NetScout Sniffer capture files."
#
0 string XCP\0 NetXRay capture file
>4 string >\0 - version %s
@@ -73,8 +81,7 @@
# the main program that uses that format, but there are other programs
# that use "libpcap", or that use the same capture file format.)
#
-0 ubelong 0xa1b2c3d4 tcpdump capture file (big-endian)
-!:mime application/vnd.tcpdump.pcap
+0 name pcap-be
>4 beshort x - version %d
>6 beshort x \b.%d
>20 belong 0 (No link-layer encapsulation
@@ -116,8 +123,10 @@
>20 belong 127 (802.11 with radiotap header
>20 belong 129 (Linux ARCNET
>20 belong 138 (Apple IP over IEEE 1394
+>20 belong 139 (MTP2 with pseudo-header
>20 belong 140 (MTP2
>20 belong 141 (MTP3
+>20 belong 142 (SCCP
>20 belong 143 (DOCSIS
>20 belong 144 (IrDA
>20 belong 147 (Private use 0
@@ -137,72 +146,53 @@
>20 belong 161 (Private use 14
>20 belong 162 (Private use 15
>20 belong 163 (802.11 with AVS header
+>20 belong 165 (BACnet MS/TP
+>20 belong 166 (PPPD
+>20 belong 169 (GPRS LLC
+>20 belong 177 (Linux LAPD
+>20 belong 187 (Bluetooth HCI H4
+>20 belong 189 (Linux USB
+>20 belong 192 (PPI
+>20 belong 195 (802.15.4
+>20 belong 196 (SITA
+>20 belong 197 (Endace ERF
+>20 belong 201 (Bluetooth HCI H4 with pseudo-header
+>20 belong 202 (AX.25 with KISS header
+>20 belong 203 (LAPD
+>20 belong 204 (PPP with direction pseudo-header
+>20 belong 205 (Cisco HDLC with direction pseudo-header
+>20 belong 206 (Frame Relay with direction pseudo-header
+>20 belong 209 (Linux IPMB
+>20 belong 215 (802.15.4 with non-ASK PHY header
+>20 belong 220 (Memory-mapped Linux USB
+>20 belong 224 (Fibre Channel FC-2
+>20 belong 225 (Fibre Channel FC-2 with frame delimiters
+>20 belong 226 (Solaris IPNET
+>20 belong 227 (SocketCAN
+>20 belong 228 (Raw IPv4
+>20 belong 229 (Raw IPv6
+>20 belong 230 (802.15.4 without FCS
+>20 belong 231 (D-Bus messages
+>20 belong 235 (DVB-CI
+>20 belong 236 (MUX27010
+>20 belong 237 (STANAG 5066 D_PDUs
+>20 belong 239 (Linux netlink NFLOG messages
+>20 belong 240 (Hilscher netAnalyzer
+>20 belong 241 (Hilscher netAnalyzer with delimiters
+>20 belong 242 (IP-over-Infiniband
+>20 belong 243 (MPEG-2 Transport Stream packets
+>20 belong 244 (ng4t ng40
+>20 belong 245 (NFC LLCP
+>20 belong 247 (Infiniband
+>20 belong 248 (SCTP
>16 belong x \b, capture length %d)
+
+0 ubelong 0xa1b2c3d4 tcpdump capture file (big-endian)
+!:mime application/vnd.tcpdump.pcap
+>0 use pcap-be
0 ulelong 0xa1b2c3d4 tcpdump capture file (little-endian)
!:mime application/vnd.tcpdump.pcap
->4 leshort x - version %d
->6 leshort x \b.%d
->20 lelong 0 (No link-layer encapsulation
->20 lelong 1 (Ethernet
->20 lelong 2 (3Mb Ethernet
->20 lelong 3 (AX.25
->20 lelong 4 (ProNET
->20 lelong 5 (CHAOS
->20 lelong 6 (Token Ring
->20 lelong 7 (ARCNET
->20 lelong 8 (SLIP
->20 lelong 9 (PPP
->20 lelong 10 (FDDI
->20 lelong 11 (RFC 1483 ATM
->20 lelong 12 (raw IP
->20 lelong 13 (BSD/OS SLIP
->20 lelong 14 (BSD/OS PPP
->20 lelong 19 (Linux ATM Classical IP
->20 lelong 50 (PPP or Cisco HDLC
->20 lelong 51 (PPP-over-Ethernet
->20 lelong 99 (Symantec Enterprise Firewall
->20 lelong 100 (RFC 1483 ATM
->20 lelong 101 (raw IP
->20 lelong 102 (BSD/OS SLIP
->20 lelong 103 (BSD/OS PPP
->20 lelong 104 (BSD/OS Cisco HDLC
->20 lelong 105 (802.11
->20 lelong 106 (Linux Classical IP over ATM
->20 lelong 107 (Frame Relay
->20 lelong 108 (OpenBSD loopback
->20 lelong 109 (OpenBSD IPsec encrypted
->20 lelong 112 (Cisco HDLC
->20 lelong 113 (Linux "cooked"
->20 lelong 114 (LocalTalk
->20 lelong 117 (OpenBSD PFLOG
->20 lelong 119 (802.11 with Prism header
->20 lelong 122 (RFC 2625 IP over Fibre Channel
->20 lelong 123 (SunATM
->20 lelong 127 (802.11 with radiotap header
->20 lelong 129 (Linux ARCNET
->20 lelong 138 (Apple IP over IEEE 1394
->20 lelong 140 (MTP2
->20 lelong 141 (MTP3
->20 lelong 143 (DOCSIS
->20 lelong 144 (IrDA
->20 lelong 147 (Private use 0
->20 lelong 148 (Private use 1
->20 lelong 149 (Private use 2
->20 lelong 150 (Private use 3
->20 lelong 151 (Private use 4
->20 lelong 152 (Private use 5
->20 lelong 153 (Private use 6
->20 lelong 154 (Private use 7
->20 lelong 155 (Private use 8
->20 lelong 156 (Private use 9
->20 lelong 157 (Private use 10
->20 lelong 158 (Private use 11
->20 lelong 159 (Private use 12
->20 lelong 160 (Private use 13
->20 lelong 161 (Private use 14
->20 lelong 162 (Private use 15
->20 lelong 163 (802.11 with AVS header
->16 lelong x \b, capture length %d)
+>0 use \^pcap-be
#
# "libpcap"-with-Alexey-Kuznetsov's-patches capture files.
@@ -211,43 +201,9 @@
# that use "libpcap", or that use the same capture file format.)
#
0 ubelong 0xa1b2cd34 extended tcpdump capture file (big-endian)
->4 beshort x - version %d
->6 beshort x \b.%d
->20 belong 0 (No link-layer encapsulation
->20 belong 1 (Ethernet
->20 belong 2 (3Mb Ethernet
->20 belong 3 (AX.25
->20 belong 4 (ProNET
->20 belong 5 (CHAOS
->20 belong 6 (Token Ring
->20 belong 7 (ARCNET
->20 belong 8 (SLIP
->20 belong 9 (PPP
->20 belong 10 (FDDI
->20 belong 11 (RFC 1483 ATM
->20 belong 12 (raw IP
->20 belong 13 (BSD/OS SLIP
->20 belong 14 (BSD/OS PPP
->16 belong x \b, capture length %d)
+>0 use pcap-be
0 ulelong 0xa1b2cd34 extended tcpdump capture file (little-endian)
->4 leshort x - version %d
->6 leshort x \b.%d
->20 lelong 0 (No link-layer encapsulation
->20 lelong 1 (Ethernet
->20 lelong 2 (3Mb Ethernet
->20 lelong 3 (AX.25
->20 lelong 4 (ProNET
->20 lelong 5 (CHAOS
->20 lelong 6 (Token Ring
->20 lelong 7 (ARCNET
->20 lelong 8 (SLIP
->20 lelong 9 (PPP
->20 lelong 10 (FDDI
->20 lelong 11 (RFC 1483 ATM
->20 lelong 12 (raw IP
->20 lelong 13 (BSD/OS SLIP
->20 lelong 14 (BSD/OS PPP
->16 lelong x \b, capture length %d)
+>0 use \^pcap-be
#
# "pcap-ng" capture files.
@@ -295,9 +251,9 @@
>8 lelong x \b, %d stations found
#
-# EtherPeek/AiroPeek "version 9" capture files.
+# *Peek tagged capture files.
#
-0 string \177ver EtherPeek/AiroPeek capture file
+0 string \177ver EtherPeek/AiroPeek/OmniPeek capture file
#
# Visual Networks traffic capture files.
--- file-5.12/magic/Magdir/sun 2011-04-07 21:20:30.000000000 +0200
+++ upstream/magic/Magdir/sun 2013-01-21 16:12:13.293952641 +0100
@@ -1,12 +1,15 @@
#------------------------------------------------------------------------------
-# $File: sun,v 1.22 2011/02/10 01:52:51 christos Exp $
+# $File: sun,v 1.24 2013/01/08 01:43:18 christos Exp $
# sun: file(1) magic for Sun machines
#
# Values for big-endian Sun (MC680x0, SPARC) binaries on pre-5.x
-# releases. (5.x uses ELF.)
+# releases. (5.x uses ELF.) Entries for executables without an
+# architecture type, used before the 68020-based Sun-3's came out,
+# are in aout, as they're indistinguishable from other big-endian
+# 32-bit a.out files.
#
-0 belong&077777777 0600413 sparc demand paged
+0 belong&077777777 0600413 a.out SunOS sparc demand paged
>0 byte &0x80
>>20 belong <4096 shared library
>>20 belong =4096 dynamically linked executable
@@ -14,17 +17,17 @@
>0 byte ^0x80 executable
>16 belong >0 not stripped
-0 belong&077777777 0600410 sparc pure
+0 belong&077777777 0600410 a.out SunOS sparc pure
>0 byte &0x80 dynamically linked executable
>0 byte ^0x80 executable
>16 belong >0 not stripped
-0 belong&077777777 0600407 sparc
+0 belong&077777777 0600407 a.out SunOS sparc
>0 byte &0x80 dynamically linked executable
>0 byte ^0x80 executable
>16 belong >0 not stripped
-0 belong&077777777 0400413 mc68020 demand paged
+0 belong&077777777 0400413 a.out SunOS mc68020 demand paged
>0 byte &0x80
>>20 belong <4096 shared library
>>20 belong =4096 dynamically linked executable
@@ -32,17 +35,17 @@
>0 byte ^0x80 executable
>16 belong >0 not stripped
-0 belong&077777777 0400410 mc68020 pure
+0 belong&077777777 0400410 a.out SunOS mc68020 pure
>0 byte &0x80 dynamically linked executable
>0 byte ^0x80 executable
>16 belong >0 not stripped
-0 belong&077777777 0400407 mc68020
+0 belong&077777777 0400407 a.out SunOS mc68020
>0 byte &0x80 dynamically linked executable
>0 byte ^0x80 executable
>16 belong >0 not stripped
-0 belong&077777777 0200413 mc68010 demand paged
+0 belong&077777777 0200413 a.out SunOS mc68010 demand paged
>0 byte &0x80
>>20 belong <4096 shared library
>>20 belong =4096 dynamically linked executable
@@ -50,24 +53,16 @@
>0 byte ^0x80 executable
>16 belong >0 not stripped
-0 belong&077777777 0200410 mc68010 pure
+0 belong&077777777 0200410 a.out SunOS mc68010 pure
>0 byte &0x80 dynamically linked executable
>0 byte ^0x80 executable
>16 belong >0 not stripped
-0 belong&077777777 0200407 mc68010
+0 belong&077777777 0200407 a.out SunOS mc68010
>0 byte &0x80 dynamically linked executable
>0 byte ^0x80 executable
>16 belong >0 not stripped
-# reworked these to avoid anything beginning with zero becoming "old sun-2"
-0 belong 0407 old sun-2 executable
->16 belong >0 not stripped
-0 belong 0410 old sun-2 pure executable
->16 belong >0 not stripped
-0 belong 0413 old sun-2 demand paged executable
->16 belong >0 not stripped
-
#
# Core files. "SPARC 4.x BCP" means "core file from a SunOS 4.x SPARC
# binary executed in compatibility mode under SunOS 5.x".
@@ -96,7 +91,10 @@
# Sun SunPC
0 long 0xfa33c08e SunPC 4.0 Hard Disk
0 string #SUNPC_CONFIG SunPC 4.0 Properties Values
-# Sun snoop (see RFC 1761, which describes the capture file format).
+# Sun snoop (see RFC 1761, which describes the capture file format,
+# RFC 3827, which describes some additional datalink types, and
+# http://www.iana.org/assignments/snoop-datalink-types/snoop-datalink-types.xml,
+# which is the IANA registry of Snoop datalink types)
#
0 string snoop Snoop capture file
>8 belong >0 - version %ld
@@ -109,14 +107,25 @@
>12 belong 6 (Character synchronous)
>12 belong 7 (IBM channel-to-channel adapter)
>12 belong 8 (FDDI)
->12 belong 9 (Unknown)
-
-# Microsoft ICM color profile
-36 string acspMSFT Microsoft ICM Color Profile
-!:mime application/vnd.iccprofile
-# Sun KCMS
-36 string acsp Kodak Color Management System, ICC Profile
-!:mime application/vnd.iccprofile
+>12 belong 9 (Other)
+>12 belong 10 (type %ld)
+>12 belong 11 (type %ld)
+>12 belong 12 (type %ld)
+>12 belong 13 (type %ld)
+>12 belong 14 (type %ld)
+>12 belong 15 (type %ld)
+>12 belong 16 (Fibre Channel)
+>12 belong 17 (ATM)
+>12 belong 18 (ATM Classical IP)
+>12 belong 19 (type %ld)
+>12 belong 20 (type %ld)
+>12 belong 21 (type %ld)
+>12 belong 22 (type %ld)
+>12 belong 23 (type %ld)
+>12 belong 24 (type %ld)
+>12 belong 25 (type %ld)
+>12 belong 26 (IP over Infiniband)
+>12 belong >26 (type %ld)
#---------------------------------------------------------------------------
# The following entries have been tested by Duncan Laurie <duncan@sun.com> (a
@@ -130,5 +139,3 @@
# New format for Sun/Cobalt boot ROMs is annoying, it stores the version code
# at the very end where file(1) can't get it.
0 string CRfs COBALT boot rom data (Flat boot rom or file system)
-
-
--- file-5.12/magic/Magdir/unknown 2009-09-19 18:28:13.000000000 +0200
+++ upstream/magic/Magdir/unknown 2013-01-21 16:12:13.309952677 +0100
@@ -3,33 +3,32 @@
# $File: unknown,v 1.7 2009/09/19 16:28:13 christos Exp $
# unknown: file(1) magic for unknown machines
#
-# XXX - this probably should be pruned, as it'll match PDP-11 and
-# VAX image formats.
-#
-# 0x107 is 0407; 0x108 is 0410; both are PDP-11 (executable and pure,
-# respectively).
-#
-# 0x109 is 0411; that's PDP-11 split I&D, but the PDP-11 version doesn't
-# have the "version %ld", which may be a bogus COFFism (I don't think
-# there ever was COFF for the PDP-11).
+# 0x107 is 0407, 0x108 is 0410, and 0x109 is 0411; those are all PDP-11
+# (executable, pure, and split I&D, respectively), but the PDP-11 version
+# doesn't have the "version %ld", which may be a bogus COFFism (I don't
+# think there was ever COFF for the PDP-11).
#
# 0x10B is 0413; that's VAX demand-paged, but this is a short, not a
-# long, as it would be on a VAX.
-#
-# 0x10C is 0414 and 0x10E is 416; those *are* unknown.
-#
-0 short 0x107 unknown machine executable
->8 short >0 not stripped
->15 byte >0 - version %ld
-0 short 0x108 unknown pure executable
->8 short >0 not stripped
->15 byte >0 - version %ld
-0 short 0x109 PDP-11 separate I&D
->8 short >0 not stripped
->15 byte >0 - version %ld
-0 short 0x10b unknown pure executable
->8 short >0 not stripped
->15 byte >0 - version %ld
+# long, as it would be on a VAX. In any case, that could collide with
+# VAX demand-paged files, as the magic number is little-endian on those
+# binaries, so the first 16 bits of the file would contain 0x10B.
+#
+# Therefore, those entries are commented out.
+#
+# 0x10C is 0414 and 0x10E is 0416; those *are* unknown.
+#
+#0 short 0x107 unknown machine executable
+#>8 short >0 not stripped
+#>15 byte >0 - version %ld
+#0 short 0x108 unknown pure executable
+#>8 short >0 not stripped
+#>15 byte >0 - version %ld
+#0 short 0x109 PDP-11 separate I&D
+#>8 short >0 not stripped
+#>15 byte >0 - version %ld
+#0 short 0x10b unknown pure executable
+#>8 short >0 not stripped
+#>15 byte >0 - version %ld
0 long 0x10c unknown demand paged pure executable
>16 long >0 not stripped
0 long 0x10e unknown readable demand paged pure executable
--- file-5.12/magic/Magdir/vax 2009-09-19 18:28:13.000000000 +0200
+++ upstream/magic/Magdir/vax 2013-01-21 16:12:13.321452648 +0100
@@ -7,24 +7,16 @@
0 lelong 0101556 VAX double precision APL workspace
#
-# VAX a.out (32V, BSD)
+# VAX a.out (BSD; others collide with 386 and other 32-bit little-endian
+# executables, and are handled in aout)
#
-0 lelong 0407 VAX executable
->16 lelong >0 not stripped
-
-0 lelong 0410 VAX pure executable
->16 lelong >0 not stripped
-
-0 lelong 0413 VAX demand paged pure executable
->16 lelong >0 not stripped
-
-0 lelong 0420 VAX demand paged (first page unmapped) pure executable
+0 lelong 0420 a.out VAX demand paged (first page unmapped) pure executable
>16 lelong >0 not stripped
#
# VAX COFF
#
-# The `versions' should be un-commented if they work for you.
+# The `versions' were commented out, but have been un-commented out.
# (Was the problem just one of endianness?)
#
0 leshort 0570 VAX COFF executable
--- file-5.12/magic/Magdir/xilinx 2009-09-19 18:28:13.000000000 +0200
+++ upstream/magic/Magdir/xilinx 2013-01-21 16:12:13.353452562 +0100
@@ -33,3 +33,6 @@
>>>>>>>>&1 byte 0x00
>>>>>>>>&2 string e
>>>>>>>>&4 belong x - data length 0x%lx
+# Raw bitstream files
+0 long 0xffffffff
+>&0 belong 0xaa995566 Xilinx RAW bitstream (.BIN)
--- file-5.12/magic/Makefile.am 2013-01-03 17:00:42.000000000 +0100
+++ upstream/magic/Makefile.am 2013-01-21 16:12:13.373487615 +0100
@@ -1,5 +1,5 @@
#
-# $File: Makefile.am,v 1.85 2013/01/03 16:00:42 christos Exp $
+# $File: Makefile.am,v 1.87 2013/01/09 22:37:38 christos Exp $
#
MAGIC_FRAGMENT_BASE = Magdir
MAGIC_DIR = $(top_srcdir)/magic
@@ -18,6 +18,7 @@ $(MAGIC_FRAGMENT_DIR)/alliant \
$(MAGIC_FRAGMENT_DIR)/amanda \
$(MAGIC_FRAGMENT_DIR)/amigaos \
$(MAGIC_FRAGMENT_DIR)/animation \
+$(MAGIC_FRAGMENT_DIR)/aout \
$(MAGIC_FRAGMENT_DIR)/apl \
$(MAGIC_FRAGMENT_DIR)/apple \
$(MAGIC_FRAGMENT_DIR)/applix \
@@ -85,7 +86,7 @@ $(MAGIC_FRAGMENT_DIR)/gcc \
$(MAGIC_FRAGMENT_DIR)/geo \
$(MAGIC_FRAGMENT_DIR)/geos \
$(MAGIC_FRAGMENT_DIR)/gimp \
-$(MAGIC_FRAGMENT_DIR)/gnome-keyring \
+$(MAGIC_FRAGMENT_DIR)/gnome \
$(MAGIC_FRAGMENT_DIR)/gnu \
$(MAGIC_FRAGMENT_DIR)/gnumeric \
$(MAGIC_FRAGMENT_DIR)/grace \
@@ -97,6 +98,7 @@ $(MAGIC_FRAGMENT_DIR)/hp \
$(MAGIC_FRAGMENT_DIR)/human68k \
$(MAGIC_FRAGMENT_DIR)/ibm370 \
$(MAGIC_FRAGMENT_DIR)/ibm6000 \
+$(MAGIC_FRAGMENT_DIR)/icc \
$(MAGIC_FRAGMENT_DIR)/iff \
$(MAGIC_FRAGMENT_DIR)/images \
$(MAGIC_FRAGMENT_DIR)/inform \
--- file-5.12/src/BNF 1970-01-01 01:00:00.000000000 +0100
+++ upstream/src/BNF 2013-01-21 16:12:13.433451925 +0100
@@ -0,0 +1,151 @@
+This is a first attempt to document the grammar used by magic(5), with
+hopes of eventually incorporating something like this into the manpage.
+
+Note: Currently, the parser varies slightly from this, but only in
+very minor ways, e.g., the strflags maybe separated by '/' characters
+and at most one strcount is allowed; likewise for regflags.
+
+------------------------------------------------------------------------
+magic = 1*query
+
+query = line *( 1*level line )
+
+level = ">" ;; Increment the level by 1.
+ ;; The first line of a query is at level 0.
+
+line = offset HWS type HWS test HWS message EOL
+
+------------------------------------------------------------------------
+offset = absoffset | reloffset | indoffset
+ ;; The offset in the file at which to apply
+ ;; the <test>.
+
+absoffset = NUMBER ;; An absolute offset from the start of the file.
+
+reloffset = "&" NUMBER ;; The offset relative to the last match offset
+ ;; at one level up.
+ ;; Not allowed at level == 0.
+
+indoffset = indoff | relindoff
+
+indoff = "(" offset1 [ "." size ] [ op disp ] ")"
+ ;; Read the file at <offset1> of width <size>.
+ ;; If size is not specified, assume a long.
+ ;; If <op> is given, then preform that
+ ;; operation on the result and the <disp>.
+
+offset1 = absoffset | reloffset
+
+size = byte | leshort | beshort | lelong | belong | melong
+
+byte = "B" | "b" | "C" | "c" ;; A one-byte value.
+leshort = "s" | "h" ;; A two-byte little-endian value.
+beshort = "S" | "H" ;; A two-byte big-endian value.
+lelong = "l" ;; A four-byte little-endian value.
+belong = "L" ;; A four-byte big-endian value.
+melong = "m" ;; A four-byte middle-endian value.
+
+op = [ invert ] ( "+" | "-" | "*" | "/" | "%" | "&" | "|" | "^" )
+
+invert = "~" ;; Flip the bits on result of the <op>.
+
+disp = NUMBER | memvalue
+
+memvalue = "(" NUMBER ")"
+ ;; NUMBER is interpreted as an absolute or
+ ;; relative offset matching that of <offset1>.
+ ;; Read the file at the resulting offset with
+ ;; the same size as <offset1>
+
+relindoff = "&" indoff ;; add <indoff> to the last match offset at
+ ;; one level up.
+
+------------------------------------------------------------------------
+type = [ unsigned ] ( numeric | strtype | default )
+
+unsigned = "u" ;; The value is unsigned.
+ ;; This affects the sign extension of numeric
+ ;; types and the '<' and '>' compares. It is
+ ;; intended for numeric types, but allowed on
+ ;; all types.
+
+numeric = ( numtype | datatype ) [ nummask ]
+
+numtype = byte | short | long | quad
+
+byte = "byte"
+short = "short" | "beshort" | "leshort"
+long = "long" | "lelong" | "belong" | "melong"
+quad = "quad" | "lequad" | "bequad"
+
+datetype = udate32 | ldate32 | udate64 | ldate64
+
+udate32 = "date" | "bedate" | "ledate" | "medate" ;; UTC dates
+ldate32 = "ldate" | "beldate" | "leldate" | "meldate" ;; local dates
+udate64 = "qdate" | "leqdate" | "beqdate" ;; UTC dates
+ldate64 = "qldate" | "leqldate" | "beqldate" ;; local dates
+
+nummask = op NUMBER
+
+strtype = regex | search | string8 | string16
+
+regex = "regex" [ "/" 1*regflag ]
+
+regflag = "c" | "s" | linecnt
+
+linecnt = NUMBER ;; The number of lines to search. If this
+ ;; is missing or zero, the rest of the
+ ;; file is searched.
+
+search = "string" [ "/" 1*srchflag ]
+
+srchflag = strflag | srchcnt
+
+srchcnt = NUMBER ;; The number of search tries. If this
+ ;; is missing or zero, the rest of the
+ ;; file is searched.
+
+string8 = ( "string" | "pstring" ) [ "/" 1*strflag ]
+
+strflag = "b" | "B" | "c" | "C"
+
+string16 = "bestring16" | "lestring16"
+
+default = "default" ;; This is intended to be used with the
+ ;; <truetest> ("x" below). It is matched if
+ ;; there has been no previous match at its
+ ;; level or none since the last default at
+ ;; that level. It is useful for implementing
+ ;; switch-like and if/else constructions.
+
+------------------------------------------------------------------------
+test = numtest | strtest | truetest
+ ;; Test to preform on <type> read from file.
+
+numtest = [ compare ] NUMBER ;; If compare is missing, "=" is assumed.
+
+strtest = [ compare ] STRING ;; If compare is missing, "=" is assumed.
+ ;; Note: If the STRING begins with a <compare>
+ ;; character, the <compare> field cannot be
+ ;; omitted.
+
+compare = "=" | "!" | "<" | ">" | "&" | "^"
+
+truetest = "x" ;; This always returns true.
+ ;; To test for the string "x" use "=x".
+
+------------------------------------------------------------------------
+message = [ nospflag ] ( STRING | FMT_STRING )
+ ;; Message to print if test result is true.
+
+nospflag = %x08 | "\\b" ;; Do not insert a space before the message.
+ ;; By default, messages are separated by a " ".
+
+------------------------------------------------------------------------
+HWS = <horizontal white space>
+EOL = <end of line marker>
+NUMBER = <C-style unsigned number>
+STRING = <C-style string without delimiting quotes>
+FMTSTR = <printf format string with exactly one % construct>
+
+------------------------------------------------------------------------
--- file-5.12/src/Makefile.am 2012-06-21 00:16:32.000000000 +0200
+++ upstream/src/Makefile.am 2013-01-21 16:12:13.433451925 +0100
@@ -21,3 +21,9 @@ libmagic_la_LIBADD = $(LTLIBOBJS) $(MING
file_SOURCES = file.c
file_LDADD = libmagic.la
+CLEANFILES = magic.h
+HDR= $(top_srcdir)/src/magic.h.in
+BUILT_SOURCES = magic.h
+
+magic.h: ${HDR}
+ sed -e "s/X.YY/$$(echo @VERSION@ | tr -d .)/" < ${HDR} > $@
--- file-5.12/src/apprentice.c 2013-01-04 01:47:35.000000000 +0100
+++ upstream/src/apprentice.c 2013-01-21 16:12:13.433451925 +0100
@@ -32,7 +32,7 @@
#include "file.h"
#ifndef lint
-FILE_RCSID("@(#)$File: apprentice.c,v 1.181 2013/01/03 23:11:38 christos Exp $")
+FILE_RCSID("@(#)$File: apprentice.c,v 1.188 2013/01/09 15:36:55 christos Exp $")
#endif /* lint */
#include "magic.h"
@@ -80,6 +80,13 @@ struct magic_entry {
uint32_t max_count;
};
+struct magic_map {
+ void *p;
+ size_t len;
+ struct magic *magic[MAGIC_SETS];
+ uint32_t nmagic[MAGIC_SETS];
+};
+
int file_formats[FILE_NAMES_SIZE];
const size_t file_nformats = FILE_NAMES_SIZE;
const char *file_names[FILE_NAMES_SIZE];
@@ -96,7 +103,7 @@ private int apprentice_1(struct magic_se
private size_t apprentice_magic_strength(const struct magic *);
private int apprentice_sort(const void *, const void *);
private void apprentice_list(struct mlist *, int );
-private int apprentice_load(struct magic_set *, struct magic **, uint32_t *,
+private struct magic_map *apprentice_load(struct magic_set *,
const char *, int);
private struct mlist *mlist_alloc(void);
private void mlist_free(struct mlist *);
@@ -106,9 +113,9 @@ private uint16_t swap2(uint16_t);
private uint32_t swap4(uint32_t);
private uint64_t swap8(uint64_t);
private char *mkdbname(struct magic_set *, const char *, int);
-private int apprentice_map(struct magic_set *, struct magic **, uint32_t *,
- const char *);
-private int apprentice_compile(struct magic_set *, struct magic **, uint32_t *,
+private struct magic_map *apprentice_map(struct magic_set *, const char *);
+private void apprentice_unmap(struct magic_map *);
+private int apprentice_compile(struct magic_set *, struct magic_map *,
const char *);
private int check_format_type(const char *, int);
private int check_format(struct magic_set *, struct magic *);
@@ -169,12 +176,21 @@ main(int argc, char *argv[])
}
#endif /* COMPILE_ONLY */
-static const struct type_tbl_s {
+struct type_tbl_s {
const char name[16];
const size_t len;
const int type;
const int format;
-} type_tbl[] = {
+};
+
+/*
+ * XXX - the actual Single UNIX Specification says that "long" means "long",
+ * as in the C data type, but we treat it as meaning "4-byte integer".
+ * Given that the OS X version of file 5.04 did the same, I guess that passes
+ * the actual test; having "long" be dependent on how big a "long" is on
+ * the machine running "file" is silly.
+ */
+static const struct type_tbl_s type_tbl[] = {
# define XX(s) s, (sizeof(s) - 1)
# define XX_NULL "", 0
{ XX("byte"), FILE_BYTE, FILE_FMT_NUM },
@@ -221,19 +237,27 @@ static const struct type_tbl_s {
{ XX("qwdate"), FILE_QWDATE, FILE_FMT_STR },
{ XX("leqwdate"), FILE_LEQWDATE, FILE_FMT_STR },
{ XX("beqwdate"), FILE_BEQWDATE, FILE_FMT_STR },
+ { XX_NULL, FILE_INVALID, FILE_FMT_NONE },
+};
+
+/*
+ * These are not types, and cannot be preceded by "u" to make them
+ * unsigned.
+ */
+static const struct type_tbl_s special_tbl[] = {
{ XX("name"), FILE_NAME, FILE_FMT_STR },
{ XX("use"), FILE_USE, FILE_FMT_STR },
{ XX_NULL, FILE_INVALID, FILE_FMT_NONE },
+};
# undef XX
# undef XX_NULL
-};
private int
-get_type(const char *l, const char **t)
+get_type(const struct type_tbl_s *tbl, const char *l, const char **t)
{
const struct type_tbl_s *p;
- for (p = type_tbl; p->len; p++) {
+ for (p = tbl; p->len; p++) {
if (strncmp(l, p->name, p->len) == 0) {
if (t)
*t = l + p->len;
@@ -243,6 +267,91 @@ get_type(const char *l, const char **t)
return p->type;
}
+private int
+get_standard_integer_type(const char *l, const char **t)
+{
+ int type;
+
+ if (isalpha((unsigned char)l[1])) {
+ switch (l[1]) {
+ case 'C':
+ /* "dC" and "uC" */
+ type = FILE_BYTE;
+ break;
+ case 'S':
+ /* "dS" and "uS" */
+ type = FILE_SHORT;
+ break;
+ case 'I':
+ case 'L':
+ /*
+ * "dI", "dL", "uI", and "uL".
+ *
+ * XXX - the actual Single UNIX Specification says
+ * that "L" means "long", as in the C data type,
+ * but we treat it as meaning "4-byte integer".
+ * Given that the OS X version of file 5.04 did
+ * the same, I guess that passes the actual SUS
+ * validation suite; having "dL" be dependent on
+ * how big a "long" is on the machine running
+ * "file" is silly.
+ */
+ type = FILE_LONG;
+ break;
+ case 'Q':
+ /* "dQ" and "uQ" */
+ type = FILE_QUAD;
+ break;
+ default:
+ /* "d{anything else}", "u{anything else}" */
+ return FILE_INVALID;
+ }
+ l += 2;
+ } else if (isdigit((unsigned char)l[1])) {
+ /*
+ * "d{num}" and "u{num}"; we only support {num} values
+ * of 1, 2, 4, and 8 - the Single UNIX Specification
+ * doesn't say anything about whether arbitrary
+ * values should be supported, but both the Solaris 10
+ * and OS X Mountain Lion versions of file passed the
+ * Single UNIX Specification validation suite, and
+ * neither of them support values bigger than 8 or
+ * non-power-of-2 values.
+ */
+ if (isdigit((unsigned char)l[2])) {
+ /* Multi-digit, so > 9 */
+ return FILE_INVALID;
+ }
+ switch (l[1]) {
+ case '1':
+ type = FILE_BYTE;
+ break;
+ case '2':
+ type = FILE_SHORT;
+ break;
+ case '4':
+ type = FILE_LONG;
+ break;
+ case '8':
+ type = FILE_QUAD;
+ break;
+ default:
+ /* XXX - what about 3, 5, 6, or 7? */
+ return FILE_INVALID;
+ }
+ l += 2;
+ } else {
+ /*
+ * "d" or "u" by itself.
+ */
+ type = FILE_LONG;
+ ++l;
+ }
+ if (t)
+ *t = l;
+ return type;
+}
+
private void
init_file_tables(void)
{
@@ -261,16 +370,16 @@ init_file_tables(void)
}
private int
-add_mlist(struct mlist *mlp, struct magic *magic, uint32_t nmagic, int mapped)
+add_mlist(struct mlist *mlp, struct magic_map *map, size_t idx)
{
struct mlist *ml;
if ((ml = CAST(struct mlist *, malloc(sizeof(*ml)))) == NULL)
return -1;
- ml->magic = magic;
- ml->nmagic = nmagic;
- ml->mapped = mapped;
+ ml->map = idx == 0 ? map : NULL;
+ ml->magic = map->magic[idx];
+ ml->nmagic = map->nmagic[idx];
mlp->prev->next = ml;
ml->prev = mlp->prev;
@@ -285,49 +394,38 @@ add_mlist(struct mlist *mlp, struct magi
private int
apprentice_1(struct magic_set *ms, const char *fn, int action)
{
- struct magic *magic[MAGIC_SETS] = { NULL };
- uint32_t nmagic[MAGIC_SETS] = { 0 };
struct mlist *ml;
- int rv = -1;
- int mapped;
+ struct magic_map *map;
size_t i;
if (magicsize != FILE_MAGICSIZE) {
file_error(ms, 0, "magic element size %lu != %lu",
- (unsigned long)sizeof(*magic[0]),
+ (unsigned long)sizeof(*map->magic[0]),
(unsigned long)FILE_MAGICSIZE);
return -1;
}
if (action == FILE_COMPILE) {
- rv = apprentice_load(ms, magic, nmagic, fn, action);
- if (rv != 0)
+ map = apprentice_load(ms, fn, action);
+ if (map == NULL)
return -1;
- rv = apprentice_compile(ms, magic, nmagic, fn);
- return rv;
+ return apprentice_compile(ms, map, fn);
}
#ifndef COMPILE_ONLY
- if ((rv = apprentice_map(ms, magic, nmagic, fn)) < 0) {
- if (rv == -2)
- return -1;
+ map = apprentice_map(ms, fn);
+ if (map == NULL) {
if (ms->flags & MAGIC_CHECK)
file_magwarn(ms, "using regular magic file `%s'", fn);
- rv = apprentice_load(ms, magic, nmagic, fn, action);
- if (rv != 0)
+ map = apprentice_load(ms, fn, action);
+ if (map == NULL)
return -1;
}
- mapped = rv;
-
for (i = 0; i < MAGIC_SETS; i++) {
- if (magic[i] == NULL)
- continue;
- if (add_mlist(ms->mlist[i], magic[i], nmagic[i], mapped) == -1)
- {
- i = i == 1 ? 0 : 1;
- file_delmagic(magic[i], mapped, nmagic[i]);
+ if (add_mlist(ms->mlist[i], map, i) == -1) {
file_oomem(ms, sizeof(*ml));
+ apprentice_unmap(map);
return -1;
}
}
@@ -392,38 +490,27 @@ free:
return NULL;
}
-protected void
-file_delmagic(struct magic *p, int type, size_t entries)
+private void
+apprentice_unmap(struct magic_map *map)
{
- if (p == NULL)
+ if (map == NULL)
+ return;
+ if (map->p == NULL)
return;
- switch (type) {
- case 2:
#ifdef QUICK
- p--;
- (void)munmap((void *)p, sizeof(*p) * (entries + 1));
- break;
-#else
- (void)&entries;
- abort();
- /*NOTREACHED*/
+ if (map->len)
+ (void)munmap(map->p, map->len);
+ else
#endif
- case 1:
- p--;
- /*FALLTHROUGH*/
- case 0:
- free(p);
- break;
- default:
- abort();
- }
+ free(map->p);
+ free(map);
}
private struct mlist *
mlist_alloc(void)
{
struct mlist *mlist;
- if ((mlist = CAST(struct mlist *, malloc(sizeof(*mlist)))) == NULL) {
+ if ((mlist = CAST(struct mlist *, calloc(1, sizeof(*mlist)))) == NULL) {
return NULL;
}
mlist->next = mlist->prev = mlist;
@@ -440,8 +527,8 @@ mlist_free(struct mlist *mlist)
for (ml = mlist->next; ml != mlist;) {
struct mlist *next = ml->next;
- struct magic *mg = ml->magic;
- file_delmagic(mg, ml->mapped, ml->nmagic);
+ if (ml->map)
+ apprentice_unmap(ml->map);
free(ml);
ml = next;
}
@@ -500,7 +587,7 @@ file_apprentice(struct magic_set *ms, co
mlist_free(ms->mlist[i]);
ms->mlist[i] = NULL;
}
- file_error(ms, 0, "could not find any magic files!");
+ file_error(ms, 0, "could not find any valid magic files!");
return -1;
}
@@ -1015,9 +1102,8 @@ magic_entry_free(struct magic_entry *me,
free(me);
}
-private int
-apprentice_load(struct magic_set *ms, struct magic **magicp, uint32_t *nmagicp,
- const char *fn, int action)
+private struct magic_map *
+apprentice_load(struct magic_set *ms, const char *fn, int action)
{
int errs = 0;
struct magic_entry *mentry[MAGIC_SETS] = { NULL };
@@ -1026,11 +1112,17 @@ apprentice_load(struct magic_set *ms, st
size_t files = 0, maxfiles = 0;
char **filearr = NULL, *mfn;
struct stat st;
+ struct magic_map *map;
DIR *dir;
struct dirent *d;
ms->flags |= MAGIC_CHECK; /* Enable checks for parsed files */
+ if ((map = CAST(struct magic_map *, calloc(1, sizeof(*map)))) == NULL) {
+ file_oomem(ms, sizeof(*map));
+ return NULL;
+ }
+
/* print silly verbose header for USG compat. */
if (action == FILE_CHECK)
(void)fprintf(stderr, "%s\n", usg_hdr);
@@ -1102,7 +1194,7 @@ apprentice_load(struct magic_set *ms, st
/* coalesce per file arrays into a single one */
if (coalesce_entries(ms, mentry[j], mentrycount[j],
- &magicp[j], &nmagicp[j]) == -1) {
+ &map->magic[j], &map->nmagic[j]) == -1) {
errs++;
goto out;
}
@@ -1114,15 +1206,13 @@ out:
if (errs) {
for (j = 0; j < MAGIC_SETS; j++) {
- if (magicp[j]) {
- free(magicp[j]);
- magicp[j] = NULL;
- }
- nmagicp[j] = 0;
+ if (map->magic[j])
+ free(map->magic[j]);
}
- return errs;
+ free(map);
+ return NULL;
}
- return 0;
+ return map;
}
/*
@@ -1371,9 +1461,13 @@ parse(struct magic_set *ms, struct magic
char *t;
int op;
uint32_t cont_level;
+ int32_t diff;
cont_level = 0;
+ /*
+ * Parse the offset.
+ */
while (*l == '>') {
++l; /* step over */
cont_level++;
@@ -1386,9 +1480,19 @@ parse(struct magic_set *ms, struct magic
#endif
if (cont_level != 0) {
if (me->mp == NULL) {
- file_error(ms, 0, "No current entry for continuation");
+ file_magerror(ms, "No current entry for continuation");
return -1;
}
+ if (me->cont_count == 0) {
+ file_magerror(ms, "Continuations present with 0 count");
+ return -1;
+ }
+ m = &me->mp[me->cont_count - 1];
+ diff = (int32_t)cont_level - (int32_t)m->cont_level;
+ if (diff > 1)
+ file_magwarn(ms, "New continuation level %u is more "
+ "than one larger than current level %u", cont_level,
+ m->cont_level);
if (me->cont_count == me->max_count) {
struct magic *nm;
size_t cnt = me->max_count + ALLOC_CHUNK;
@@ -1542,12 +1646,52 @@ parse(struct magic_set *ms, struct magic
EATAB;
#endif
- if (*l == 'u' && (l[1] != 's' || l[2] != 'e')) {
- ++l;
+ /*
+ * Parse the type.
+ */
+ if (*l == 'u') {
+ /*
+ * Try it as a keyword type prefixed by "u"; match what
+ * follows the "u". If that fails, try it as an SUS
+ * integer type. In either case, it's unsigned.
+ */
m->flag |= UNSIGNED;
+ m->type = get_type(type_tbl, l + 1, &l);
+ if (m->type == FILE_INVALID) {
+ /*
+ * Not a keyword type; parse it as an SUS type,
+ * 'u' possibly followed by a number or C/S/L.
+ */
+ m->type = get_standard_integer_type(l, &l);
+ }
+ } else {
+ /*
+ * Try it as a keyword type. If that fails, try it as
+ * an SUS integer type if it begins with "d" or as an
+ * SUS string type if it begins with "s". In any case,
+ * it's not unsigned.
+ */
+ m->type = get_type(type_tbl, l, &l);
+ if (m->type == FILE_INVALID) {
+ /*
+ * Not a keyword type; parse it as an SUS type,
+ * either 'd' possibly followed by a number or
+ * C/S/L, or just 's'.
+ */
+ if (*l == 'd')
+ m->type = get_standard_integer_type(l, &l);
+ else if (*l == 's' && !isalpha((unsigned char)l[1])) {
+ m->type = FILE_STRING;
+ ++l;
+ }
+ }
}
- m->type = get_type(l, &l);
+ if (m->type == FILE_INVALID) {
+ /* Not found - try it as a special keyword. */
+ m->type = get_type(special_tbl, l, &l);
+ }
+
if (m->type == FILE_INVALID) {
if (ms->flags & MAGIC_CHECK)
file_magwarn(ms, "type `%s' invalid", l);
@@ -2397,61 +2541,67 @@ eatsize(const char **p)
/*
* handle a compiled file.
*/
-private int
-apprentice_map(struct magic_set *ms, struct magic **magicp, uint32_t *nmagicp,
- const char *fn)
+
+private struct magic_map *
+apprentice_map(struct magic_set *ms, const char *fn)
{
- int fd, ret;
+ int fd;
struct stat st;
uint32_t *ptr;
uint32_t version, entries, nentries;
int needsbyteswap;
char *dbname = NULL;
- void *mm = NULL;
+ struct magic_map *map;
size_t i;
- ret = -1;
+ fd = -1;
+ if ((map = CAST(struct magic_map *, calloc(1, sizeof(*map)))) == NULL) {
+ file_oomem(ms, sizeof(*map));
+ goto error;
+ }
+
dbname = mkdbname(ms, fn, 0);
if (dbname == NULL)
- goto error2;
+ goto error;
if ((fd = open(dbname, O_RDONLY|O_BINARY)) == -1)
- goto error2;
+ goto error;
if (fstat(fd, &st) == -1) {
file_error(ms, errno, "cannot stat `%s'", dbname);
- goto error1;
+ goto error;
}
if (st.st_size < 8) {
file_error(ms, 0, "file `%s' is too small", dbname);
- goto error1;
+ goto error;
}
+ map->len = (size_t)st.st_size;
#ifdef QUICK
- if ((mm = mmap(0, (size_t)st.st_size, PROT_READ|PROT_WRITE,
+ if ((map->p = mmap(0, (size_t)st.st_size, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_FILE, fd, (off_t)0)) == MAP_FAILED) {
file_error(ms, errno, "cannot map `%s'", dbname);
- goto error1;
+ goto error;
}
-#define RET 2
#else
- if ((mm = CAST(void *, malloc((size_t)st.st_size))) == NULL) {
- file_oomem(ms, (size_t)st.st_size);
- goto error1;
+ if ((map->p = CAST(void *, malloc(map->len))) == NULL) {
+ file_oomem(ms, map->len);
+ goto error;
}
- if (read(fd, mm, (size_t)st.st_size) != (ssize_t)st.st_size) {
+ if (read(fd, map->p, map->len) != (ssize_t)map->len) {
file_badread(ms);
- goto error1;
+ goto error;
}
+ map->len = 0;
#define RET 1
#endif
(void)close(fd);
fd = -1;
- ptr = CAST(uint32_t *, mm);
+ ptr = CAST(uint32_t *, map->p);
if (*ptr != MAGICNO) {
if (swap4(*ptr) != MAGICNO) {
file_error(ms, 0, "bad magic in `%s'", dbname);
- goto error1;
+ goto error;
}
needsbyteswap = 1;
} else
@@ -2460,74 +2610,63 @@ apprentice_map(struct magic_set *ms, str
version = swap4(ptr[1]);
else
version = ptr[1];
- ret = -2;
if (version != VERSIONNO) {
file_error(ms, 0, "File %s supports only version %d magic "
"files. `%s' is version %d", VERSION,
VERSIONNO, dbname, version);
- goto error1;
+ goto error;
}
entries = (uint32_t)(st.st_size / sizeof(struct magic));
if ((off_t)(entries * sizeof(struct magic)) != st.st_size) {
file_error(ms, 0, "Size of `%s' %llu is not a multiple of %zu",
dbname, (unsigned long long)st.st_size,
sizeof(struct magic));
- goto error1;
+ goto error;
}
- magicp[0] = CAST(struct magic *, mm) + 1;
+ map->magic[0] = CAST(struct magic *, map->p) + 1;
nentries = 0;
for (i = 0; i < MAGIC_SETS; i++) {
if (needsbyteswap)
- nmagicp[i] = swap4(ptr[i + 2]);
+ map->nmagic[i] = swap4(ptr[i + 2]);
else
- nmagicp[i] = ptr[i + 2];
+ map->nmagic[i] = ptr[i + 2];
if (i != MAGIC_SETS - 1)
- magicp[i + 1] = magicp[i] + nmagicp[i];
- nentries += nmagicp[i];
+ map->magic[i + 1] = map->magic[i] + map->nmagic[i];
+ nentries += map->nmagic[i];
}
if (entries != nentries + 1) {
file_error(ms, 0, "Inconsistent entries in `%s' %u != %u",
dbname, entries, nentries + 1);
- goto error1;
+ goto error;
}
if (needsbyteswap)
for (i = 0; i < MAGIC_SETS; i++)
- byteswap(magicp[i], nmagicp[i]);
+ byteswap(map->magic[i], map->nmagic[i]);
free(dbname);
- return RET;
+ return map;
-error1:
+error:
if (fd != -1)
(void)close(fd);
- if (mm) {
-#ifdef QUICK
- (void)munmap((void *)mm, (size_t)st.st_size);
-#else
- free(mm);
-#endif
- } else {
- for (i = 0; i < MAGIC_SETS; i++) {
- magicp[i] = NULL;
- nmagicp[i] = 0;
- }
- }
-error2:
+ apprentice_unmap(map);
free(dbname);
- return ret;
+ return NULL;
}
private const uint32_t ar[] = {
MAGICNO, VERSIONNO
};
+
/*
* handle an mmaped file.
*/
private int
-apprentice_compile(struct magic_set *ms, struct magic **magicp,
- uint32_t *nmagicp, const char *fn)
+apprentice_compile(struct magic_set *ms, struct magic_map *map, const char *fn)
{
- static size_t nm = sizeof(*nmagicp) * MAGIC_SETS;
+ static const size_t nm = sizeof(*map->nmagic) * MAGIC_SETS;
+ static const size_t m = sizeof(**map->magic);
int fd = -1;
+ size_t len;
char *dbname;
int rv = -1;
uint32_t i;
@@ -2548,24 +2687,23 @@ apprentice_compile(struct magic_set *ms,
goto out;
}
- if (write(fd, nmagicp, nm) != (ssize_t)nm) {
+ if (write(fd, map->nmagic, nm) != (ssize_t)nm) {
file_error(ms, errno, "error writing `%s'", dbname);
goto out;
}
- assert(nm + sizeof(ar) < sizeof(struct magic));
+ assert(nm + sizeof(ar) < m);
- if (lseek(fd, (off_t)sizeof(struct magic), SEEK_SET)
- != sizeof(struct magic)) {
+ if (lseek(fd, (off_t)m, SEEK_SET) != (off_t)m) {
file_error(ms, errno, "error seeking `%s'", dbname);
goto out;
}
for (i = 0; i < MAGIC_SETS; i++) {
- if (write(fd, magicp[i], (sizeof(struct magic) * nmagicp[i]))
- != (ssize_t)(sizeof(struct magic) * nmagicp[i])) {
- file_error(ms, errno, "error writing `%s'", dbname);
- goto out;
+ len = m * map->nmagic[i];
+ if (write(fd, map->magic[i], len) != (ssize_t)len) {
+ file_error(ms, errno, "error writing `%s'", dbname);
+ goto out;
}
}
@@ -2607,14 +2745,16 @@ mkdbname(struct magic_set *ms, const cha
q++;
/* Compatibility with old code that looked in .mime */
if (ms->flags & MAGIC_MIME) {
- asprintf(&buf, "%.*s.mime%s", (int)(q - fn), fn, ext);
+ if (asprintf(&buf, "%.*s.mime%s", (int)(q - fn), fn, ext) < 0)
+ return NULL;
if (access(buf, R_OK) != -1) {
ms->flags &= MAGIC_MIME_TYPE;
return buf;
}
free(buf);
}
- asprintf(&buf, "%.*s%s", (int)(q - fn), fn, ext);
+ if (asprintf(&buf, "%.*s%s", (int)(q - fn), fn, ext) < 0)
+ return NULL;
/* Compatibility with old code that looked in .mime */
if (strstr(p, ".mime") != NULL)
--- file-5.12/src/cdf.mk 1970-01-01 01:00:00.000000000 +0100
+++ upstream/src/cdf.mk 2013-01-21 16:12:13.449452152 +0100
@@ -0,0 +1,3 @@
+CFLAGS+=-DTEST -DCDF_DEBUG -g -DHAVE_CONFIG_H -I..
+cdf: cdf.o cdf_time.o
+ ${CC} ${CFLAGS} -o $@ $>
--- file-5.12/src/file.c 2012-11-21 17:27:39.000000000 +0100
+++ upstream/src/file.c 2013-01-21 16:12:13.453452572 +0100
@@ -276,6 +276,11 @@ main(int argc, char *argv[])
if (e)
return e;
+ if (MAGIC_VERSION != magic_version())
+ (void)fprintf(stderr, "%s: compiled magic version [%d] "
+ "does not match with shared library magic version [%d]\n",
+ progname, MAGIC_VERSION, magic_version());
+
switch(action) {
case FILE_CHECK:
case FILE_COMPILE:
--- file-5.12/src/file.h 2012-10-31 19:31:28.000000000 +0100
+++ upstream/src/file.h 2013-01-21 16:12:13.453452572 +0100
@@ -346,10 +346,8 @@ struct magic {
/* list of magic entries */
struct mlist {
struct magic *magic; /* array of magic entries */
- uint32_t nmagic; /* number of entries in array */
- int mapped; /* allocation type: 0 => apprentice_file
- * 1 => apprentice_map + malloc
- * 2 => apprentice_map + mmap */
+ uint32_t nmagic; /* number of entries in array */
+ void *map; /* internal resources used by entry */
struct mlist *next, *prev;
};
@@ -444,7 +442,6 @@ protected int file_apprentice(struct mag
protected int file_magicfind(struct magic_set *, const char *, struct mlist *);
protected uint64_t file_signextend(struct magic_set *, struct magic *,
uint64_t);
-protected void file_delmagic(struct magic *, int type, size_t entries);
protected void file_badread(struct magic_set *);
protected void file_badseek(struct magic_set *);
protected void file_oomem(struct magic_set *, size_t);
--- file-5.12/src/fsmagic.c 2012-09-06 16:16:05.000000000 +0200
+++ upstream/src/fsmagic.c 2013-01-21 16:12:13.453452572 +0100
@@ -98,7 +98,7 @@ handle_mime(struct magic_set *ms, int mi
protected int
file_fsmagic(struct magic_set *ms, const char *fn, struct stat *sb)
{
- int ret = 0, did = 0;
+ int ret, did = 0;
int mime = ms->flags & MAGIC_MIME;
#ifdef S_IFLNK
char buf[BUFSIZ+4];
@@ -135,6 +135,7 @@ file_fsmagic(struct magic_set *ms, const
return -1;
}
+ ret = 1;
if (!mime) {
#ifdef S_ISUID
if (sb->st_mode & S_ISUID)
@@ -160,7 +161,7 @@ file_fsmagic(struct magic_set *ms, const
return -1;
} else if (file_printf(ms, "%sdirectory", COMMA) == -1)
return -1;
- return 1;
+ break;
#ifdef S_IFCHR
case S_IFCHR:
/*
@@ -191,7 +192,7 @@ file_fsmagic(struct magic_set *ms, const
return -1;
#endif
}
- return 1;
+ break;
#endif
#ifdef S_IFBLK
case S_IFBLK:
@@ -223,7 +224,7 @@ file_fsmagic(struct magic_set *ms, const
return -1;
#endif
}
- return 1;
+ break;
#endif
/* TODO add code to handle V7 MUX and Blit MUX files */
#ifdef S_IFIFO
@@ -235,7 +236,7 @@ file_fsmagic(struct magic_set *ms, const
return -1;
} else if (file_printf(ms, "%sfifo (named pipe)", COMMA) == -1)
return -1;
- return 1;
+ break;
#endif
#ifdef S_IFDOOR
case S_IFDOOR:
@@ -244,7 +245,7 @@ file_fsmagic(struct magic_set *ms, const
return -1;
} else if (file_printf(ms, "%sdoor", COMMA) == -1)
return -1;
- return 1;
+ break;
#endif
#ifdef S_IFLNK
case S_IFLNK:
@@ -261,7 +262,7 @@ file_fsmagic(struct magic_set *ms, const
"%sunreadable symlink `%s' (%s)", COMMA, fn,
strerror(errno)) == -1)
return -1;
- return 1;
+ break;
}
buf[nch] = '\0'; /* readlink(2) does not do this */
@@ -290,7 +291,7 @@ file_fsmagic(struct magic_set *ms, const
"%spath too long: `%s'", COMMA,
fn) == -1)
return -1;
- return 1;
+ break;
}
/* take dir part */
(void)strlcpy(buf2, fn, sizeof buf2);
@@ -309,7 +310,8 @@ file_fsmagic(struct magic_set *ms, const
ms->flags &= MAGIC_SYMLINK;
p = magic_file(ms, buf);
ms->flags |= MAGIC_SYMLINK;
- return p != NULL ? 1 : -1;
+ if (p == NULL)
+ return -1;
} else { /* just print what it points to */
if (mime) {
if (handle_mime(ms, mime, "symlink") == -1)
@@ -318,7 +320,7 @@ file_fsmagic(struct magic_set *ms, const
COMMA, buf) == -1)
return -1;
}
- return 1;
+ break;
#endif
#ifdef S_IFSOCK
#ifndef __COHERENT__
@@ -328,36 +330,42 @@ file_fsmagic(struct magic_set *ms, const
return -1;
} else if (file_printf(ms, "%ssocket", COMMA) == -1)
return -1;
- return 1;
+ break;
#endif
#endif
case S_IFREG:
+ /*
+ * regular file, check next possibility
+ *
+ * If stat() tells us the file has zero length, report here that
+ * the file is empty, so we can skip all the work of opening and
+ * reading the file.
+ * But if the -s option has been given, we skip this
+ * optimization, since on some systems, stat() reports zero
+ * size for raw disk partitions. (If the block special device
+ * really has zero length, the fact that it is empty will be
+ * detected and reported correctly when we read the file.)
+ */
+ if ((ms->flags & MAGIC_DEVICES) == 0 && sb->st_size == 0) {
+ if (mime) {
+ if (handle_mime(ms, mime, "x-empty") == -1)
+ return -1;
+ } else if (file_printf(ms, "%sempty", COMMA) == -1)
+ return -1;
+ break;
+ }
+ ret = 0;
break;
+
default:
file_error(ms, 0, "invalid mode 0%o", sb->st_mode);
return -1;
/*NOTREACHED*/
}
- /*
- * regular file, check next possibility
- *
- * If stat() tells us the file has zero length, report here that
- * the file is empty, so we can skip all the work of opening and
- * reading the file.
- * But if the -s option has been given, we skip this optimization,
- * since on some systems, stat() reports zero size for raw disk
- * partitions. (If the block special device really has zero length,
- * the fact that it is empty will be detected and reported correctly
- * when we read the file.)
- */
- if ((ms->flags & MAGIC_DEVICES) == 0 && sb->st_size == 0) {
- if (mime) {
- if (handle_mime(ms, mime, "x-empty") == -1)
- return -1;
- } else if (file_printf(ms, "%sempty", COMMA) == -1)
- return -1;
- return 1;
+ if (!mime && did) {
+ if (file_printf(ms, " ") == -1)
+ return -1;
}
- return 0;
+ return ret;
}
--- file-5.12/src/getline.c 2012-06-21 00:18:33.000000000 +0200
+++ upstream/src/getline.c 2013-01-21 16:12:13.457452763 +0100
@@ -37,7 +37,7 @@
#include <errno.h>
#include <string.h>
-ssize_t
+public ssize_t
getdelim(char **buf, size_t *bufsiz, int delimiter, FILE *fp)
{
char *ptr, *eptr;
--- file-5.12/src/magic.c 2012-10-31 19:31:28.000000000 +0100
+++ upstream/src/magic.c 2013-01-21 16:12:13.457452763 +0100
@@ -477,3 +477,9 @@ magic_setflags(struct magic_set *ms, int
ms->flags = flags;
return 0;
}
+
+public int
+magic_version(void)
+{
+ return MAGIC_VERSION;
+}
--- file-5.12/src/magic.h.in 1970-01-01 01:00:00.000000000 +0100
+++ upstream/src/magic.h.in 2013-01-21 16:12:13.457452763 +0100
@@ -0,0 +1,107 @@
+/*
+ * Copyright (c) Christos Zoulas 2003.
+ * All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice immediately at the beginning of the file, without modification,
+ * this list of conditions, and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+#ifndef _MAGIC_H
+#define _MAGIC_H
+
+#include <sys/types.h>
+
+#define MAGIC_NONE 0x000000 /* No flags */
+#define MAGIC_DEBUG 0x000001 /* Turn on debugging */
+#define MAGIC_SYMLINK 0x000002 /* Follow symlinks */
+#define MAGIC_COMPRESS 0x000004 /* Check inside compressed files */
+#define MAGIC_DEVICES 0x000008 /* Look at the contents of devices */
+#define MAGIC_MIME_TYPE 0x000010 /* Return the MIME type */
+#define MAGIC_CONTINUE 0x000020 /* Return all matches */
+#define MAGIC_CHECK 0x000040 /* Print warnings to stderr */
+#define MAGIC_PRESERVE_ATIME 0x000080 /* Restore access time on exit */
+#define MAGIC_RAW 0x000100 /* Don't translate unprintable chars */
+#define MAGIC_ERROR 0x000200 /* Handle ENOENT etc as real errors */
+#define MAGIC_MIME_ENCODING 0x000400 /* Return the MIME encoding */
+#define MAGIC_MIME (MAGIC_MIME_TYPE|MAGIC_MIME_ENCODING)
+#define MAGIC_APPLE 0x000800 /* Return the Apple creator and type */
+
+#define MAGIC_NO_CHECK_COMPRESS 0x001000 /* Don't check for compressed files */
+#define MAGIC_NO_CHECK_TAR 0x002000 /* Don't check for tar files */
+#define MAGIC_NO_CHECK_SOFT 0x004000 /* Don't check magic entries */
+#define MAGIC_NO_CHECK_APPTYPE 0x008000 /* Don't check application type */
+#define MAGIC_NO_CHECK_ELF 0x010000 /* Don't check for elf details */
+#define MAGIC_NO_CHECK_TEXT 0x020000 /* Don't check for text files */
+#define MAGIC_NO_CHECK_CDF 0x040000 /* Don't check for cdf files */
+#define MAGIC_NO_CHECK_TOKENS 0x100000 /* Don't check tokens */
+#define MAGIC_NO_CHECK_ENCODING 0x200000 /* Don't check text encodings */
+
+/* No built-in tests; only consult the magic file */
+#define MAGIC_NO_CHECK_BUILTIN ( \
+ MAGIC_NO_CHECK_COMPRESS | \
+ MAGIC_NO_CHECK_TAR | \
+/* MAGIC_NO_CHECK_SOFT | */ \
+ MAGIC_NO_CHECK_APPTYPE | \
+ MAGIC_NO_CHECK_ELF | \
+ MAGIC_NO_CHECK_TEXT | \
+ MAGIC_NO_CHECK_CDF | \
+ MAGIC_NO_CHECK_TOKENS | \
+ MAGIC_NO_CHECK_ENCODING | \
+)
+
+/* Defined for backwards compatibility (renamed) */
+#define MAGIC_NO_CHECK_ASCII MAGIC_NO_CHECK_TEXT
+
+/* Defined for backwards compatibility; do nothing */
+#define MAGIC_NO_CHECK_FORTRAN 0x000000 /* Don't check ascii/fortran */
+#define MAGIC_NO_CHECK_TROFF 0x000000 /* Don't check ascii/troff */
+
+#define MAGIC_VERSION X.YY /* This implementation */
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct magic_set *magic_t;
+magic_t magic_open(int);
+void magic_close(magic_t);
+
+const char *magic_getpath(const char *, int);
+const char *magic_file(magic_t, const char *);
+const char *magic_descriptor(magic_t, int);
+const char *magic_buffer(magic_t, const void *, size_t);
+
+const char *magic_error(magic_t);
+int magic_setflags(magic_t, int);
+
+int magic_version(void);
+int magic_load(magic_t, const char *);
+int magic_compile(magic_t, const char *);
+int magic_check(magic_t, const char *);
+int magic_list(magic_t, const char *);
+int magic_errno(magic_t);
+
+#ifdef __cplusplus
+};
+#endif
+
+#endif /* _MAGIC_H */
--- file-5.12/src/patchlevel.h 1970-01-01 01:00:00.000000000 +0100
+++ upstream/src/patchlevel.h 2013-01-21 16:12:13.457452763 +0100
@@ -0,0 +1,361 @@
+#define FILE_VERSION_MAJOR 5
+#define patchlevel 6
+
+/*
+ * Patchlevel file for Ian Darwin's MAGIC command.
+ * $File: patchlevel.h,v 1.76 2011/01/17 16:40:41 christos Exp $
+ *
+ * $Log: patchlevel.h,v $
+ * Revision 1.77 2011/04/15 22:07:27 christos
+ * fix the patchlevel.
+ *
+ * Revision 1.76 2011/01/17 16:40:41 christos
+ * welcome to 5_05
+ *
+ * Revision 1.75 2010/01/22 21:08:13 christos
+ * welcome to 5.04
+ *
+ * Revision 1.74 2009/05/06 20:32:48 christos
+ * welcome to 5.03
+ *
+ * Revision 1.73 2009/05/04 15:15:13 christos
+ * 5.02...
+ *
+ * Revision 1.72 2009/04/30 21:20:15 christos
+ * 5.01 we are almost here.
+ *
+ * Revision 1.71 2009/01/21 19:09:42 christos
+ * file 5.0
+ *
+ * Revision 1.70 2008/08/30 10:01:01 christos
+ * file 4.26
+ *
+ * Revision 1.69 2008/07/02 15:27:05 christos
+ * welcome to 4.25
+ *
+ * Revision 1.68 2008/03/22 21:39:43 christos
+ * file 4.24
+ *
+ * Revision 1.67 2007/12/28 20:08:40 christos
+ * welcome to 4.23.
+ *
+ * Revision 1.66 2007/12/27 16:38:24 christos
+ * welcome to 4.22
+ *
+ * Revision 1.65 2007/05/24 17:22:27 christos
+ * Welcome to 4.21
+ *
+ * Revision 1.64 2007/03/01 22:14:55 christos
+ * welcome to 4.20
+ *
+ * Revision 1.63 2007/01/12 17:38:28 christos
+ * Use File id.
+ *
+ * Revision 1.62 2006/12/11 21:49:58 christos
+ * time for 4.19
+ *
+ * Revision 1.61 2006/10/31 21:18:09 christos
+ * bump
+ *
+ * Revision 1.60 2006/03/02 22:15:12 christos
+ * welcome to 4.17
+ *
+ * Revision 1.59 2005/10/17 17:15:21 christos
+ * welcome to 4.16
+ *
+ * Revision 1.58 2005/08/18 15:52:56 christos
+ * welcome to 4.15
+ *
+ * Revision 1.57 2005/06/25 15:52:14 christos
+ * Welcome to 4.14
+ *
+ * Revision 1.56 2005/02/09 19:25:13 christos
+ * Welcome to 4.13
+ *
+ * Revision 1.55 2004/11/24 18:57:47 christos
+ * Re-do the autoconf stuff once more; passes make dist now.
+ *
+ * Revision 1.54 2004/11/21 05:52:05 christos
+ * ready for 4.11
+ *
+ * Revision 1.53 2004/07/24 20:40:46 christos
+ * welcome to 4.10
+ *
+ * Revision 1.52 2004/04/07 00:32:25 christos
+ * welcome to 4.09
+ *
+ * Revision 1.51 2004/03/22 21:17:11 christos
+ * welcome to 4.08.
+ *
+ * Revision 1.50 2003/12/23 17:34:04 christos
+ * 4.07
+ *
+ * Revision 1.49 2003/10/15 02:08:27 christos
+ * welcome to 4.06
+ *
+ * Revision 1.48 2003/09/12 19:41:14 christos
+ * this is 4.04
+ *
+ * Revision 1.47 2003/05/23 21:38:21 christos
+ * welcome to 4.03
+ *
+ * Revision 1.46 2003/04/02 18:57:43 christos
+ * prepare for 4.02
+ *
+ * Revision 1.45 2003/03/26 15:37:25 christos
+ * - Pass lint
+ * - make NULL in magic_file mean stdin
+ * - Fix "-" argument to file to pass NULL to magic_file
+ * - avoid pointer casts by using memcpy
+ * - rename magic_buf -> magic_buffer
+ * - keep only the first error
+ * - manual page: new sentence, new line
+ * - fix typo in api function (magic_buf -> magic_buffer)
+ *
+ * Revision 1.44 2003/03/23 22:23:31 christos
+ * finish librarification.
+ *
+ * Revision 1.43 2003/03/23 21:16:26 christos
+ * update copyrights.
+ *
+ * Revision 1.42 2003/03/23 04:06:05 christos
+ * Library re-organization
+ *
+ * Revision 1.41 2003/02/27 20:53:45 christos
+ * - fix memory allocation problem (Jeff Johnson)
+ * - fix stack overflow corruption (David Endler)
+ * - fixes from NetBSD source (Antti Kantee)
+ * - magic fixes
+ *
+ * Revision 1.40 2003/02/08 18:33:53 christos
+ * - detect inttypes.h too (Dave Love <d.love@dl.ac.uk>)
+ * - eliminate unsigned char warnings (Petter Reinholdtsen <pere@hungry.com>)
+ * - better elf PT_NOTE handling (Nalin Dahyabhai <nalin@redhat.com>)
+ * - add options to format the output differently
+ * - much more magic.
+ *
+ * Revision 1.39 2002/07/03 18:57:52 christos
+ * - ansify/c99ize
+ * - more magic
+ * - better COMPILE_ONLY support.
+ * - new magic files.
+ * - fix solaris compilation problems.
+ *
+ * Revision 1.38 2002/05/16 18:45:56 christos
+ * - pt_note elf additions from NetBSD
+ * - EMX os specific changes (Alexander Mai)
+ * - stdint.h detection, acconfig.h fixes (Maciej W. Rozycki, Franz Korntner)
+ * - regex file additions (Kim Cromie)
+ * - getopt_long support and misc cleanups (Michael Piefel)
+ * - many magic fixes and additions
+ *
+ * Revision 1.37 2001/09/03 14:44:22 christos
+ * daylight/tm_isdst detection
+ * magic fixes
+ * don't eat the whole file if it has only nulls
+ *
+ * Revision 1.36 2001/07/22 21:04:15 christos
+ * - magic fixes
+ * - add new operators, pascal strings, UTC date printing, $HOME/.magic
+ * [from "Tom N Harris" <telliamed@mac.com>]
+ *
+ * Revision 1.35 2001/04/24 14:40:25 christos
+ * - rename magic file sgi to mips and fix it
+ * - add support for building magic.mgc
+ * - portability fixes for mmap()
+ * - try gzip before uncompress, because uncompress sometimes hangs
+ * - be more conservative about pipe reads and writes
+ * - many magic fixes
+ *
+ * Revision 1.34 2001/03/12 05:05:57 christos
+ * - new compiled magic format
+ * - lots of magic additions
+ *
+ * Revision 1.33 2000/11/13 00:30:50 christos
+ * - wordperfect magic fix: freebsd pr 9388
+ * - more msdos fixes from freebsd pr's 20131 and 20812
+ * - sas and spss magic [Bruce Foster]
+ * - mkinstalldirs [John Fremlin]
+ * - sgi opengl fixes [Michael Pruett]
+ * - netbsd magic fixes [Ignatios Souvatzis]
+ * - audio additions [Michael Pruett]
+ * - fix problem with non ansi RCSID [Andreas Ley]
+ * - oggs magic [Felix von Leitner]
+ * - gmon magic [Eugen Dedu]
+ * - TNEF magic [Joomy]
+ * - netpbm magic and misc other image stuff [Bryan Henderson]
+ *
+ * Revision 1.32 2000/08/05 18:24:18 christos
+ * Correct indianness detection in elf (Charles Hannum)
+ * FreeBSD elf core support (Guy Harris)
+ * Use gzip in systems that don't have uncompress (Anthon van der Neut)
+ * Internationalization/EBCDIC support (Eric Fisher)
+ * Many many magic changes
+ *
+ * Revision 1.31 2000/05/14 17:58:36 christos
+ * - new magic for claris files
+ * - new magic for mathematica and maple files
+ * - new magic for msvc files
+ * - new -k flag to keep going matching all possible entries
+ * - add the word executable on #! magic files, and fix the usage of
+ * the word script
+ * - lots of other magic fixes
+ * - fix typo test -> text
+ *
+ * Revision 1.30 2000/04/11 02:41:17 christos
+ * - add support for mime output (-i)
+ * - make sure we free memory in case realloc fails
+ * - magic fixes
+ *
+ * Revision 1.29 1999/11/28 20:02:29 christos
+ * new string/[Bcb] magic from anthon, and adjustments to the magic files to
+ * use it.
+ *
+ * Revision 1.28 1999/10/31 22:11:48 christos
+ * - add "char" type for compatibility with HP/UX
+ * - recognize HP/UX syntax &=n etc.
+ * - include errno.h for CYGWIN
+ * - conditionalize the S_IS* macros
+ * - revert the SHT_DYNSYM test that broke the linux stripped binaries test
+ * - lots of Magdir changes
+ *
+ * Revision 1.27 1999/02/14 17:21:41 christos
+ * Automake support and misc cleanups from Rainer Orth
+ * Enable reading character and block special files from Dale R. Worley
+ *
+ * Revision 1.26 1998/09/12 13:19:39 christos
+ * - add support for bi-endian indirect offsets (Richard Verhoeven)
+ * - add recognition for bcpl (Joseph Myers)
+ * - remove non magic files from Magdir to avoid difficulties building
+ * on os2 where files are case independent
+ * - magic fixes.
+ *
+ * Revision 1.25 1998/06/27 14:04:04 christos
+ * OLF patch Guy Harris
+ * Recognize java/html (debian linux)
+ * Const poisoning (debian linux)
+ * More magic!
+ *
+ * Revision 1.24 1998/02/15 23:20:38 christos
+ * Autoconf patch: Felix von Leitner <leitner@math.fu-berlin.de>
+ * More magic fixes
+ * Elf64 fixes
+ *
+ * Revision 1.23 1997/11/05 16:03:37 christos
+ * - correct elf prps offset for SunOS-2.5.1 [guy@netapp.com]
+ * - handle 64 bit time_t's correctly [ewt@redhat.com]
+ * - new mime style magic [clarosse@netvista.net]
+ * - new TI calculator magic [rmcguire@freenet.columbus.oh.us]
+ * - new figlet fonts [obrien@freebsd.org]
+ * - new cisco magic, and elf fixes [jhawk@bbnplanet.com]
+ * - -b flag addition, and x86 filesystem magic [vax@linkhead.paranoia.com]
+ * - s/Mpeg/MPEG, header and elf typo fixes [guy@netapp.com]
+ * - Windows/NT registry files, audio code [guy@netapp.com]
+ * - libGrx graphics lib fonts [guy@netapp.com]
+ * - PNG fixes [guy@netapp.com]
+ * - more m$ document magic [guy@netapp.com]
+ * - PPD files [guy@netapp.com]
+ * - archive magic cleanup [guy@netapp.com]
+ * - linux kernel magic cleanup [guy@netapp.com]
+ * - lecter magic [guy@netapp.com]
+ * - vgetty magic [guy@netapp.com]
+ * - sniffer additions [guy@netapp.com]
+ *
+ * Revision 1.22 1997/01/15 17:23:24 christos
+ * - add support for elf core files: find the program name under SVR4 [Ken Pizzini]
+ * - print strings only up to the first carriage return [various]
+ * - freebsd international ascii support [J Wunsch]
+ * - magic fixes and additions [Guy Harris]
+ * - 64 bit fixes [Larry Schwimmer]
+ * - support for both utime and utimes, but don't restore file access times
+ * by default [various]
+ * - \xXX only takes 2 hex digits, not 3.
+ * - re-implement support for core files [Guy Harris]
+ *
+ * Revision 1.21 1996/10/05 18:15:29 christos
+ * Segregate elf stuff and conditionally enable it with -DBUILTIN_ELF
+ * More magic fixes
+ *
+ * Revision 1.20 1996/06/22 22:15:52 christos
+ * - support relative offsets of the form >&
+ * - fix bug with truncating magic strings that contain \n
+ * - file -f - did not read from stdin as documented
+ * - support elf file parsing using our own elf support.
+ * - as always magdir fixes and additions.
+ *
+ * Revision 1.19 1995/10/27 23:14:46 christos
+ * Ability to parse colon separated list of magic files
+ * New LEGAL.NOTICE
+ * Various magic file changes
+ *
+ * Revision 1.18 1995/05/20 22:09:21 christos
+ * Passed incorrect argument to eatsize().
+ * Use %ld and %lx where appropriate.
+ * Remove unused variables
+ * ELF support for both big and little endian
+ * Fixes for small files again.
+ *
+ * Revision 1.17 1995/04/28 17:29:13 christos
+ * - Incorrect nroff detection fix from der Mouse
+ * - Lost and incorrect magic entries.
+ * - Added ELF stripped binary detection [in C; ugh]
+ * - Look for $MAGIC to find the magic file.
+ * - Eat trailing size specifications from numbers i.e. ignore 10L
+ * - More fixes for very short files
+ *
+ * Revision 1.16 1995/03/25 22:06:45 christos
+ * - use strtoul() where it exists.
+ * - fix sign-extend bug
+ * - try to detect tar archives before nroff files, otherwise
+ * tar files where the first file starts with a . will not work
+ *
+ * Revision 1.15 1995/01/21 21:03:35 christos
+ * Added CSECTION for the file man page
+ * Added version flag -v
+ * Fixed bug with -f input flag (from iorio@violet.berkeley.edu)
+ * Lots of magic fixes and reorganization...
+ *
+ * Revision 1.14 1994/05/03 17:58:23 christos
+ * changes from mycroft@gnu.ai.mit.edu (Charles Hannum) for unsigned
+ *
+ * Revision 1.13 1994/01/21 01:27:01 christos
+ * Fixed null termination bug from Don Seeley at BSDI in ascmagic.c
+ *
+ * Revision 1.12 1993/10/27 20:59:05 christos
+ * Changed -z flag to understand gzip format too.
+ * Moved builtin compression detection to a table, and move
+ * the compress magic entry out of the source.
+ * Made printing of numbers unsigned, and added the mask to it.
+ * Changed the buffer size to 8k, because gzip will refuse to
+ * unzip just a few bytes.
+ *
+ * Revision 1.11 1993/09/24 18:49:06 christos
+ * Fixed small bug in softmagic.c introduced by
+ * copying the data to be examined out of the input
+ * buffer. Changed the Makefile to use sed to create
+ * the correct man pages.
+ *
+ * Revision 1.10 1993/09/23 21:56:23 christos
+ * Passed purify. Fixed indirections. Fixed byte order printing.
+ * Fixed segmentation faults caused by referencing past the end
+ * of the magic buffer. Fixed bus errors caused by referencing
+ * unaligned shorts or longs.
+ *
+ * Revision 1.9 1993/03/24 14:23:40 ian
+ * Batch of minor changes from several contributors.
+ *
+ * Revision 1.8 93/02/19 15:01:26 ian
+ * Numerous changes from Guy Harris too numerous to mention but including
+ * byte-order independance, fixing "old-style masking", etc. etc. A bugfix
+ * for broken symlinks from martin@@d255s004.zfe.siemens.de.
+ *
+ * Revision 1.7 93/01/05 14:57:27 ian
+ * Couple of nits picked by Christos (again, thanks).
+ *
+ * Revision 1.6 93/01/05 13:51:09 ian
+ * Lotsa work on the Magic directory.
+ *
+ * Revision 1.5 92/09/14 14:54:51 ian
+ * Fix a tiny null-pointer bug in previous fix for tar archive + uncompress.
+ *
+ */
--- file-5.12/src/softmagic.c 2013-01-04 01:47:35.000000000 +0100
+++ upstream/src/softmagic.c 2013-01-21 16:12:13.461952805 +0100
@@ -43,9 +43,9 @@ FILE_RCSID("@(#)$File: softmagic.c,v 1.1
private int match(struct magic_set *, struct magic *, uint32_t,
- const unsigned char *, size_t, size_t, int, int, int);
+ const unsigned char *, size_t, size_t, int, int, int, int *);
private int mget(struct magic_set *, const unsigned char *,
- struct magic *, size_t, size_t, unsigned int, int, int, int);
+ struct magic *, size_t, size_t, unsigned int, int, int, int, int *);
private int magiccheck(struct magic_set *, struct magic *);
private int32_t mprint(struct magic_set *, struct magic *);
private int32_t moffset(struct magic_set *, struct magic *);
@@ -73,7 +73,7 @@ file_softmagic(struct magic_set *ms, con
int rv;
for (ml = ms->mlist[0]->next; ml != ms->mlist[0]; ml = ml->next)
if ((rv = match(ms, ml->magic, ml->nmagic, buf, nbytes, 0, mode,
- text, 0)) != 0)
+ text, 0, NULL)) != 0)
return rv;
return 0;
@@ -109,16 +109,19 @@ file_softmagic(struct magic_set *ms, con
private int
match(struct magic_set *ms, struct magic *magic, uint32_t nmagic,
const unsigned char *s, size_t nbytes, size_t offset, int mode, int text,
- int flip)
+ int flip, int *returnval)
{
uint32_t magindex = 0;
unsigned int cont_level = 0;
int need_separator = 0;
- int returnval = 0, e; /* if a match is found it is set to 1*/
+ int returnvalv = 0, e; /* if a match is found it is set to 1*/
int firstline = 1; /* a flag to print X\n X\n- X */
int printed_something = 0;
int print = (ms->flags & (MAGIC_MIME|MAGIC_APPLE)) == 0;
+ if (returnval == NULL)
+ returnval = &returnvalv;
+
if (file_check_mem(ms, cont_level) == -1)
return -1;
@@ -144,7 +147,7 @@ match(struct magic_set *ms, struct magic
/* if main entry matches, print it... */
switch (mget(ms, s, m, nbytes, offset, cont_level, mode, text,
- flip)) {
+ flip, returnval)) {
case -1:
return -1;
case 0:
@@ -152,7 +155,7 @@ match(struct magic_set *ms, struct magic
break;
default:
if (m->type == FILE_INDIRECT)
- returnval = 1;
+ *returnval = 1;
switch (magiccheck(ms, m)) {
case -1:
@@ -178,6 +181,7 @@ match(struct magic_set *ms, struct magic
}
if ((e = handle_annotation(ms, m)) != 0) {
+ *returnval = 1;
return e;
}
/*
@@ -229,7 +233,7 @@ match(struct magic_set *ms, struct magic
}
#endif
switch (mget(ms, s, m, nbytes, offset, cont_level, mode,
- text, flip)) {
+ text, flip, returnval)) {
case -1:
return -1;
case 0:
@@ -239,7 +243,7 @@ match(struct magic_set *ms, struct magic
break;
default:
if (m->type == FILE_INDIRECT)
- returnval = 1;
+ *returnval = 1;
flush = 0;
break;
}
@@ -262,8 +266,10 @@ match(struct magic_set *ms, struct magic
ms->c.li[cont_level].got_match = 0;
break;
}
- if ((e = handle_annotation(ms, m)) != 0)
+ if ((e = handle_annotation(ms, m)) != 0) {
+ *returnval = 1;
return e;
+ }
/*
* If we are going to print something,
* make sure that we have a separator first.
@@ -312,13 +318,13 @@ match(struct magic_set *ms, struct magic
if (printed_something) {
firstline = 0;
if (print)
- returnval = 1;
+ *returnval = 1;
}
if ((ms->flags & MAGIC_CONTINUE) == 0 && printed_something) {
- return returnval; /* don't keep searching */
+ return *returnval; /* don't keep searching */
}
}
- return returnval; /* This is hit if -k is set or there is no match */
+ return *returnval; /* This is hit if -k is set or there is no match */
}
private int
@@ -1058,8 +1064,8 @@ mcopy(struct magic_set *ms, union VALUET
if (type == FILE_BESTRING16)
src++;
- /* check for pointer overflow */
- if (src < s) {
+ /* check that offset is within range */
+ if (offset >= nbytes) {
file_magerror(ms, "invalid offset %u in mcopy()",
offset);
return -1;
@@ -1110,7 +1116,7 @@ mcopy(struct magic_set *ms, union VALUET
private int
mget(struct magic_set *ms, const unsigned char *s, struct magic *m,
size_t nbytes, size_t o, unsigned int cont_level, int mode, int text,
- int flip)
+ int flip, int *returnval)
{
uint32_t offset = ms->offset;
uint32_t count = m->str_range;
@@ -1713,7 +1719,7 @@ mget(struct magic_set *ms, const unsigne
return -1;
}
return match(ms, ml.magic, ml.nmagic, s, nbytes, offset,
- mode, text, flip);
+ mode, text, flip, returnval);
case FILE_NAME:
if (file_printf(ms, "%s", m->desc) == -1)
--- file-5.12/src/teststrchr.c 1970-01-01 01:00:00.000000000 +0100
+++ upstream/src/teststrchr.c 2013-01-21 16:12:13.461952805 +0100
@@ -0,0 +1,20 @@
+#ifdef TEST
+#include <stdio.h>
+#include <err.h>
+#include <string.h>
+int
+main(void)
+{
+ char *strchr();
+
+ if (strchr(1, "abc", 'c') == NULL)
+ errx(1, "error 1");
+ if (strchr("abc", 'd') != NULL)
+ errx(1, "error 2");
+ if (strchr("abc", 'a') == NULL)
+ errx(1, "error 3");
+ if (strchr("abc", 'c') == NULL)
+ errx(1, "error 4");
+ return 0;
+}
+#endif