aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorXin LI <delphij@FreeBSD.org>2015-09-23 05:09:36 +0000
committerXin LI <delphij@FreeBSD.org>2015-09-23 05:09:36 +0000
commit1e0fd9ee49c0f1156dc8531655f1613adeb134c0 (patch)
tree3a5c1894bfdb27e6fed7b206d934a13ed1d8acf1
parent0e51cba5db852ed0572cc8786a6a30d5ec8434a4 (diff)
downloadsrc-1e0fd9ee49c0f1156dc8531655f1613adeb134c0.tar.gz
src-1e0fd9ee49c0f1156dc8531655f1613adeb134c0.zip
Vendor import of file 4.25.vendor/file/5.25
Notes
Notes: svn path=/vendor/file/dist/; revision=288140 svn path=/vendor/file/5.25/; revision=288141; tag=vendor/file/5.25
-rw-r--r--ChangeLog16
-rwxr-xr-xconfigure20
-rw-r--r--configure.ac2
-rw-r--r--doc/file.man5
-rw-r--r--doc/libmagic.man5
-rw-r--r--doc/magic.man4
-rw-r--r--magic/Magdir/adventure33
-rw-r--r--magic/Magdir/apple18
-rw-r--r--magic/Magdir/archive30
-rw-r--r--magic/Magdir/c-lang4
-rw-r--r--magic/Magdir/c648
-rw-r--r--magic/Magdir/compress9
-rw-r--r--magic/Magdir/database6
-rw-r--r--magic/Magdir/filesystems43
-rw-r--r--magic/Magdir/frame6
-rw-r--r--magic/Magdir/iff4
-rw-r--r--magic/Magdir/images5
-rw-r--r--magic/Magdir/karma4
-rw-r--r--magic/Magdir/linux21
-rw-r--r--magic/Magdir/make2
-rw-r--r--magic/Magdir/map16
-rw-r--r--magic/Magdir/msdos4
-rw-r--r--magic/Magdir/netscape5
-rw-r--r--magic/Magdir/python8
-rw-r--r--magic/Magdir/scientific7
-rw-r--r--magic/Magdir/sgi6
-rw-r--r--magic/Magdir/sgml18
-rw-r--r--magic/Magdir/windows5
-rw-r--r--src/apprentice.c32
-rw-r--r--src/file.c4
-rw-r--r--src/file.h18
-rw-r--r--src/file_opts.h2
-rw-r--r--src/funcs.c60
-rw-r--r--src/gmtime_r.c6
-rw-r--r--src/localtime_r.c6
-rw-r--r--src/magic.c16
-rw-r--r--src/magic.h3
-rw-r--r--src/magic.h.in1
-rw-r--r--src/print.c10
-rw-r--r--src/readelf.c16
-rw-r--r--src/softmagic.c89
41 files changed, 364 insertions, 213 deletions
diff --git a/ChangeLog b/ChangeLog
index 1fb44a26be89..8e67ef6a9043 100644
--- 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
diff --git a/configure b/configure
index 7a23ea646f43..7f62b63eb7a3 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for file 5.24.
+# Generated by GNU Autoconf 2.69 for file 5.25.
#
# Report bugs to <christos@astron.com>.
#
@@ -590,8 +590,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='file'
PACKAGE_TARNAME='file'
-PACKAGE_VERSION='5.24'
-PACKAGE_STRING='file 5.24'
+PACKAGE_VERSION='5.25'
+PACKAGE_STRING='file 5.25'
PACKAGE_BUGREPORT='christos@astron.com'
PACKAGE_URL=''
@@ -1327,7 +1327,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures file 5.24 to adapt to many kinds of systems.
+\`configure' configures file 5.25 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1397,7 +1397,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of file 5.24:";;
+ short | recursive ) echo "Configuration of file 5.25:";;
esac
cat <<\_ACEOF
@@ -1507,7 +1507,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-file configure 5.24
+file configure 5.25
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2163,7 +2163,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by file $as_me 5.24, which was
+It was created by file $as_me 5.25, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -3029,7 +3029,7 @@ fi
# Define the identity of the package.
PACKAGE='file'
- VERSION='5.24'
+ VERSION='5.25'
cat >>confdefs.h <<_ACEOF
@@ -15036,7 +15036,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by file $as_me 5.24, which was
+This file was extended by file $as_me 5.25, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -15102,7 +15102,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-file config.status 5.24
+file config.status 5.25
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
diff --git a/configure.ac b/configure.ac
index a48e445fccdf..50c3188d23fe 100644
--- a/configure.ac
+++ b/configure.ac
@@ -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])])
diff --git a/doc/file.man b/doc/file.man
index 6f782215d57c..3e10658d2079 100644
--- a/doc/file.man
+++ b/doc/file.man
@@ -1,5 +1,5 @@
-.\" $File: file.man,v 1.117 2015/06/03 19:51:27 christos Exp $
-.Dd June 3, 2015
+.\" $File: file.man,v 1.118 2015/09/11 17:24:09 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.
diff --git a/doc/libmagic.man b/doc/libmagic.man
index 64170a31b2ed..8f5c0327fa20 100644
--- a/doc/libmagic.man
+++ b/doc/libmagic.man
@@ -1,4 +1,4 @@
-.\" $File: libmagic.man,v 1.37 2015/06/03 18:21:24 christos Exp $
+.\" $File: libmagic.man,v 1.38 2015/09/11 17:24:09 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
diff --git a/doc/magic.man b/doc/magic.man
index b6523f2d9e4b..f3b63b461808 100644
--- a/doc/magic.man
+++ b/doc/magic.man
@@ -1,4 +1,4 @@
-.\" $File: magic.man,v 1.85 2015/01/01 17:07:34 christos Exp $
+.\" $File: magic.man,v 1.86 2015/09/08 13:48:44 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
diff --git a/magic/Magdir/adventure b/magic/Magdir/adventure
index 37b4cb3de2e0..94835e11ed39 100644
--- a/magic/Magdir/adventure
+++ b/magic/Magdir/adventure
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: adventure,v 1.14 2012/06/21 01:32:26 christos Exp $
+# $File: adventure,v 1.15 2015/09/07 10:03:21 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
@@ -41,10 +42,12 @@
>>>>>>>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
@@ -66,11 +69,13 @@
>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.
@@ -78,12 +83,14 @@
>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"
@@ -97,14 +104,18 @@
>>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
diff --git a/magic/Magdir/apple b/magic/Magdir/apple
index dcfa8788b8f1..14186883c9ce 100644
--- a/magic/Magdir/apple
+++ b/magic/Magdir/apple
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: apple,v 1.30 2015/04/13 13:09:06 christos Exp $
+# $File: apple,v 1.31 2015/08/29 07:10:35 christos Exp $
# apple: file(1) magic for Apple file formats
#
0 search/1/t FiLeStArTfIlEsTaRt binscii (apple ][) text
@@ -265,14 +265,14 @@
>>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.
diff --git a/magic/Magdir/archive b/magic/Magdir/archive
index 30cced005625..f115e95473d5 100644
--- a/magic/Magdir/archive
+++ b/magic/Magdir/archive
@@ -1,5 +1,5 @@
#------------------------------------------------------------------------------
-# $File: archive,v 1.90 2015/04/24 15:44:12 christos Exp $
+# $File: archive,v 1.91 2015/09/16 13:49:33 christos Exp $
# archive: file(1) magic for archive formats (see also "msdos" for self-
# extracting compressed archives)
#
@@ -434,16 +434,34 @@
# 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
diff --git a/magic/Magdir/c-lang b/magic/Magdir/c-lang
index 39889ec1cf32..0b17611fbaad 100644
--- a/magic/Magdir/c-lang
+++ b/magic/Magdir/c-lang
@@ -1,5 +1,5 @@
#------------------------------------------------------------------------------
-# $File: c-lang,v 1.19 2014/06/03 19:17:27 christos Exp $
+# $File: c-lang,v 1.20 2015/07/27 14:33:10 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
diff --git a/magic/Magdir/c64 b/magic/Magdir/c64
index eea3e319101a..eb79ac3c159d 100644
--- a/magic/Magdir/c64
+++ b/magic/Magdir/c64
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: c64,v 1.5 2009/09/19 16:28:08 christos Exp $
+# $File: c64,v 1.6 2015/08/24 05:17:42 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
diff --git a/magic/Magdir/compress b/magic/Magdir/compress
index c2266d4484a1..8452f52bb536 100644
--- a/magic/Magdir/compress
+++ b/magic/Magdir/compress
@@ -1,5 +1,5 @@
#------------------------------------------------------------------------------
-# $File: compress,v 1.63 2015/03/11 19:27:35 christos Exp $
+# $File: compress,v 1.64 2015/07/27 15:41:09 christos Exp $
# compress: file(1) magic for pure-compression formats (no archives)
#
# compress, gzip, pack, compact, huf, squeeze, crunch, freeze, yabba, etc.
@@ -258,7 +258,8 @@
!: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
diff --git a/magic/Magdir/database b/magic/Magdir/database
index 7213d76fe6ee..f39acfdadc6e 100644
--- a/magic/Magdir/database
+++ b/magic/Magdir/database
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: database,v 1.44 2015/07/02 18:25:57 christos Exp $
+# $File: database,v 1.45 2015/09/09 16:25:29 christos Exp $
# database: file(1) magic for various databases
#
# extracted from header/code files by Graeme Wilford (eep2gw@ee.surrey.ac.uk)
@@ -541,3 +541,7 @@
# IDA (Interactive Disassembler) database
0 string IDA1 IDA (Interactive Disassembler) database
+
+# Hopper (reverse engineering tool) http://www.hopperapp.com/
+0 string hopperdb Hopper database
+
diff --git a/magic/Magdir/filesystems b/magic/Magdir/filesystems
index d8a802a31ee4..87c067ec93a2 100644
--- a/magic/Magdir/filesystems
+++ b/magic/Magdir/filesystems
@@ -1,5 +1,5 @@
#------------------------------------------------------------------------------
-# $File: filesystems,v 1.109 2015/02/22 01:22:54 christos Exp $
+# $File: filesystems,v 1.111 2015/09/09 16:26:54 christos Exp $
# filesystems: file(1) magic for different filesystems
#
0 name partid
@@ -1721,7 +1721,7 @@
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
@@ -1740,27 +1740,26 @@
>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)
@@ -2209,13 +2208,21 @@
>>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>
diff --git a/magic/Magdir/frame b/magic/Magdir/frame
index babe89027156..08f884d0ea56 100644
--- a/magic/Magdir/frame
+++ b/magic/Magdir/frame
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: frame,v 1.12 2009/09/19 16:28:09 christos Exp $
+# $File: frame,v 1.13 2015/08/29 07:10:35 christos Exp $
# frame: file(1) magic for FrameMaker files
#
# This stuff came on a FrameMaker demo tape, most of which is
@@ -41,10 +41,10 @@
>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
diff --git a/magic/Magdir/iff b/magic/Magdir/iff
index b991ab749306..9437dd68e129 100644
--- a/magic/Magdir/iff
+++ b/magic/Magdir/iff
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: iff,v 1.13 2011/09/06 11:00:06 christos Exp $
+# $File: iff,v 1.14 2015/09/07 10:03:21 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
diff --git a/magic/Magdir/images b/magic/Magdir/images
index e6dd414ae879..a3ac70b62499 100644
--- a/magic/Magdir/images
+++ b/magic/Magdir/images
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: images,v 1.106 2015/02/22 01:26:05 christos Exp $
+# $File: images,v 1.107 2015/07/11 14:40:10 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
diff --git a/magic/Magdir/karma b/magic/Magdir/karma
index 47d5d97304a8..938a51d5edc6 100644
--- a/magic/Magdir/karma
+++ b/magic/Magdir/karma
@@ -1,9 +1,9 @@
#------------------------------------------------------------------------------
-# $File: karma,v 1.7 2014/04/30 21:41:02 christos Exp $
+# $File: karma,v 1.8 2015/08/29 07:10:35 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
diff --git a/magic/Magdir/linux b/magic/Magdir/linux
index 44aaa666a312..c8cc0df5e50e 100644
--- a/magic/Magdir/linux
+++ b/magic/Magdir/linux
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: linux,v 1.62 2015/05/03 13:06:36 christos Exp $
+# $File: linux,v 1.63 2015/08/24 05:16:11 christos Exp $
# linux: file(1) magic for Linux files
#
# Values for Linux/i386 binaries, from Daniel Quinlan <quinlan@yggdrasil.com>
@@ -417,6 +417,25 @@
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
diff --git a/magic/Magdir/make b/magic/Magdir/make
index 5575686a69c1..f8509d6bdbcf 100644
--- a/magic/Magdir/make
+++ b/magic/Magdir/make
@@ -1,5 +1,5 @@
#------------------------------------------------------------------------------
-# $File: make,v 1.1 2011/12/08 12:12:46 rrt Exp $
+# $File: make,v 1.2 2015/08/25 07:34:06 christos Exp $
# make: file(1) magic for makefiles
#
0 regex/100l \^CFLAGS makefile script text
diff --git a/magic/Magdir/map b/magic/Magdir/map
index 5013fa60c542..e02b2052e225 100644
--- a/magic/Magdir/map
+++ b/magic/Magdir/map
@@ -1,7 +1,7 @@
#------------------------------------------------------------------------------
-# $File: map,v 1.3 2015/07/09 15:16:41 christos Exp $
+# $File: map,v 1.4 2015/08/10 05:18:27 christos Exp $
# map: file(1) magic for Map data
#
@@ -25,3 +25,17 @@
>>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)
+
diff --git a/magic/Magdir/msdos b/magic/Magdir/msdos
index 64d486223699..89c141e91a5e 100644
--- a/magic/Magdir/msdos
+++ b/magic/Magdir/msdos
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: msdos,v 1.100 2014/06/03 19:17:27 christos Exp $
+# $File: msdos,v 1.101 2015/08/24 05:08:48 christos Exp $
# msdos: file(1) magic for MS-DOS files
#
@@ -772,7 +772,7 @@
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
diff --git a/magic/Magdir/netscape b/magic/Magdir/netscape
index 942f08adb1cb..a9b43cdd5f1d 100644
--- a/magic/Magdir/netscape
+++ b/magic/Magdir/netscape
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: netscape,v 1.6 2009/09/19 16:28:11 christos Exp $
+# $File: netscape,v 1.7 2015/08/24 05:20:52 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
diff --git a/magic/Magdir/python b/magic/Magdir/python
index 36cdfd8cb715..0668a9369489 100644
--- a/magic/Magdir/python
+++ b/magic/Magdir/python
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: python,v 1.26 2014/08/04 05:58:40 christos Exp $
+# $File: python,v 1.27 2015/09/08 13:59:44 christos Exp $
# python: file(1) magic for python
#
# Outlook puts """ too for urgent messages
@@ -26,12 +26,16 @@
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
diff --git a/magic/Magdir/scientific b/magic/Magdir/scientific
index f780743ca495..e39720cf8784 100644
--- a/magic/Magdir/scientific
+++ b/magic/Magdir/scientific
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: scientific,v 1.9 2014/06/03 19:01:34 christos Exp $
+# $File: scientific,v 1.10 2015/08/24 05:18:55 christos Exp $
# scientific: file(1) magic for scientific formats
#
# From: Joe Krahn <krahn@niehs.nih.gov>
@@ -104,3 +104,8 @@
>>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)
diff --git a/magic/Magdir/sgi b/magic/Magdir/sgi
index a6223d78d117..ece9988d6bb7 100644
--- a/magic/Magdir/sgi
+++ b/magic/Magdir/sgi
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: sgi,v 1.21 2014/04/30 21:41:02 christos Exp $
+# $File: sgi,v 1.22 2015/08/29 07:10:35 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
diff --git a/magic/Magdir/sgml b/magic/Magdir/sgml
index cf2b40e9138c..0d482555e5be 100644
--- a/magic/Magdir/sgml
+++ b/magic/Magdir/sgml
@@ -1,5 +1,4 @@
-#------------------------------------------------------------------------------
-# $File: sgml,v 1.31 2015/03/11 19:38:04 christos Exp $
+#------------------------------------------------------------------------------ # $File: sgml,v 1.32 2015/07/11 15:08:53 christos Exp $
# Type: SVG Vectorial Graphics
# From: Noel Torres <tecnico@ejerciciosresueltos.com>
0 string \<?xml\ version="
@@ -24,16 +23,16 @@
# 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
#------------------------------------------------------------------------------
@@ -106,9 +105,6 @@
>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
diff --git a/magic/Magdir/windows b/magic/Magdir/windows
index 3f7bded3e152..7e0d4d1fcd4c 100644
--- a/magic/Magdir/windows
+++ b/magic/Magdir/windows
@@ -1,6 +1,6 @@
#------------------------------------------------------------------------------
-# $File: windows,v 1.10 2014/09/24 19:52:46 christos Exp $
+# $File: windows,v 1.12 2015/08/29 07:10:35 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
@@ -239,6 +239,7 @@
# 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
diff --git a/src/apprentice.c b/src/apprentice.c
index 607201c195e2..66f64bd9dd11 100644
--- a/src/apprentice.c
+++ b/src/apprentice.c
@@ -32,7 +32,7 @@
#include "file.h"
#ifndef lint
-FILE_RCSID("@(#)$File: apprentice.c,v 1.233 2015/06/10 00:57:41 christos Exp $")
+FILE_RCSID("@(#)$File: apprentice.c,v 1.238 2015/09/12 18:10:42 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:
diff --git a/src/file.c b/src/file.c
index 44f4ccea5735..fa46b954abe5 100644
--- a/src/file.c
+++ b/src/file.c
@@ -32,7 +32,7 @@
#include "file.h"
#ifndef lint
-FILE_RCSID("@(#)$File: file.c,v 1.165 2015/06/11 12:52:32 christos Exp $")
+FILE_RCSID("@(#)$File: file.c,v 1.167 2015/09/11 17:24:09 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;
diff --git a/src/file.h b/src/file.h
index 1b4ef6f7a2cc..b0f0cc129c4e 100644
--- a/src/file.h
+++ b/src/file.h
@@ -27,7 +27,7 @@
*/
/*
* file.h - definitions for file(1) program
- * @(#)$File: file.h,v 1.168 2015/04/09 20:01:41 christos Exp $
+ * @(#)$File: file.h,v 1.172 2015/09/11 17:24:09 christos Exp $
*/
#ifndef __file_h__
@@ -44,9 +44,11 @@
#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 */
diff --git a/src/file_opts.h b/src/file_opts.h
index 2e30d0632041..3d9a7ce8beb5 100644
--- a/src/file_opts.h
+++ b/src/file_opts.h
@@ -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"
diff --git a/src/funcs.c b/src/funcs.c
index 16f2c4ef9cd8..97d4a0afaacf 100644
--- a/src/funcs.c
+++ b/src/funcs.c
@@ -27,7 +27,7 @@
#include "file.h"
#ifndef lint
-FILE_RCSID("@(#)$File: funcs.c,v 1.83 2015/06/16 14:17:37 christos Exp $")
+FILE_RCSID("@(#)$File: funcs.c,v 1.84 2015/09/10 13:32:19 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;
}
diff --git a/src/gmtime_r.c b/src/gmtime_r.c
index 963dfeefca19..469ec650a5fe 100644
--- a/src/gmtime_r.c
+++ b/src/gmtime_r.c
@@ -1,15 +1,15 @@
-/* $File: gmtime_r.c,v 1.1 2015/01/09 19:28:32 christos Exp $ */
+/* $File: gmtime_r.c,v 1.2 2015/07/11 14:41:37 christos Exp $ */
#include "file.h"
#ifndef lint
-FILE_RCSID("@(#)$File: gmtime_r.c,v 1.1 2015/01/09 19:28:32 christos Exp $")
+FILE_RCSID("@(#)$File: gmtime_r.c,v 1.2 2015/07/11 14:41:37 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)
diff --git a/src/localtime_r.c b/src/localtime_r.c
index 69d78d9a84ef..b0d996dafa5f 100644
--- a/src/localtime_r.c
+++ b/src/localtime_r.c
@@ -1,15 +1,15 @@
-/* $File: localtime_r.c,v 1.1 2015/01/09 19:28:32 christos Exp $ */
+/* $File: localtime_r.c,v 1.2 2015/07/11 14:41:37 christos Exp $ */
#include "file.h"
#ifndef lint
-FILE_RCSID("@(#)$File: localtime_r.c,v 1.1 2015/01/09 19:28:32 christos Exp $")
+FILE_RCSID("@(#)$File: localtime_r.c,v 1.2 2015/07/11 14:41:37 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)
diff --git a/src/magic.c b/src/magic.c
index bc8c344b18d0..87ac1cb0ae72 100644
--- a/src/magic.c
+++ b/src/magic.c
@@ -33,7 +33,7 @@
#include "file.h"
#ifndef lint
-FILE_RCSID("@(#)$File: magic.c,v 1.93 2015/04/15 23:47:58 christos Exp $")
+FILE_RCSID("@(#)$File: magic.c,v 1.95 2015/09/11 17:24:09 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;
diff --git a/src/magic.h b/src/magic.h
index 0d643160f37e..eab3d3a7762f 100644
--- a/src/magic.h
+++ b/src/magic.h
@@ -80,7 +80,7 @@
#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 522 /* This implementation */
+#define MAGIC_VERSION 524 /* This implementation */
#ifdef __cplusplus
@@ -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 *);
diff --git a/src/magic.h.in b/src/magic.h.in
index 500bdbdd1380..1e567cd00ed4 100644
--- a/src/magic.h.in
+++ b/src/magic.h.in
@@ -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 *);
diff --git a/src/print.c b/src/print.c
index 07ae8f6d8262..0d52290561d7 100644
--- a/src/print.c
+++ b/src/print.c
@@ -32,7 +32,7 @@
#include "file.h"
#ifndef lint
-FILE_RCSID("@(#)$File: print.c,v 1.79 2015/01/09 19:28:32 christos Exp $")
+FILE_RCSID("@(#)$File: print.c,v 1.80 2015/07/16 14:28:57 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:
diff --git a/src/readelf.c b/src/readelf.c
index bc6e7f6b42e4..2a7fc01b78b5 100644
--- a/src/readelf.c
+++ b/src/readelf.c
@@ -27,7 +27,7 @@
#include "file.h"
#ifndef lint
-FILE_RCSID("@(#)$File: readelf.c,v 1.120 2015/06/16 14:18:07 christos Exp $")
+FILE_RCSID("@(#)$File: readelf.c,v 1.122 2015/09/10 13:59:32 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;
diff --git a/src/softmagic.c b/src/softmagic.c
index 15a092f04abe..84a893262c7b 100644
--- a/src/softmagic.c
+++ b/src/softmagic.c
@@ -32,7 +32,7 @@
#include "file.h"
#ifndef lint
-FILE_RCSID("@(#)$File: softmagic.c,v 1.216 2015/06/09 22:17:52 christos Exp $")
+FILE_RCSID("@(#)$File: softmagic.c,v 1.218 2015/09/11 17:24:09 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;