Imported Upstream version 5.25 54/75654/1 upstream/5.25
authorDongHun Kwak <dh0128.kwak@samsung.com>
Tue, 21 Jun 2016 01:26:25 +0000 (10:26 +0900)
committerDongHun Kwak <dh0128.kwak@samsung.com>
Tue, 21 Jun 2016 01:26:28 +0000 (10:26 +0900)
Change-Id: I4141a6582e35538bc5567fb047ce7a4311ebef31
Signed-off-by: DongHun Kwak <dh0128.kwak@samsung.com>
39 files changed:
ChangeLog
configure.ac
doc/file.man
doc/libmagic.man
doc/magic.man
magic/Magdir/adventure
magic/Magdir/apple
magic/Magdir/archive
magic/Magdir/c-lang
magic/Magdir/c64
magic/Magdir/compress
magic/Magdir/database
magic/Magdir/filesystems
magic/Magdir/frame
magic/Magdir/iff
magic/Magdir/images
magic/Magdir/karma
magic/Magdir/linux
magic/Magdir/make
magic/Magdir/map
magic/Magdir/msdos
magic/Magdir/netscape
magic/Magdir/python
magic/Magdir/scientific
magic/Magdir/sgi
magic/Magdir/sgml
magic/Magdir/windows
src/apprentice.c
src/file.c
src/file.h
src/file_opts.h
src/funcs.c
src/gmtime_r.c
src/localtime_r.c
src/magic.c
src/magic.h.in
src/print.c
src/readelf.c
src/softmagic.c

index 1fb44a2..8e67ef6 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,19 @@
+2015-09-16   9:50  Christos Zoulas <christos@zoulas.com>
+       
+       * release 5.25
+
+2015-09-11  13:25  Christos Zoulas <christos@zoulas.com>
+
+       * add a limit to the length of regex searches
+
+2015-09-08   9:50  Christos Zoulas <christos@zoulas.com>
+
+       * fix problems with --parameter (Christoph Biedl)
+
+2015-07-11  10:35  Christos Zoulas <christos@zoulas.com>
+
+       * Windows fixes PR/466 (Jason Hood)
+
 2015-07-09  10:35  Christos Zoulas <christos@zoulas.com>
 
        * release 5.24
index a48e445..50c3188 100644 (file)
@@ -1,5 +1,5 @@
 dnl Process this file with autoconf to produce a configure script.
-AC_INIT([file],[5.24],[christos@astron.com])
+AC_INIT([file],[5.25],[christos@astron.com])
 AM_INIT_AUTOMAKE([subdir-objects foreign])
 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
 
index 01e1fc2..74518ee 100644 (file)
@@ -1,5 +1,5 @@
-.\" $File: file.man,v 1.116 2015/06/03 18:21:24 christos Exp $
-.Dd June 3, 2015
+.\" $File: file.man,v 1.117 2015/06/03 19:51:27 christos Exp $
+.Dd September 11, 2015
 .Dt FILE __CSECTION__
 .Os
 .Sh NAME
@@ -316,6 +316,7 @@ Set various parameter limits.
 .It Li elf_notes Ta 256 Ta max ELF notes processed
 .It Li elf_phnum Ta 128 Ta max ELF program sections processed
 .It Li elf_shnum Ta 32768 Ta max ELF sections processed
+.It Li regex Ta 8192 Ta length limit for regex searches
 .El
 .It Fl r , Fl Fl raw
 Don't translate unprintable characters to \eooo.
index a5c8e2e..0cbcd4d 100644 (file)
@@ -1,4 +1,4 @@
-.\" $File: libmagic.man,v 1.36 2015/04/10 15:36:01 christos Exp $
+.\" $File: libmagic.man,v 1.37 2015/06/03 18:21:24 christos Exp $
 .\"
 .\" Copyright (c) Christos Zoulas 2003.
 .\" All Rights Reserved.
@@ -25,7 +25,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.Dd June 3, 2015
+.Dd September 11, 2015
 .Dt LIBMAGIC 3
 .Os
 .Sh NAME
@@ -291,6 +291,7 @@ library.
 .It Li MAGIC_PARAM_ELF_NOTES_MAX Ta size_t Ta 256
 .It Li MAGIC_PARAM_ELF_PHNUM_MAX Ta size_t Ta 128
 .It Li MAGIC_PARAM_ELF_SHNUM_MAX Ta size_t Ta 32768
+.It Li MAGIC_PARAM_REGEX_MAX Ta size_t Ta 8192
 .El
 .Pp
 The
index 86bbda0..fca6f02 100644 (file)
@@ -1,4 +1,4 @@
-.\" $File: magic.man,v 1.84 2014/06/03 19:01:34 christos Exp $
+.\" $File: magic.man,v 1.85 2015/01/01 17:07:34 christos Exp $
 .Dd January 1, 2015
 .Dt MAGIC __FSECTION__
 .Os
@@ -200,7 +200,7 @@ interpreted as a UNIX-style date, but interpreted as local time rather
 than UTC.
 .It Dv indirect
 Starting at the given offset, consult the magic database again.
-The offset of th
+The offset of the
 .Dv indirect
 magic is by default absolute in the file, but one can specify
 .Dv /r
index 131eeac..e880f12 100644 (file)
@@ -1,6 +1,6 @@
 
 #------------------------------------------------------------------------------
-# $File: adventure,v 1.13 2010/12/31 16:32:54 christos Exp $
+# $File: adventure,v 1.14 2012/06/21 01:32:26 christos Exp $
 # adventure: file(1) magic for Adventure game files
 #
 # from Allen Garvin <earendil@faeryland.tamu-commerce.edu>
@@ -17,6 +17,7 @@
 # Infocom (see z-machine)
 #------------------------------------------------------------------------------
 # Z-machine:  file(1) magic for Z-machine binaries.
+# Sanity checks by David Griffith <dave@661.org>
 # Updated by Adam Buchbinder <adam.buchbinder@gmail.com>
 #
 #http://www.gnelson.demon.co.uk/zspec/sect11.html
 >>>>>>>2       ubeshort        < 10    Release %d /
 >>>>>>>>18     string          >\0     Serial %.6s)
 !:strength + 40
+!:mime application/x-zmachine
 
 #------------------------------------------------------------------------------
 # Glulx:  file(1) magic for Glulx binaries.
 #
+# David Griffith <dave@661.org>
 # I haven't checked for false matches yet.
 #
 0      string                  Glul    Glulx game data
@@ -52,7 +55,7 @@
 >>6    byte                    x       \b.%d
 >>8    byte                    x       \b.%d)
 >36    string                  Info    Compiled by Inform
-
+!:mime application/x-glulx
 
 
 # For Quetzal and blorb magic see iff
 >9     belong  !0x0A0D1A00     game data, CORRUPTED
 >9     belong   0x0A0D1A00
 >>13   string  >\0             %s game data
+!:mime application/x-tads
 #  Resource files start with "TADS2 rsc\n\r\032\0" then the compiler version.
 0      string  TADS2\ rsc      TADS
 >9     belong  !0x0A0D1A00     resource data, CORRUPTED
 >9     belong   0x0A0D1A00
 >>13   string  >\0             %s resource data
+!:mime application/x-tads
 #  Some saved game files start with "TADS2 save/g\n\r\032\0", a little-endian
 #  2-byte length N, the N-char name of the game file *without* a NUL (darn!),
 # "TADS2 save\n\r\032\0" and the interpreter version. 
 >12    belong  !0x0A0D1A00     saved game data, CORRUPTED
 >12    belong   0x0A0D1A00
 >>(16.s+32) string >\0         %s saved game data
+!:mime application/x-tads
 #  Other saved game files start with "TADS2 save\n\r\032\0" and the interpreter
 #  version.
 0      string  TADS2\ save     TADS
 >10    belong  !0x0A0D1A00     saved game data, CORRUPTED
 >10    belong   0x0A0D1A00
 >>14   string  >\0             %s saved game data
+!:mime application/x-tads
 
 # TADS (Text Adventure Development System) version 3
 #  Game files start with "T3-image\015\012\032"
 >>11   byte    x               \b%c
 >>12   byte    x               \b%c
 >>13   byte    x               \b%c)
+!:mime application/x-t3vm-image
 
+# edited by David Griffith <dave@661.org>
 # Danny Milosavljevic <danny.milo@gmx.net>
-# this are adrift (adventure game standard) game files, extension .taf
-# depending on version magic continues with 0x93453E6139FA (V 4.0)
-# 0x9445376139FA (V 3.90)
-# 0x9445366139FA (V 3.80)
-# this is from source (http://www.adrift.org.uk/) and I have some taf
-# files, and checked them.
-#0     belong  0x3C423FC9
-#>4    belong  0x6A87C2CF      Adrift game file
-#!:mime        application/x-adrift
+# These are ADRIFT (adventure game standard) game files, extension .taf
+# Checked from source at (http://www.adrift.co/) and various taf files 
+# found at the Interactive Fiction Archive (http://ifarchive.org/)
+0      belong  0x3C423FC9
+>4     belong  0x6A87C2CF      Adrift game file version
+>>8    belong  0x94453661      3.80
+>>8    belong  0x94453761      3.90
+>>8    belong  0x93453E61      4.0
+>>8    belong  0x92453E61      5.0
+>>8    default x               unknown
+!:mime application/x-adrift
index 98372d2..133a2c7 100644 (file)
@@ -1,6 +1,6 @@
 
 #------------------------------------------------------------------------------
-# $File: apple,v 1.29 2014/04/30 21:41:02 christos Exp $
+# $File: apple,v 1.30 2015/04/13 13:09:06 christos Exp $
 # apple:  file(1) magic for Apple file formats
 #
 0      search/1/t      FiLeStArTfIlEsTaRt      binscii (apple ][) text
 >>20   beshort x                       \b, descriptors %d
 # Assume       8 partitions each at a multiple of the sector size.
 # We could glean this from the partition descriptors, but they are empty!?!?
->>(2.S*1)      indirect                \b, contains[@0x%x]: 
->>(2.S*2)      indirect                \b, contains[@0x%x]: 
->>(2.S*3)      indirect                \b, contains[@0x%x]: 
->>(2.S*4)      indirect                \b, contains[@0x%x]: 
->>(2.S*5)      indirect                \b, contains[@0x%x]: 
->>(2.S*6)      indirect                \b, contains[@0x%x]: 
->>(2.S*7)      indirect                \b, contains[@0x%x]: 
->>(2.S*8)      indirect                \b, contains[@0x%x]: 
+>>(2.S*1)      indirect        x       \b, contains[@0x%x]: 
+>>(2.S*2)      indirect        x       \b, contains[@0x%x]: 
+>>(2.S*3)      indirect        x       \b, contains[@0x%x]: 
+>>(2.S*4)      indirect        x       \b, contains[@0x%x]: 
+>>(2.S*5)      indirect        x       \b, contains[@0x%x]: 
+>>(2.S*6)      indirect        x       \b, contains[@0x%x]: 
+>>(2.S*7)      indirect        x       \b, contains[@0x%x]: 
+>>(2.S*8)      indirect        x       \b, contains[@0x%x]: 
 
 # Yes, the 3rd and 4th bytes are reserved, but we use them to make the
 # magic stronger.
index d5d38be..da34b21 100644 (file)
@@ -1,5 +1,5 @@
 #------------------------------------------------------------------------------
-# $File: archive,v 1.89 2015/03/17 15:35:42 christos Exp $
+# $File: archive,v 1.90 2015/04/24 15:44:12 christos Exp $
 # archive:  file(1) magic for archive formats (see also "msdos" for self-
 #           extracting compressed archives)
 #
 # AIN
 0      string  \x33\x18 AIN archive data
 0      string  \x33\x17 AIN archive data
-# XPA32
-0      string  xpa\0\1 XPA32 archive data
+# XPA32 test moved and merged with XPA by Joerg Jenderek at Sep 2015
 # SZip (TODO: doesn't catch all versions)
 0      string  SZ\x0a\4 SZip archive data
 # XPack DiskImage
-0      string  jm XPack DiskImage archive data
+# *.XDI updated by Joerg Jenderek Sep 2015
+# ftp://ftp.sac.sk/pub/sac/pack/0index.txt 
+# GRR: this test is still too general as it catches also text files starting with jm
+0      string  jm      
+# only found examples with this additional characteristic 2 bytes
+>2     string  \x2\x4  Xpack DiskImage archive data
+#!:ext xdi
 # XPack Data
-0      string  xpa XPack archive data
+# *.xpa updated by Joerg Jenderek Sep 2015
+# ftp://ftp.elf.stuba.sk/pub/pc/pack/
+0      string  xpa     XPA
+!:ext  xpa
+# XPA32
+# ftp://ftp.elf.stuba.sk/pub/pc/pack/xpa32.zip
+# created by XPA32.EXE version 1.0.2 for Windows
+>0     string  xpa\0\1 \b32 archive data
+# created by XPACK.COM version 1.67m or 1.67r with short 0x1800 
+>3     ubeshort        !0x0001 \bck archive data
 # XPack Single Data
-0      string  \xc3\x8d\ jm XPack single archive data
+# changed by Joerg Jenderek Sep 2015 back to like in version 5.12
+# letter 'I'+ acute accent is equivalent to \xcd
+0      string  \xcd\ jm        Xpack single archive data
+#!:mime        application/x-xpa-compressed
+!:ext xpa
 
 # TODO: missing due to unknown magic/magic at end of file:
 #DWC
index a2c33ce..671a227 100644 (file)
@@ -1,5 +1,5 @@
 #------------------------------------------------------------------------------
-# $File: c-lang,v 1.18 2013/08/14 13:06:43 christos Exp $
+# $File: c-lang,v 1.19 2014/06/03 19:17:27 christos Exp $
 # c-lang:  file(1) magic for C and related languages programs
 #
 
@@ -29,7 +29,7 @@
 
 # C++
 # The strength of these rules is increased so they beat the C rules above
-0      regex   \^template[\ \t\n]+     C++ source text
+0      regex   \^template[\ \t]+<.*>[\ \t\n]+  C++ source text
 !:strength + 5
 !:mime text/x-c++
 0      regex   \^virtual[\ \t\n]+              C++ source text
index 35e0d5b..40ad82c 100644 (file)
@@ -1,6 +1,6 @@
 
 #------------------------------------------------------------------------------
-# $File$
+# $File: c64,v 1.5 2009/09/19 16:28:08 christos Exp $
 # c64:  file(1) magic for various commodore 64 related files
 #
 # From: Dirk Jagdmann <doj@cubic.org>
@@ -41,3 +41,9 @@
 >32    leshort         x               Version:0x%x
 >36    leshort         !0              Entries:%i
 >40    string          x               Name:%.24s
+
+# Raw tape file format (.tap files)
+# Esa Hyyti <esa@netlab.tkk.fi>
+0      string          C64-TAPE-RAW    C64 Raw Tape File (.tap),
+>0x0c  byte            x               Version:%u,
+>0x10   lelong         x               Length:%u cycles
index 700d017..4fc53bb 100644 (file)
@@ -1,5 +1,5 @@
 #------------------------------------------------------------------------------
-# $File: compress,v 1.62 2014/09/13 14:27:12 christos Exp $
+# $File: compress,v 1.63 2015/03/11 19:27:35 christos Exp $
 # compress:  file(1) magic for pure-compression formats (no archives)
 #
 # compress, gzip, pack, compact, huf, squeeze, crunch, freeze, yabba, etc.
 !:mime application/x-qpress
 
 # Zlib https://www.ietf.org/rfc/rfc6713.txt
-0      beshort%31      =0      
->0     byte&0xf        =8
->>0    byte&0x80       =0      zlib compressed data
+0      string/b        x
+>0     beshort%31      =0      
+>>0    byte&0xf        =8
+>>>0   byte&0x80       =0      zlib compressed data
 !:mime application/zlib
index 13f163b..a987364 100644 (file)
@@ -1,6 +1,6 @@
 
 #------------------------------------------------------------------------------
-# $File: database,v 1.43 2014/10/28 15:47:39 christos Exp $
+# $File: database,v 1.44 2015/07/02 18:25:57 christos Exp $
 # database:  file(1) magic for various databases
 #
 # extracted from header/code files by Graeme Wilford (eep2gw@ee.surrey.ac.uk)
 
 # IDA (Interactive Disassembler) database
 0      string          IDA1    IDA (Interactive Disassembler) database
+
+# Hopper (reverse engineering tool) http://www.hopperapp.com/
+0      string          hopperdb        Hopper database
+
index 431bb63..d98f367 100644 (file)
@@ -1,5 +1,5 @@
 #------------------------------------------------------------------------------
-# $File: filesystems,v 1.108 2015/01/01 17:43:47 christos Exp $
+# $File: filesystems,v 1.110 2015/08/24 05:11:10 christos Exp $
 # filesystems:  file(1) magic for different filesystems
 #
 0      name    partid  
 0x410  leshort         0x137f
 !:strength / 2
 >0x402 beshort         < 100
->0x402 beshort         > -1            Minix filesystem, V1, %d zones
+>0x402 beshort         > -1            Minix filesystem, V1, 14 char names, %d zones
 >0x1e  string          minix           \b, bootable
 0x410  beshort         0x137f
 !:strength / 2
 >0x1e  string          minix           \b, bootable
 0x410  leshort         0x2468
 >0x402 beshort         < 100
->>0x402        beshort         > -1            Minix filesystem, V2, %d zones
+>>0x402        beshort         > -1            Minix filesystem, V2, 14 char names
 >0x1e  string          minix           \b, bootable
 0x410  beshort         0x2468
 >0x402 beshort         < 100
->0x402 beshort         > -1            Minix filesystem, V2 (big endian), %d zones
+>0x402 beshort         > -1            Minix filesystem, V2 (big endian)
 >0x1e  string          minix           \b, bootable
-
 0x410  leshort         0x2478
 >0x402 beshort         < 100
->0x402 beshort         > -1            Minix filesystem, V2, 30 char names, %d zones
+>0x402 beshort         > -1            Minix filesystem, V2, 30 char names
 >0x1e  string          minix           \b, bootable
 0x410  leshort         0x2478
 >0x402 beshort         < 100
->0x402 beshort         > -1            Minix filesystem, V2, 30 char names, %d zones
+>0x402 beshort         > -1            Minix filesystem, V2, 30 char names
 >0x1e  string          minix           \b, bootable
 0x410  beshort         0x2478
->0x402 beshort         !0              Minix filesystem, V2, 30 char names (big endian), %d zones
->0x1e  string          minix           \b, bootable
-0x410  leshort         0x4d5a
->0x402 beshort         !0              Minix filesystem, V3, %d zones
+>0x402 beshort         !0              Minix filesystem, V2, 30 char names (big endian)
 >0x1e  string          minix           \b, bootable
+0x418  leshort         0x4d5a
+>0x402 beshort         <100
+>>0x402        beshort         > -1            Minix filesystem, V3, 60 char names
 
 # SGI disk labels - Nathan Scott <nathans@debian.org>
 0      belong          0x0BE5A941      SGI disk label (volume header)
 >>0x10024        belong          x               (blocksize %d,
 >>0x10060        string          >\0             lockproto %s)
 
-# BTRFS
-0x10040         string          _BHRfS_M        BTRFS Filesystem
->0x1012b        string          >\0             (label "%s",
->0x10090        lelong          x               sectorsize %d,
->0x10094        lelong          x               nodesize %d,
->0x10098        lelong          x               leafsize %d)
-
+# Russell Coker <russell@coker.com.au>
+0x10040                string  _BHRfS_M        BTRFS Filesystem
+>0x1012b       string  >\0             label "%s",
+>0x10090       lelong  x               sectorsize %d,
+>0x10094       lelong  x               nodesize %d,
+>0x10098       lelong  x               leafsize %d,
+>0x10020       belong  x               UUID=%8x-
+>0x10024       beshort x               \b%4x-
+>0x10026       beshort x               \b%4x-
+>0x10028       beshort x               \b%4x-
+>0x1002a       beshort x               \b%4x
+>0x1002c       belong  x               \b%8x,
+>0x10078       lequad  x               %lld/
+>0x10070       lequad  x               \b%lld bytes used,
+>0x10088       lequad  x               %lld devices
 
 # dvdisaster's .ecc
 # From: "Nelson A. de Oliveira" <naoliv@gmail.com>
index 21c1838..d3f9687 100644 (file)
@@ -1,6 +1,6 @@
 
 #------------------------------------------------------------------------------
-# $File$
+# $File: frame,v 1.12 2009/09/19 16:28:09 christos Exp $
 # frame:  file(1) magic for FrameMaker files
 #
 # This stuff came on a FrameMaker demo tape, most of which is
 >10    string          1.0              (1.0
 >13    byte            x                 %c)
 # XXX - this book entry should be verified, if you find one, uncomment this
-#0     string          \<Book\         FrameMaker Book (ASCII) file
+#0     string          \<Book\040      FrameMaker Book (ASCII) file
 #!:mime        application/x-mif
 #>6    string          3.0              (3.0)
 #>6    string          2.0              (2.0)
 #>6    string          1.0              (1.0)
-0      string          \<Maker Intermediate Print File FrameMaker IPL file
+0      string          \<Maker\040Intermediate\040Print\040File        FrameMaker IPL file
 !:mime application/x-mif
index 1d38598..5c1705a 100644 (file)
@@ -1,6 +1,6 @@
 
 #------------------------------------------------------------------------------
-# $File: iff,v 1.12 2009/09/19 16:28:09 christos Exp $
+# $File: iff,v 1.13 2011/09/06 11:00:06 christos Exp $
 # iff: file(1) magic for Interchange File Format (see also "audio" & "images")
 #
 # Daniel Quinlan (quinlan@yggdrasil.com) -- IFF was designed by Electronic
@@ -62,6 +62,7 @@
 
 # These go at the end of the iff rules
 #
+# David Griffith <dave@661.org>
 # I don't see why these might collide with anything else.
 #
 # Interactive Fiction related formats
@@ -69,3 +70,4 @@
 >8     string          IFRS            \b, Blorb Interactive Fiction
 >>24   string          Exec            with executable chunk
 >8     string          IFZS            \b, Z-machine or Glulx saved game file (Quetzal)
+!:mime application/x-blorb
index 1aa666c..460c3ba 100644 (file)
@@ -1,6 +1,6 @@
 
 #------------------------------------------------------------------------------
-# $File: images,v 1.105 2015/02/14 17:30:03 christos Exp $
+# $File: images,v 1.106 2015/02/22 01:26:05 christos Exp $
 # images:  file(1) magic for image formats (see also "iff", and "c-lang" for
 # XPM bitmaps)
 #
@@ -37,7 +37,7 @@
 # The next byte following the magic is always whitespace.
 # strength is changed to try these patterns before "x86 boot sector"
 0      name            netpbm
->3     regex/s         =[0-9]{1,50}\ [0-9]{1,50}       Netpbm PPM image data
+>3     regex/s         =[0-9]{1,50}\ [0-9]{1,50}       Netpbm image data
 >>&0   regex           =[0-9]{1,50}                    \b, size = %s x
 >>>&0  regex           =[0-9]{1,50}                    \b %s
 
@@ -59,7 +59,6 @@
 !:strength + 45
 !:mime image/x-portable-pixmap
 
-
 0      string          P4              
 >0     use             netpbm
 >>0    string          x       \b, rawbits, bitmap
index a92e9eb..8961688 100644 (file)
@@ -1,9 +1,9 @@
 
 #------------------------------------------------------------------------------
-# $File: karma,v 1.6 2009/09/19 16:28:10 christos Exp $
+# $File: karma,v 1.7 2014/04/30 21:41:02 christos Exp $
 # karma:  file(1) magic for Karma data files
 #
 # From <rgooch@atnf.csiro.au>
 
-0      string          KarmaRHD Version        Karma Data Structure Version
+0      string  KarmaRHD\040Version     Karma Data Structure Version
 >16    belong          x               %u
index cb52551..e02a1ce 100644 (file)
@@ -1,6 +1,6 @@
 
 #------------------------------------------------------------------------------
-# $File: linux,v 1.61 2015/04/14 14:23:42 christos Exp $
+# $File: linux,v 1.62 2015/05/03 13:06:36 christos Exp $
 # linux:  file(1) magic for Linux files
 #
 # Values for Linux/i386 binaries, from Daniel Quinlan <quinlan@yggdrasil.com>
 0              lelong          0xde020109      locale archive
 >24            lelong          x               %d strings
 
+# Linux Software RAID (mdadm)
+# Russell Coker <russell@coker.com.au>
+0      name    linuxraid
+>16    belong  x               UUID=%8x:
+>20    belong  x               \b%8x:
+>24    belong  x               \b%8x:
+>28    belong  x               \b%8x
+>32    string  x               name=%s
+>72    lelong  x               level=%d
+>92    lelong  x               disks=%d
+
+4096   lelong  0xa92b4efc      Linux Software RAID
+>4100  lelong  x               version 1.2 (%d)
+>4096  use     linuxraid
+
+0      lelong  0xa92b4efc      Linux Software RAID
+>4     lelong  x               version 1.1 (%d)
+>0     use     linuxraid
+
 # Summary:     Database file for mlocate
 # Description: A database file as used by mlocate, a fast implementation
 #              of locate/updatedb. It uses merging to reuse the existing
index 4ee5c1e..5575686 100644 (file)
@@ -1,15 +1,21 @@
 #------------------------------------------------------------------------------
-# $File$
+# $File: make,v 1.1 2011/12/08 12:12:46 rrt Exp $
 # make:  file(1) magic for makefiles
 #
-0      regex   \^CFLAGS        makefile script text
+0      regex/100l      \^CFLAGS        makefile script text
 !:mime text/x-makefile
-0      regex   \^LDFLAGS       makefile script text
+0      regex/100l      \^VPATH         makefile script text
 !:mime text/x-makefile
-0      regex   \^all:  makefile script text
+0      regex/100l      \^LDFLAGS       makefile script text
 !:mime text/x-makefile
-0      regex   \^.PRECIOUS     makefile script text
+0      regex/100l      \^all:          makefile script text
+!:mime text/x-makefile
+0      regex/100l      \^\.PRECIOUS    makefile script text
+!:mime text/x-makefile
+0      regex/100l      \^\.BEGIN       BSD makefile script text
+!:mime text/x-makefile
+0      regex/100l      \^\.include     BSD makefile script text
 !:mime text/x-makefile
 
-0      regex   \^SUBDIRS       automake makefile script text
+0      regex/100l      \^SUBDIRS       automake makefile script text
 !:mime text/x-makefile
index 1c794bf..70d44f6 100644 (file)
@@ -1,7 +1,7 @@
 
 
 #------------------------------------------------------------------------------
-# $File: map,v 1.2 2015/07/09 15:13:51 christos Exp $
+# $File: map,v 1.3 2015/07/09 15:16:41 christos Exp $
 # map:  file(1) magic for Map data
 #
 
 >>53   byte    4               \b (Activity)
 >>53   byte    8               \b (Elevations)
 >>53   byte    10              \b (Totals)
+
+# TOM TOM GPS watches ttbin files:
+# http://github.com/ryanbinns/ttwatch/tree/master/ttbin
+# From: Daniel Lenski
+0      byte    0x20
+>1     leshort 0x0007
+>>0x76 byte    0x20
+>>>0x77        leshort 0x0075          TomTom activity file, v7
+>>>>8  leldate x               (%s,
+>>>>3  byte    x               device firmware %d.
+>>>>4  byte    x               \b%d.
+>>>>5  byte    x               \b%d,
+>>>>6  leshort x               product ID %04d)
+
index a510a69..ea8f838 100644 (file)
@@ -1,6 +1,6 @@
 
 #------------------------------------------------------------------------------
-# $File: msdos,v 1.99 2014/06/03 01:40:24 christos Exp $
+# $File: msdos,v 1.100 2014/06/03 19:17:27 christos Exp $
 # msdos:  file(1) magic for MS-DOS files
 #
 
 0      ulequad 0x3a000000024e4c        MS Advisor help file
 
 # HtmlHelp files (.chm)
-0      string/b        ITSF\003\000\000\000\x60\000\000\000\001\000\000\000    MS Windows HtmlHelp Data
+0      string/b        ITSF\003\000\000\000\x60\000\000\000    MS Windows HtmlHelp Data
 
 # GFA-BASIC (Wolfram Kleff)
 2      string/b        GFA-BASIC3      GFA-BASIC 3 data
index 33b691c..f00b71b 100644 (file)
@@ -1,6 +1,6 @@
 
 #------------------------------------------------------------------------------
-# $File$
+# $File: netscape,v 1.6 2009/09/19 16:28:11 christos Exp $
 # netscape:  file(1) magic for Netscape files
 # "H. Nanosecond" <aldomel@ix.netcom.com>
 # version 3 and 4 I think
@@ -22,4 +22,5 @@
 
 #
 #This is files ending in .art, FIXME add more rules
-0       string          JG\004\016\0\0\0\0      ART
+0      string  JG\004\016\0\0\0\0      AOL ART image
+0      string  JG\003\016\0\0\0\0      AOL ART image
index 639e06d..a3cfece 100644 (file)
@@ -1,6 +1,6 @@
 
 #------------------------------------------------------------------------------
-# $File: python,v 1.25 2014/05/06 16:08:32 christos Exp $
+# $File: python,v 1.26 2014/08/04 05:58:40 christos Exp $
 # python:  file(1) magic for python
 #
 # Outlook puts """ too for urgent messages
 0      belong          0xee0c0d0a      python 3.4 byte-compiled
 
 0      search/1/w      #!\ /usr/bin/python     Python script text executable
+!:strength + 10
 !:mime text/x-python
 0      search/1/w      #!\ /usr/local/bin/python       Python script text executable
+!:strength + 10
 !:mime text/x-python
 0      search/1        #!/usr/bin/env\ python  Python script text executable
+!:strength + 10
 !:mime text/x-python
-0      search/1        #!\ /usr/bin/env\ python        Python script text executable
+0      search/10       #!\ /usr/bin/env\ python        Python script text executable
+!:strength + 10
 !:mime text/x-python
 
 
index 5651f85..9b27883 100644 (file)
@@ -1,6 +1,6 @@
 
 #------------------------------------------------------------------------------
-# $File: scientific,v 1.8 2014/01/06 17:46:23 rrt Exp $
+# $File: scientific,v 1.9 2014/06/03 19:01:34 christos Exp $
 # scientific:  file(1) magic for scientific formats 
 #
 # From: Joe Krahn <krahn@niehs.nih.gov>
 >>5    byte    x               version %d.0
 >4     byte    >0x00           version %d
 >>5    byte    x               \b.%d
+
+# Type: LXT (interLaced eXtensible Trace)
+# chrysn <chrysn@fsfe.org>
+0      beshort 0x0138  interLaced eXtensible Trace (LXT) file
+>2     beshort >0      (Version %u)
index 0747f21..bcb9a0a 100644 (file)
@@ -1,6 +1,6 @@
 
 #------------------------------------------------------------------------------
-# $File: sgi,v 1.20 2014/03/10 00:53:38 christos Exp $
+# $File: sgi,v 1.21 2014/04/30 21:41:02 christos Exp $
 # sgi:  file(1) magic for Silicon Graphics operating systems and applications
 #
 # Executable images are handled either in aout (for old-style a.out
@@ -55,8 +55,8 @@
 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
+0      string  #Inventor\040V  IRIS Inventor 1.0 file
+0      string  #Inventor\040V2 Open Inventor 2.0 file
 # GLF is OpenGL stream encoding
 0      string  glfHeadMagic();         GLF_TEXT
 4      belong  0x7d000000              GLF_BINARY_LSB_FIRST
index 1d2d881..ce35efa 100644 (file)
@@ -1,5 +1,4 @@
-#------------------------------------------------------------------------------
-# $File: sgml,v 1.30 2013/12/21 14:27:24 christos Exp $
+#------------------------------------------------------------------------------ # $File: sgml,v 1.31 2015/03/11 19:38:04 christos Exp $
 # Type:        SVG Vectorial Graphics
 # From:        Noel Torres <tecnico@ejerciciosresueltos.com>
 0      string          \<?xml\ version="
 
 # xhtml
 0      string/t                \<?xml\ version="
->15    string          >\0
->>19   search/4096/cWbt        \<!doctype\ html        XHTML document text
+>19    search/4096/cWbt        \<!doctype\ html        XHTML document text
+>>15   string          >\0     (version %.3s)
 !:mime text/html
 0      string/t                \<?xml\ version='
->15    string          >\0
->>19   search/4096/cWbt        \<!doctype\ html        XHTML document text
+>19    search/4096/cWbt        \<!doctype\ html        XHTML document text
+>>15   string          >\0     (version %.3s)
 !:mime text/html
 0      string/t                \<?xml\ version="
->15    string          >\0
->>19   search/4096/cWbt        \<html  broken XHTML document text
+>19    search/4096/cWbt        \<html  broken XHTML document text
+>>15   string          >\0     (version %.3s)
 !:mime text/html
 
 #------------------------------------------------------------------------------
 >15    string/t        >\0                     %.3s document text
 >>23   search/1        \<xsl:stylesheet        (XSL stylesheet)
 >>24   search/1        \<xsl:stylesheet        (XSL stylesheet)
-0      search/1/wbt    \<?xml                  XML document text
-!:mime application/xml
-!:strength - 10
 0      search/1/wt     \<?XML                  broken XML document text
 !:mime application/xml
 !:strength - 10
index e60f69c..64c1b28 100644 (file)
@@ -1,6 +1,6 @@
 
 #------------------------------------------------------------------------------
-# $File: windows,v 1.9 2014/09/23 23:42:44 christos Exp $
+# $File: windows,v 1.11 2015/07/27 15:24:00 christos Exp $
 # windows:  file(1) magic for Microsoft Windows
 #
 # This file is mainly reserved for files where programs
@@ -89,7 +89,7 @@
 >20    lelong&16       16      \b, Has Working directory
 >20    lelong&32       32      \b, Has command line arguments
 >20    lelong&64       64      \b, Icon
->>56   lelong                  \b number=%d
+>>56   lelong          x       \b number=%d
 >24    lelong&1        1       \b, Read-Only
 >24    lelong&2        2       \b, Hidden
 >24    lelong&4        4       \b, System
 # http://read.pudn.com/downloads3/sourcecode/windows/248345/win2k/private/windows/setup/setupapi/inf.h__.htm
 # GRR: line below too general as it catches also PDP-11 UNIX/RT ldp
 0              leshort&0xFeFe  0x0000          
+!:strength -5
 # test for unused null bits in PNF_FLAGs
 >4     ulelong&0xFCffFe00      0x00000000      
 # only found 58h for Offset of WinDirPath immediately after _PNF_HEADER structure
index 4b44515..8b72f1e 100644 (file)
@@ -32,7 +32,7 @@
 #include "file.h"
 
 #ifndef        lint
-FILE_RCSID("@(#)$File: apprentice.c,v 1.232 2015/04/09 20:01:40 christos Exp $")
+FILE_RCSID("@(#)$File: apprentice.c,v 1.237 2015/09/11 17:24:09 christos Exp $")
 #endif /* lint */
 
 #include "magic.h"
@@ -531,6 +531,7 @@ file_ms_alloc(int flags)
        ms->elf_shnum_max = FILE_ELF_SHNUM_MAX;
        ms->elf_phnum_max = FILE_ELF_PHNUM_MAX;
        ms->elf_notes_max = FILE_ELF_NOTES_MAX;
+       ms->regex_max = FILE_REGEX_MAX;
        return ms;
 free:
        free(ms);
@@ -540,6 +541,7 @@ free:
 private void
 apprentice_unmap(struct magic_map *map)
 {
+       size_t i;
        if (map == NULL)
                return;
 
@@ -552,6 +554,8 @@ apprentice_unmap(struct magic_map *map)
 #endif
        case MAP_TYPE_MALLOC:
                free(map->p);
+               for (i = 0; i < MAGIC_SETS; i++)
+                       free(map->magic[i]);
                break;
        case MAP_TYPE_USER:
                break;
@@ -1288,6 +1292,7 @@ apprentice_load(struct magic_set *ms, const char *fn, int action)
                file_oomem(ms, sizeof(*map));
                return NULL;
        }
+       map->type = MAP_TYPE_MALLOC;
 
        /* print silly verbose header for USG compat. */
        if (action == FILE_CHECK)
@@ -1348,8 +1353,9 @@ apprentice_load(struct magic_set *ms, const char *fn, int action)
                        }
                        i = set_text_binary(ms, mset[j].me, mset[j].count, i);
                }
-               qsort(mset[j].me, mset[j].count, sizeof(*mset[j].me),
-                   apprentice_sort);
+               if (mset[j].me)
+                       qsort(mset[j].me, mset[j].count, sizeof(*mset[j].me),
+                           apprentice_sort);
 
                /*
                 * Make sure that any level 0 "default" line is last
@@ -2555,12 +2561,14 @@ getvalue(struct magic_set *ms, struct magic *m, const char **p, int action)
        case FILE_LEFLOAT:
                if (m->reln != 'x') {
                        char *ep;
+                       errno = 0;
 #ifdef HAVE_STRTOF
                        m->value.f = strtof(*p, &ep);
 #else
                        m->value.f = (float)strtod(*p, &ep);
 #endif
-                       *p = ep;
+                       if (errno == 0)
+                               *p = ep;
                }
                return 0;
        case FILE_DOUBLE:
@@ -2568,17 +2576,22 @@ getvalue(struct magic_set *ms, struct magic *m, const char **p, int action)
        case FILE_LEDOUBLE:
                if (m->reln != 'x') {
                        char *ep;
+                       errno = 0;
                        m->value.d = strtod(*p, &ep);
-                       *p = ep;
+                       if (errno == 0)
+                               *p = ep;
                }
                return 0;
        default:
                if (m->reln != 'x') {
                        char *ep;
+                       errno = 0;
                        m->value.q = file_signextend(ms, m,
                            (uint64_t)strtoull(*p, &ep, 0));
-                       *p = ep;
-                       eatsize(p);
+                       if (errno == 0) {
+                               *p = ep;
+                               eatsize(p);
+                       }
                }
                return 0;
        }
@@ -2614,6 +2627,7 @@ getstr(struct magic_set *ms, struct magic *m, const char *s, int warn)
                        case '\0':
                                if (warn)
                                        file_magwarn(ms, "incomplete escape");
+                               s--;
                                goto out;
 
                        case '\t':
@@ -2737,6 +2751,7 @@ getstr(struct magic_set *ms, struct magic *m, const char *s, int warn)
                } else
                        *p++ = (char)c;
        }
+       --s;
 out:
        *p = '\0';
        m->vallen = CAST(unsigned char, (p - origp));
@@ -3209,9 +3224,10 @@ file_pstring_length_size(const struct magic *m)
        }
 }
 protected size_t
-file_pstring_get_length(const struct magic *m, const char *s)
+file_pstring_get_length(const struct magic *m, const char *ss)
 {
        size_t len = 0;
+       const unsigned char *s = (const unsigned char *)ss;
 
        switch (m->str_flags & PSTRING_LEN) {
        case PSTRING_1_LE:
index c700f66..2dd5e53 100644 (file)
@@ -32,7 +32,7 @@
 #include "file.h"
 
 #ifndef        lint
-FILE_RCSID("@(#)$File: file.c,v 1.164 2015/06/03 18:21:24 christos Exp $")
+FILE_RCSID("@(#)$File: file.c,v 1.166 2015/09/08 13:46:49 christos Exp $")
 #endif /* lint */
 
 #include "magic.h"
@@ -131,6 +131,7 @@ private struct {
        { "elf_phnum",  MAGIC_PARAM_ELF_PHNUM_MAX, 0 },
        { "elf_shnum",  MAGIC_PARAM_ELF_SHNUM_MAX, 0 },
        { "elf_notes",  MAGIC_PARAM_ELF_NOTES_MAX, 0 },
+       { "regex",      MAGIC_PARAM_REGEX_MAX, 0 },
 };
 
 private char *progname;                /* used throughout              */
@@ -237,6 +238,7 @@ main(int argc, char *argv[])
                        if (magic == NULL)
                                if ((magic = load(magicfile, flags)) == NULL)
                                        return 1;
+                       applyparam(magic);
                        e |= unwrap(magic, optarg);
                        ++didsomefiles;
                        break;
index 03999f5..842a09e 100644 (file)
@@ -27,7 +27,7 @@
  */
 /*
  * file.h - definitions for file(1) program
- * @(#)$File: file.h,v 1.167 2015/02/14 17:19:29 christos Exp $
+ * @(#)$File: file.h,v 1.171 2015/08/30 14:16:33 christos Exp $
  */
 
 #ifndef __file_h__
     #define SIZE_T_FORMAT ""
   #endif
   #define INT64_T_FORMAT "I64"
+  #define INTMAX_T_FORMAT "I64"
 #else
   #define SIZE_T_FORMAT "z"
   #define INT64_T_FORMAT "ll"
+  #define INTMAX_T_FORMAT "j"
 #endif
 
 #include <stdio.h>     /* Include that here, to make sure __P gets defined */
@@ -300,15 +302,15 @@ struct magic {
 #define num_mask _u._mask
 #define str_range _u._s._count
 #define str_flags _u._s._flags
-       /* Words 9-16 */
+       /* Words 9-24 */
        union VALUETYPE value;  /* either number or string */
-       /* Words 17-32 */
+       /* Words 25-40 */
        char desc[MAXDESC];     /* description */
-       /* Words 33-52 */
+       /* Words 41-60 */
        char mimetype[MAXMIME]; /* MIME type */
-       /* Words 53-54 */
+       /* Words 61-62 */
        char apple[8];          /* APPLE CREATOR/TYPE */
-       /* Words 55-63 */
+       /* Words 63-78 */
        char ext[64];           /* Popular extensions */
 };
 
@@ -413,11 +415,13 @@ struct magic_set {
        uint16_t elf_shnum_max;
        uint16_t elf_phnum_max;
        uint16_t elf_notes_max;
+       uint16_t regex_max;
 #define        FILE_INDIR_MAX                  15
 #define        FILE_NAME_MAX                   30
 #define        FILE_ELF_SHNUM_MAX              32768
-#define        FILE_ELF_PHNUM_MAX              128
+#define        FILE_ELF_PHNUM_MAX              2048
 #define        FILE_ELF_NOTES_MAX              256
+#define        FILE_REGEX_MAX                  8192
 };
 
 /* Type for Unicode characters */
index 2e30d06..3d9a7ce 100644 (file)
@@ -45,7 +45,7 @@ OPT('0', "print0", 0, "               terminate filenames with ASCII NUL\n")
 #if defined(HAVE_UTIME) || defined(HAVE_UTIMES)
 OPT('p', "preserve-date", 0, "        preserve access times on files\n")
 #endif
-OPT('P', "parameter", 0, "            set file engine parameter limits\n"
+OPT('P', "parameter", 1, "            set file engine parameter limits\n"
     "                               indir        15 recursion limit for indirection\n"
     "                               name         30 use limit for name/use magic\n"
     "                               elf_notes   256 max ELF notes processed\n"
index febd3bc..c9bc671 100644 (file)
@@ -27,7 +27,7 @@
 #include "file.h"
 
 #ifndef        lint
-FILE_RCSID("@(#)$File: funcs.c,v 1.82 2015/06/03 18:01:20 christos Exp $")
+FILE_RCSID("@(#)$File: funcs.c,v 1.83 2015/06/16 14:17:37 christos Exp $")
 #endif /* lint */
 
 #include "magic.h"
@@ -204,7 +204,10 @@ file_buffer(struct magic_set *ms, int fd, const char *inname __attribute__ ((__u
 
 #ifdef __EMX__
        if ((ms->flags & MAGIC_NO_CHECK_APPTYPE) == 0 && inname) {
-               switch (file_os2_apptype(ms, inname, buf, nb)) {
+               m = file_os2_apptype(ms, inname, buf, nb);
+               if ((ms->flags & MAGIC_DEBUG) != 0)
+                       (void)fprintf(stderr, "[try os2_apptype %d]\n", m);
+               switch (m) {
                case -1:
                        return -1;
                case 0:
@@ -216,37 +219,43 @@ file_buffer(struct magic_set *ms, int fd, const char *inname __attribute__ ((__u
 #endif
 #if HAVE_FORK
        /* try compression stuff */
-       if ((ms->flags & MAGIC_NO_CHECK_COMPRESS) == 0)
-               if ((m = file_zmagic(ms, fd, inname, ubuf, nb)) != 0) {
-                       if ((ms->flags & MAGIC_DEBUG) != 0)
-                               (void)fprintf(stderr, "zmagic %d\n", m);
+       if ((ms->flags & MAGIC_NO_CHECK_COMPRESS) == 0) {
+               m = file_zmagic(ms, fd, inname, ubuf, nb);
+               if ((ms->flags & MAGIC_DEBUG) != 0)
+                       (void)fprintf(stderr, "[try zmagic %d]\n", m);
+               if (m) {
                        goto done_encoding;
                }
+       }
 #endif
        /* Check if we have a tar file */
-       if ((ms->flags & MAGIC_NO_CHECK_TAR) == 0)
-               if ((m = file_is_tar(ms, ubuf, nb)) != 0) {
-                       if ((ms->flags & MAGIC_DEBUG) != 0)
-                               (void)fprintf(stderr, "tar %d\n", m);
+       if ((ms->flags & MAGIC_NO_CHECK_TAR) == 0) {
+               m = file_is_tar(ms, ubuf, nb);
+               if ((ms->flags & MAGIC_DEBUG) != 0)
+                       (void)fprintf(stderr, "[try tar %d]\n", m);
+               if (m) {
                        if (checkdone(ms, &rv))
                                goto done;
                }
+       }
 
        /* Check if we have a CDF file */
-       if ((ms->flags & MAGIC_NO_CHECK_CDF) == 0)
-               if ((m = file_trycdf(ms, fd, ubuf, nb)) != 0) {
-                       if ((ms->flags & MAGIC_DEBUG) != 0)
-                               (void)fprintf(stderr, "cdf %d\n", m);
+       if ((ms->flags & MAGIC_NO_CHECK_CDF) == 0) {
+               m = file_trycdf(ms, fd, ubuf, nb);
+               if ((ms->flags & MAGIC_DEBUG) != 0)
+                       (void)fprintf(stderr, "[try cdf %d]\n", m);
+               if (m) {
                        if (checkdone(ms, &rv))
                                goto done;
                }
+       }
 
        /* try soft magic tests */
        if ((ms->flags & MAGIC_NO_CHECK_SOFT) == 0)
-               if ((m = file_softmagic(ms, ubuf, nb, 0, NULL, BINTEST,
-                   looks_text)) != 0) {
-                       if ((ms->flags & MAGIC_DEBUG) != 0)
-                               (void)fprintf(stderr, "softmagic %d\n", m);
+               m = file_softmagic(ms, ubuf, nb, 0, NULL, BINTEST, looks_text);
+               if ((ms->flags & MAGIC_DEBUG) != 0)
+                       (void)fprintf(stderr, "[try softmagic %d]\n", m);
+               if (m) {
 #ifdef BUILTIN_ELF
                        if ((ms->flags & MAGIC_NO_CHECK_ELF) == 0 && m == 1 &&
                            nb > 5 && fd != -1) {
@@ -259,10 +268,10 @@ file_buffer(struct magic_set *ms, int fd, const char *inname __attribute__ ((__u
                                 * ELF headers that cannot easily * be
                                 * extracted with rules in the magic file.
                                 */
-                               if ((m = file_tryelf(ms, fd, ubuf, nb)) != 0)
-                                       if ((ms->flags & MAGIC_DEBUG) != 0)
-                                               (void)fprintf(stderr,
-                                                   "elf %d\n", m);
+                               m = file_tryelf(ms, fd, ubuf, nb);
+                               if ((ms->flags & MAGIC_DEBUG) != 0)
+                                       (void)fprintf(stderr, "[try elf %d]\n",
+                                           m);
                        }
 #endif
                        if (checkdone(ms, &rv))
@@ -272,9 +281,10 @@ file_buffer(struct magic_set *ms, int fd, const char *inname __attribute__ ((__u
        /* try text properties */
        if ((ms->flags & MAGIC_NO_CHECK_TEXT) == 0) {
 
-               if ((m = file_ascmagic(ms, ubuf, nb, looks_text)) != 0) {
-                       if ((ms->flags & MAGIC_DEBUG) != 0)
-                               (void)fprintf(stderr, "ascmagic %d\n", m);
+               m = file_ascmagic(ms, ubuf, nb, looks_text);
+               if ((ms->flags & MAGIC_DEBUG) != 0)
+                       (void)fprintf(stderr, "[try ascmagic %d]\n", m);
+               if (m) {
                        if (checkdone(ms, &rv))
                                goto done;
                }
index 2f4d022..7e27ed6 100644 (file)
@@ -1,15 +1,15 @@
-/*     $File: asctime_r.c,v 1.1 2012/05/15 17:14:36 christos Exp $     */
+/*     $File: gmtime_r.c,v 1.1 2015/01/09 19:28:32 christos Exp $      */
 
 #include "file.h"
 #ifndef        lint
-FILE_RCSID("@(#)$File: asctime_r.c,v 1.1 2012/05/15 17:14:36 christos Exp $")
+FILE_RCSID("@(#)$File: gmtime_r.c,v 1.1 2015/01/09 19:28:32 christos Exp $")
 #endif /* lint */
 #include <time.h>
 #include <string.h>
 
 /* asctime_r is not thread-safe anyway */
 struct tm *
-gmtime_r(const time_t t, struct tm *tm)
+gmtime_r(const time_t *t, struct tm *tm)
 {
        struct tm *tmp = gmtime(t);
        if (tmp == NULL)
index a8eaaba..35c3b40 100644 (file)
@@ -1,15 +1,15 @@
-/*     $File: asctime_r.c,v 1.1 2012/05/15 17:14:36 christos Exp $     */
+/*     $File: localtime_r.c,v 1.1 2015/01/09 19:28:32 christos Exp $   */
 
 #include "file.h"
 #ifndef        lint
-FILE_RCSID("@(#)$File: asctime_r.c,v 1.1 2012/05/15 17:14:36 christos Exp $")
+FILE_RCSID("@(#)$File: localtime_r.c,v 1.1 2015/01/09 19:28:32 christos Exp $")
 #endif /* lint */
 #include <time.h>
 #include <string.h>
 
 /* asctime_r is not thread-safe anyway */
 struct tm *
-localtime_r(const time_t t, struct tm *tm)
+localtime_r(const time_t *t, struct tm *tm)
 {
        struct tm *tmp = localtime(t);
        if (tmp == NULL)
index c779f5c..30faa8a 100644 (file)
@@ -33,7 +33,7 @@
 #include "file.h"
 
 #ifndef        lint
-FILE_RCSID("@(#)$File: magic.c,v 1.92 2015/01/02 21:29:39 christos Exp $")
+FILE_RCSID("@(#)$File: magic.c,v 1.94 2015/07/11 14:41:37 christos Exp $")
 #endif /* lint */
 
 #include "magic.h"
@@ -137,6 +137,14 @@ _w32_get_magic_relative_to(char **hmagicpath, HINSTANCE module)
 
        PathRemoveFileSpecA(dllpath);
 
+       if (module) {
+               char exepath[MAX_PATH];
+               GetModuleFileNameA(NULL, exepath, MAX_PATH);
+               PathRemoveFileSpecA(exepath);
+               if (stricmp(exepath, dllpath) == 0)
+                       goto out;
+       }
+
        sp = strlen(dllpath);
        if (sp > 3 && stricmp(&dllpath[sp - 3], "bin") == 0) {
                _w32_append_path(hmagicpath,
@@ -595,6 +603,9 @@ magic_setparam(struct magic_set *ms, int param, const void *val)
        case MAGIC_PARAM_ELF_NOTES_MAX:
                ms->elf_notes_max = (uint16_t)*(const size_t *)val;
                return 0;
+       case MAGIC_PARAM_REGEX_MAX:
+               ms->elf_notes_max = (uint16_t)*(const size_t *)val;
+               return 0;
        default:
                errno = EINVAL;
                return -1;
@@ -620,6 +631,9 @@ magic_getparam(struct magic_set *ms, int param, void *val)
        case MAGIC_PARAM_ELF_NOTES_MAX:
                *(size_t *)val = ms->elf_notes_max;
                return 0;
+       case MAGIC_PARAM_REGEX_MAX:
+               *(size_t *)val = ms->regex_max;
+               return 0;
        default:
                errno = EINVAL;
                return -1;
index 500bdbd..1e567cd 100644 (file)
@@ -113,6 +113,7 @@ int magic_errno(magic_t);
 #define MAGIC_PARAM_ELF_PHNUM_MAX      2
 #define MAGIC_PARAM_ELF_SHNUM_MAX      3
 #define MAGIC_PARAM_ELF_NOTES_MAX      4
+#define MAGIC_PARAM_REGEX_MAX          5
 
 int magic_setparam(magic_t, int, const void *);
 int magic_getparam(magic_t, int, void *);
index 25d893a..fb50789 100644 (file)
@@ -32,7 +32,7 @@
 #include "file.h"
 
 #ifndef lint
-FILE_RCSID("@(#)$File: print.c,v 1.78 2015/01/06 02:04:10 christos Exp $")
+FILE_RCSID("@(#)$File: print.c,v 1.79 2015/01/09 19:28:32 christos Exp $")
 #endif  /* lint */
 
 #include <string.h>
@@ -156,26 +156,26 @@ file_mdump(struct magic *m)
                case FILE_BEDATE:
                case FILE_MEDATE:
                        (void)fprintf(stderr, "%s,",
-                           file_fmttime(m->value.l, FILE_T_LOCAL, tbuf));
+                           file_fmttime(m->value.l, 0, tbuf));
                        break;
                case FILE_LDATE:
                case FILE_LELDATE:
                case FILE_BELDATE:
                case FILE_MELDATE:
                        (void)fprintf(stderr, "%s,",
-                           file_fmttime(m->value.l, 0, tbuf));
+                           file_fmttime(m->value.l, FILE_T_LOCAL, tbuf));
                        break;
                case FILE_QDATE:
                case FILE_LEQDATE:
                case FILE_BEQDATE:
                        (void)fprintf(stderr, "%s,",
-                           file_fmttime(m->value.q, FILE_T_LOCAL, tbuf));
+                           file_fmttime(m->value.q, 0, tbuf));
                        break;
                case FILE_QLDATE:
                case FILE_LEQLDATE:
                case FILE_BEQLDATE:
                        (void)fprintf(stderr, "%s,",
-                           file_fmttime(m->value.q, 0, tbuf));
+                           file_fmttime(m->value.q, FILE_T_LOCAL, tbuf));
                        break;
                case FILE_QWDATE:
                case FILE_LEQWDATE:
index 4062ed6..4f09814 100644 (file)
@@ -27,7 +27,7 @@
 #include "file.h"
 
 #ifndef lint
-FILE_RCSID("@(#)$File: readelf.c,v 1.119 2015/04/09 20:01:41 christos Exp $")
+FILE_RCSID("@(#)$File: readelf.c,v 1.121 2015/07/11 14:41:37 christos Exp $")
 #endif
 
 #ifdef BUILTIN_ELF
@@ -1052,11 +1052,14 @@ doshn(struct magic_set *ms, int clazz, int swap, int fd, off_t off, int num,
                /* Things we can determine when we seek */
                switch (xsh_type) {
                case SHT_NOTE:
-                       if (xsh_size + xsh_offset > (uintmax_t)fsize)  {
+                       if ((uintmax_t)(xsh_size + xsh_offset) >
+                           (uintmax_t)fsize) {
                                if (file_printf(ms,
-                                   ", note offset/size 0x%jx+0x%jx exceeds"
-                                   " file size 0x%jx", (uintmax_t)xsh_offset,
-                                   (uintmax_t)xsh_size, (uintmax_t)fsize) == -1)
+                                   ", note offset/size 0x%" INTMAX_T_FORMAT
+                                   "x+0x%" INTMAX_T_FORMAT "x exceeds"
+                                   " file size 0x%" INTMAX_T_FORMAT "x",
+                                   (uintmax_t)xsh_offset, (uintmax_t)xsh_size,
+                                   (uintmax_t)fsize) == -1)
                                        return -1;
                                return 0; 
                        }
@@ -1065,7 +1068,8 @@ doshn(struct magic_set *ms, int clazz, int swap, int fd, off_t off, int num,
                                    " for note");
                                return -1;
                        }
-                       if (pread(fd, nbuf, xsh_size, xsh_offset) < (ssize_t)xsh_size) {
+                       if (pread(fd, nbuf, xsh_size, xsh_offset) <
+                           (ssize_t)xsh_size) {
                                file_badread(ms);
                                free(nbuf);
                                return -1;
index f38d6fc..750beec 100644 (file)
@@ -32,7 +32,7 @@
 #include "file.h"
 
 #ifndef        lint
-FILE_RCSID("@(#)$File: softmagic.c,v 1.215 2015/05/21 18:25:29 christos Exp $")
+FILE_RCSID("@(#)$File: softmagic.c,v 1.217 2015/07/27 09:08:10 christos Exp $")
 #endif /* lint */
 
 #include "magic.h"
@@ -63,6 +63,22 @@ private void cvt_32(union VALUETYPE *, const struct magic *);
 private void cvt_64(union VALUETYPE *, const struct magic *);
 
 #define OFFSET_OOB(n, o, i)    ((n) < (o) || (i) > ((n) - (o)))
+#define BE64(p) (((uint64_t)(p)->hq[0]<<56)|((uint64_t)(p)->hq[1]<<48)| \
+    ((uint64_t)(p)->hq[2]<<40)|((uint64_t)(p)->hq[3]<<32)| \
+    ((uint64_t)(p)->hq[4]<<24)|((uint64_t)(p)->hq[5]<<16)| \
+    ((uint64_t)(p)->hq[6]<<8)|((uint64_t)(p)->hq[7]))
+#define LE64(p) (((uint64_t)(p)->hq[7]<<56)|((uint64_t)(p)->hq[6]<<48)| \
+    ((uint64_t)(p)->hq[5]<<40)|((uint64_t)(p)->hq[4]<<32)| \
+    ((uint64_t)(p)->hq[3]<<24)|((uint64_t)(p)->hq[2]<<16)| \
+    ((uint64_t)(p)->hq[1]<<8)|((uint64_t)(p)->hq[0]))
+#define LE32(p) (((uint32_t)(p)->hl[3]<<24)|((uint32_t)(p)->hl[2]<<16)| \
+     ((uint32_t)(p)->hl[1]<<8)|((uint32_t)(p)->hl[0]))
+#define BE32(p) (((uint32_t)(p)->hl[0]<<24)|((uint32_t)(p)->hl[1]<<16)| \
+     ((uint32_t)(p)->hl[2]<<8)|((uint32_t)(p)->hl[3]))
+#define ME32(p) (((uint32_t)(p)->hl[1]<<24)|((uint32_t)(p)->hl[0]<<16)| \
+     ((uint32_t)(p)->hl[3]<<8)|((uint32_t)(p)->hl[2]))
+#define BE16(p) (((uint16_t)(p)->hs[0]<<8)|((uint16_t)(p)->hs[1]))
+#define LE16(p) (((uint16_t)(p)->hs[1]<<8)|((uint16_t)(p)->hs[0]))
 
 /*
  * softmagic - lookup one file in parsed, in-memory copy of database
@@ -962,84 +978,65 @@ mconvert(struct magic_set *ms, struct magic *m, int flip)
                return 1;
        }
        case FILE_BESHORT:
-               p->h = (short)((p->hs[0]<<8)|(p->hs[1]));
+               p->h = (short)BE16(p);
                cvt_16(p, m);
                return 1;
        case FILE_BELONG:
        case FILE_BEDATE:
        case FILE_BELDATE:
-               p->l = (int32_t)
-                   ((p->hl[0]<<24)|(p->hl[1]<<16)|(p->hl[2]<<8)|(p->hl[3]));
+               p->l = (int32_t)BE32(p);
                cvt_32(p, m);
                return 1;
        case FILE_BEQUAD:
        case FILE_BEQDATE:
        case FILE_BEQLDATE:
        case FILE_BEQWDATE:
-               p->q = (uint64_t)
-                   (((uint64_t)p->hq[0]<<56)|((uint64_t)p->hq[1]<<48)|
-                    ((uint64_t)p->hq[2]<<40)|((uint64_t)p->hq[3]<<32)|
-                    ((uint64_t)p->hq[4]<<24)|((uint64_t)p->hq[5]<<16)|
-                    ((uint64_t)p->hq[6]<<8)|((uint64_t)p->hq[7]));
+               p->q = (uint64_t)BE64(p);
                cvt_64(p, m);
                return 1;
        case FILE_LESHORT:
-               p->h = (short)((p->hs[1]<<8)|(p->hs[0]));
+               p->h = (short)LE16(p);
                cvt_16(p, m);
                return 1;
        case FILE_LELONG:
        case FILE_LEDATE:
        case FILE_LELDATE:
-               p->l = (int32_t)
-                   ((p->hl[3]<<24)|(p->hl[2]<<16)|(p->hl[1]<<8)|(p->hl[0]));
+               p->l = (int32_t)LE32(p);
                cvt_32(p, m);
                return 1;
        case FILE_LEQUAD:
        case FILE_LEQDATE:
        case FILE_LEQLDATE:
        case FILE_LEQWDATE:
-               p->q = (uint64_t)
-                   (((uint64_t)p->hq[7]<<56)|((uint64_t)p->hq[6]<<48)|
-                    ((uint64_t)p->hq[5]<<40)|((uint64_t)p->hq[4]<<32)|
-                    ((uint64_t)p->hq[3]<<24)|((uint64_t)p->hq[2]<<16)|
-                    ((uint64_t)p->hq[1]<<8)|((uint64_t)p->hq[0]));
+               p->q = (uint64_t)LE64(p);
                cvt_64(p, m);
                return 1;
        case FILE_MELONG:
        case FILE_MEDATE:
        case FILE_MELDATE:
-               p->l = (int32_t)
-                   ((p->hl[1]<<24)|(p->hl[0]<<16)|(p->hl[3]<<8)|(p->hl[2]));
+               p->l = (int32_t)ME32(p);
                cvt_32(p, m);
                return 1;
        case FILE_FLOAT:
                cvt_float(p, m);
                return 1;
        case FILE_BEFLOAT:
-               p->l =  ((uint32_t)p->hl[0]<<24)|((uint32_t)p->hl[1]<<16)|
-                       ((uint32_t)p->hl[2]<<8) |((uint32_t)p->hl[3]);
+               p->l = BE32(p);
                cvt_float(p, m);
                return 1;
        case FILE_LEFLOAT:
-               p->l =  ((uint32_t)p->hl[3]<<24)|((uint32_t)p->hl[2]<<16)|
-                       ((uint32_t)p->hl[1]<<8) |((uint32_t)p->hl[0]);
+               p->l = LE32(p);
                cvt_float(p, m);
                return 1;
        case FILE_DOUBLE:
                cvt_double(p, m);
                return 1;
        case FILE_BEDOUBLE:
-               p->q =  ((uint64_t)p->hq[0]<<56)|((uint64_t)p->hq[1]<<48)|
-                       ((uint64_t)p->hq[2]<<40)|((uint64_t)p->hq[3]<<32)|
-                       ((uint64_t)p->hq[4]<<24)|((uint64_t)p->hq[5]<<16)|
-                       ((uint64_t)p->hq[6]<<8) |((uint64_t)p->hq[7]);
+               p->q = BE64(p); 
                cvt_double(p, m);
                return 1;
        case FILE_LEDOUBLE:
-               p->q =  ((uint64_t)p->hq[7]<<56)|((uint64_t)p->hq[6]<<48)|
-                       ((uint64_t)p->hq[5]<<40)|((uint64_t)p->hq[4]<<32)|
-                       ((uint64_t)p->hq[3]<<24)|((uint64_t)p->hq[2]<<16)|
-                       ((uint64_t)p->hq[1]<<8) |((uint64_t)p->hq[0]);
+               p->q = LE64(p);
                cvt_double(p, m);
                return 1;
        case FILE_REGEX:
@@ -1105,6 +1102,8 @@ mcopy(struct magic_set *ms, union VALUETYPE *p, int type, int indir,
 
                        if (bytecnt == 0 || bytecnt > nbytes - offset)
                                bytecnt = nbytes - offset;
+                       if (bytecnt > ms->regex_max)
+                               bytecnt = ms->regex_max;
 
                        buf = RCAST(const char *, s) + offset;
                        end = last = RCAST(const char *, s) + bytecnt + offset;
@@ -1239,27 +1238,24 @@ mget(struct magic_set *ms, const unsigned char *s, struct magic *m,
                                off = q->h;
                                break;
                        case FILE_BESHORT:
-                               off = (short)((q->hs[0]<<8)|(q->hs[1]));
+                               off = (short)BE16(q);
                                break;
                        case FILE_LESHORT:
-                               off = (short)((q->hs[1]<<8)|(q->hs[0]));
+                               off = (short)LE16(q);
                                break;
                        case FILE_LONG:
                                off = q->l;
                                break;
                        case FILE_BELONG:
                        case FILE_BEID3:
-                               off = (int32_t)((q->hl[0]<<24)|(q->hl[1]<<16)|
-                                                (q->hl[2]<<8)|(q->hl[3]));
+                               off = (int32_t)BE32(q);
                                break;
                        case FILE_LEID3:
                        case FILE_LELONG:
-                               off = (int32_t)((q->hl[3]<<24)|(q->hl[2]<<16)|
-                                                (q->hl[1]<<8)|(q->hl[0]));
+                               off = (int32_t)LE32(q);
                                break;
                        case FILE_MELONG:
-                               off = (int32_t)((q->hl[1]<<24)|(q->hl[0]<<16)|
-                                                (q->hl[3]<<8)|(q->hl[2]));
+                               off = (int32_t)ME32(q);
                                break;
                        }
                        if ((ms->flags & MAGIC_DEBUG) != 0)
@@ -1413,8 +1409,7 @@ mget(struct magic_set *ms, const unsigned char *s, struct magic *m,
                case FILE_BEID3:
                        if (OFFSET_OOB(nbytes, offset, 4))
                                return 0;
-                       lhs = (p->hl[0] << 24) | (p->hl[1] << 16) |
-                           (p->hl[2] << 8) | p->hl[3];
+                       lhs = BE32(p);
                        if (off) {
                                switch (m->in_op & FILE_OPS_MASK) {
                                case FILE_OPAND:
@@ -1451,8 +1446,7 @@ mget(struct magic_set *ms, const unsigned char *s, struct magic *m,
                case FILE_LEID3:
                        if (OFFSET_OOB(nbytes, offset, 4))
                                return 0;
-                       lhs = (p->hl[3] << 24) | (p->hl[2] << 16) |
-                           (p->hl[1] << 8) | p->hl[0];
+                       lhs = LE32(p);
                        if (off) {
                                switch (m->in_op & FILE_OPS_MASK) {
                                case FILE_OPAND:
@@ -1488,8 +1482,7 @@ mget(struct magic_set *ms, const unsigned char *s, struct magic *m,
                case FILE_MELONG:
                        if (OFFSET_OOB(nbytes, offset, 4))
                                return 0;
-                       lhs = (p->hl[1] << 24) | (p->hl[0] << 16) |
-                           (p->hl[3] << 8) | p->hl[2];
+                       lhs = ME32(p);
                        if (off) {
                                switch (m->in_op & FILE_OPS_MASK) {
                                case FILE_OPAND:
@@ -1565,9 +1558,9 @@ mget(struct magic_set *ms, const unsigned char *s, struct magic *m,
                case FILE_LEID3:
                case FILE_BEID3:
                        offset = ((((offset >>  0) & 0x7f) <<  0) |
-                                (((offset >>  8) & 0x7f) <<  7) |
-                                (((offset >> 16) & 0x7f) << 14) |
-                                (((offset >> 24) & 0x7f) << 21));
+                                 (((offset >>  8) & 0x7f) <<  7) |
+                                 (((offset >> 16) & 0x7f) << 14) |
+                                 (((offset >> 24) & 0x7f) << 21));
                        if ((ms->flags & MAGIC_DEBUG) != 0)
                                fprintf(stderr, "id3 offs=%u\n", offset);
                        break;