3788 lines
121 KiB
Diff
3788 lines
121 KiB
Diff
--- 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
|