Update to file-4.19.
authorPeter Avalos <pavalos@dragonflybsd.org>
Tue, 12 Dec 2006 18:44:17 +0000 (18:44 +0000)
committerPeter Avalos <pavalos@dragonflybsd.org>
Tue, 12 Dec 2006 18:44:17 +0000 (18:44 +0000)
28 files changed:
contrib/file-4/ChangeLog
contrib/file-4/doc/file.man
contrib/file-4/doc/libmagic.man
contrib/file-4/magic/Magdir/archive
contrib/file-4/magic/Magdir/audio
contrib/file-4/magic/Magdir/cad
contrib/file-4/magic/Magdir/commands
contrib/file-4/magic/Magdir/editors
contrib/file-4/magic/Magdir/elf
contrib/file-4/magic/Magdir/filesystems
contrib/file-4/magic/Magdir/linux
contrib/file-4/magic/Magdir/msdos
contrib/file-4/magic/Magdir/python
contrib/file-4/magic/Magdir/riff
contrib/file-4/magic/Magdir/sysex
contrib/file-4/magic/Magdir/unicode [new file with mode: 0644]
contrib/file-4/magic/Magdir/vmware
contrib/file-4/magic/Magdir/wordprocessors
contrib/file-4/magic/Magdir/xwindows
contrib/file-4/magic/magic.mime
contrib/file-4/src/apprentice.c
contrib/file-4/src/file.c
contrib/file-4/src/file.h
contrib/file-4/src/funcs.c
contrib/file-4/src/patchlevel.h
contrib/file-4/src/print.c
contrib/file-4/src/readelf.c
contrib/file-4/src/softmagic.c

index 0117dcb..8c58f74 100644 (file)
@@ -1,3 +1,45 @@
+2006-12-11 16:49 Christos Zoulas <christos@zoulas.com>
+
+       * fix byteswapping issue
+
+       * report the number of bytes we tried to
+         allocate when allocation fails
+
+       * add a few missed cases in the strength routine
+
+2006-12-08 16:32 Christos Zoulas <christos@zoulas.com>
+
+       * store and print the line number of the magic
+         entry for debugging.         
+
+       * if the magic entry did not print anything,
+         don't treat it as a match
+
+       * change the magic strength algorithm to take
+         into account the relationship op.
+
+       * fix a bug in search where we could accidentally
+         return a match.
+
+       * propagate the error return from match to
+         file_softmagic.
+
+2006-11-25 13:35 Christos Zoulas <christos@zoulas.com>
+       
+       * Don't store the current offset in the magic
+         struct, because it needs to be restored and
+         it was not done properly all the time. Bug
+         found by: Arkadiusz Miskiewicz
+
+       * Fix problem in the '\0' separator; and don't
+         print it as an additional separator; print
+         it as the only separator.
+
+2006-11-17 10:51 Christos Zoulas <christos@zoulas.com>
+
+       * Added a -0 option to print a '\0' separator
+         Etienne Buira <etienne.buira@free.fr>
+
 2006-10-31 15:14 Christos Zoulas <christos@zoulas.com>
 
        * Check offset before copying (Mike Frysinger)
index ce8cacc..3016d07 100644 (file)
@@ -1,5 +1,5 @@
 .TH FILE __CSECTION__ "Copyright but distributable"
-.\" $Id: file.man,v 1.58 2006/05/03 19:20:25 christos Exp $
+.\" $Id: file.man,v 1.59 2006/11/17 16:11:10 christos Exp $
 .SH NAME
 file
 \- determine file type
@@ -271,6 +271,10 @@ Print the version of the program and exit.
 .TP 8
 .B "\-z, \-\-uncompress"
 Try to look inside compressed files.
+.B "\-0, \-\-print0"
+Output a null character ('\0') after the end of the filename. Nice to
+.BR cut (1)
+the output. This does not affect the separator which is still printed.
 .TP 8
 .B "\-\-help"
 Print a help message and exit.
index 22d15a0..3ef560c 100644 (file)
@@ -24,7 +24,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.Dd March 22, 2003
+.Dd November 15, 2006
 .Dt MAGIC 3
 .Os
 .Sh NAME
@@ -120,7 +120,7 @@ no error.
 The
 .Fn magic_errno
 function returns the last operating system error number
-.Pq .Xr errno 3
+.Pq .Xr errno 2
 that was encountered by a system call.
 .Pp
 The
index 87c2f95..e110fd4 100644 (file)
 # RAR archiver (Greg Roelofs, newt@uchicago.edu)
 0      string          Rar!            RAR archive data,
 >44    byte            x               v%0x,
+>10    byte            >0              flags:
+>>10   byte            &0x01           Archive volume,
+>>10   byte            &0x02           Commented,
+>>10   byte            &0x04           Locked,
+>>10   byte            &0x08           Solid,
+>>10   byte            &0x20           Authenticated,
 >35    byte            0               os: MS-DOS
 >35    byte            1               os: OS/2
 >35    byte            2               os: Win32
 # From: Tilman Sauerbeck <tilman@code-monkey.de>
 0      belong  0x1ee7ff00      EET archive
 
+# rzip archives
+0      string  RZIP            rzip compressed data
+>4     byte    x               - version %d
+>5     byte    x               \b.%d
+>6     belong  x               (%d bytes)
+
 # From: "Robert Dale" <robdale@gmail.com>
 0      belong  123             dar archive,
 >4     belong  x               label "%.8x
index 829c946..fd9d771 100644 (file)
 # From: Emanuel Haupt <ehaupt@critical.ch>
 0      string          ZXAYEMUL        Spectrum 128 tune
 
-# From: Alex Beregszaszi <alex@fsn.hu>
-0      string          MP+             Musepack
->3     byte&0x0f       x               SV%d
-
 0      string          \0BONK          BONK,
 #>5    byte            x               version %d
 >14    byte            x               %d channel(s),
index 0326340..757dab6 100644 (file)
@@ -35,6 +35,7 @@
 >>30   string  \120\104                        DGNFile
 >>30   string  \172\104                        DGNFile
 >>30   string  \172\105                        DGNFile
+>>30   string  \172\106                        DGNFile
 >>30   string  \234\106                        DGNFile
 >>30   string  \273\105                        DGNFile
 >>30   string  \306\106                        DGNFile
 0      string AC1012   AutoCad (release 12)
 0      string AC1013   AutoCad (release 13)
 0      string AC1014   AutoCad (release 14)
+
+# CAD: file(1) magic for computer aided design files
+# Phillip Griffith <phillip dot griffith at gmail dot com>
+# AutoCAD magic taken from the Open Design Alliance's OpenDWG specifications.
+#
+0      belong  0x08051700      Bentley/Intergraph MicroStation DGN cell library
+0      belong  0x0809fe02      Bentley/Intergraph MicroStation DGN vector CAD
+0      belong  0xc809fe02      Bentley/Intergraph MicroStation DGN vector CAD
+0      beshort 0x0809          Bentley/Intergraph MicroStation
+>0x02  byte    0xfe
+>>0x04 beshort 0x1800          CIT raster CAD
+0      string  AC1012          AutoDesk AutoCAD R13
+0      string  AC1014          AutoDesk AutoCAD R14 
+0      string  AC1015          AutoDesk AutoCAD R2000
index 2464984..2bdffbe 100644 (file)
@@ -52,3 +52,5 @@
 0      string/b        #!\ /usr/bin/php        PHP script text executable
 
 0      string          Zend\x00                PHP script Zend Optimizer data
+
+0      string          \$!                     DCL command file
index 7edbe8b..02826fa 100644 (file)
@@ -11,3 +11,6 @@
 # Vi IMproved Encrypted file 
 # by David Necas <yeti@physics.muni.cz>
 0      string  VimCrypt~       Vim encrypted file data
+# Vi IMproved Swap file
+# by Sven Wegener <swegener@gentoo.org>
+0      string  b0VIM\          Vim swap file, version %s
index b2eb247..6c9976f 100644 (file)
 >>18   leshort         51              Stanford MIPS-X,
 >>18   leshort         52              Motorola Coldfire,
 >>18   leshort         53              Motorola M68HC12,
->>18   leshort         62              AMD x86-64,
+>>18   leshort         62              x86-64,
 >>18   leshort         75              Digital VAX,
 >>18   leshort         88              Renesas M32R,
+>>18   leshort         94              Tensilica Xtensa,
 >>18   leshort         97              NatSemi 32k,
 >>18   leshort         0x9026          Alpha (unofficial),
 >>20   lelong          0               invalid version
 >>18   beshort         73              Cray NV1,
 >>18   beshort         75              Digital VAX,
 >>18   beshort         88              Renesas M32R,
+>>18   beshort         94              Tensilica Xtensa,
 >>18   beshort         97              NatSemi 32k,
 >>18   beshort         0x9026          Alpha (unofficial),
 >>18   beshort         0xa390          IBM S/390 (obsolete),
index 5fa3df6..dd4910a 100644 (file)
 0      string  VoIP\ Startup\ and      Aculab VoIP firmware
 >35    string  x       format %s
 
-# PPCBoot image file
+# u-boot/PPCBoot image file
 # From: Mark Brown <broonie@sirena.org.uk>
-0      belong  0x27051956      PPCBoot image
+0      belong  0x27051956      u-boot/PPCBoot image
 >4     string  PPCBoot
 >>12   string  x               version %s
 
 # JFFS2 file system
-0       leshort         0x1984                  Linux old jffs2 filesystem data little endian
-0       lelong          0xe0011985              Linux jffs2 filesystem data little endian
+0      leshort 0x1984          Linux old jffs2 filesystem data little endian
+0      leshort 0x1985          Linux jffs2 filesystem data little endian
 
 # Squashfs
 0      string  sqsh    Squashfs filesystem, big endian,
 >>51   lelong  x       blocksize: %d bytes,
 >39    ledate  x       created: %s
 
+0      string          td\000          floppy image data (TeleDisk)
+
 # AFS Dump Magic
 # From: Ty Sarna <tsarna@sarna.org> 
 0       string                  \x01\xb3\xa1\x13\x22    AFS Dump
index 36cc24f..fc0c42d 100644 (file)
 
 0x618           string LVM2\ 001       LVM2 (Linux Logical Volume Manager)
 >(0x614.l+0x600) string        >\0             , UUID: %s
+
+# SE Linux policy database
+0      lelong  0xf97cff8c              SE Linux policy
+>16    lelong  x                       v%d
+>20    lelong  1                       MLS
+>24    lelong  x                       %d symbols
+>28    lelong  x                       %d ocons
index 0eeb33d..4f226dd 100644 (file)
 >>(64.l)  lestring16 >0 Description: %15.15s
 
 # From: Alex Beregszaszi <alex@fsn.hu>
-0      string  COWD            VMWare3 disk image
->12    belong  x               %d bytes
+0      string  COWD            VMWare3
+>4     byte    3               disk image
+>>32   lelong  x               (%d/
+>>36   lelong  x               \b%d/
+>>40   lelong  x               \b%d)
+>4     byte    2               undoable disk image
+>>32   string  >\0             (%s)
 
 0      string  VMDK             VMware4 disk image
+0      string  KDMV             VMware4 disk image
 
 0      belong  0x514649fb      QEMU Copy-On-Write disk image
 >4     belong  x               version %d,
index 5aea137..9fac2b9 100644 (file)
@@ -13,6 +13,7 @@
 0      belong          0x2ded0d0a      python 2.2 byte-compiled
 0      belong          0x3bf20d0a      python 2.3 byte-compiled
 0      belong          0x6df20d0a      python 2.4 byte-compiled
+0      belong          0xb3f20d0a      python 2.5 byte-compiled
 
 0      string/b  #!\ /usr/bin/python   python script text executable
 
index 1f1deec..5aa9d10 100644 (file)
@@ -29,6 +29,8 @@
 >8     string          RMID            \b, MIDI
 # RIFF Multimedia Movie File format
 >8     string          RMMP            \b, multimedia movie
+# RIFF wrapper for MP3
+>8     string          RMP3            \b, MPEG Layer 3 audio
 # Microsoft WAVE format (*.wav)
 >8     string          WAVE            \b, WAVE audio
 >>20   leshort         1               \b, Microsoft PCM
 >>>>>>>(104.l+132)      string/c        iv50    Indeo 5.0
 >>>>>>>(104.l+132)      string/c        mp42    Microsoft MPEG-4 v2
 >>>>>>>(104.l+132)      string/c        mp43    Microsoft MPEG-4 v3
+>>>>>>>(104.l+132)      string/c        fmp4    FFMpeg MPEG-4
 >>>>>>>(104.l+132)      string/c        mjpg    Motion JPEG
 >>>>>>>(104.l+132)      string/c        div3    DivX 3
 >>>>>>>>112             string/c        div3    Low-Motion
 >>>>>>>(104.l+132)      string/c        divx    DivX 4
 >>>>>>>(104.l+132)      string/c        dx50    DivX 5
 >>>>>>>(104.l+132)      string/c        xvid    XviD
+>>>>>>>(104.l+132)      string/c        wmv3    Windows Media Video 9
 >>>>>>>(104.l+132)      string/c        h264    X.264
 >>>>>>>(104.l+132)      lelong  0
 ##>>>>>>>(104.l+132)      string  x       (%.4s)
 >>>>>>>(92.l+172)       string          strf
 >>>>>>>>(92.l+180)      leshort 0x0001  uncompressed PCM
 >>>>>>>>(92.l+180)      leshort 0x0002  ADPCM
+>>>>>>>>(92.l+180)      leshort 0x0006  aLaw
+>>>>>>>>(92.l+180)      leshort 0x0007  uLaw
+>>>>>>>>(92.l+180)      leshort 0x0050  MPEG-1 Layer 1 or 2
 >>>>>>>>(92.l+180)      leshort 0x0055  MPEG-1 Layer 3
 >>>>>>>>(92.l+180)      leshort 0x2000  Dolby AC3
 >>>>>>>>(92.l+180)      leshort 0x0161  DivX
index e2a4bd8..03d6cdd 100644 (file)
 >1     byte                    0x04            Moog
 >1     byte                    0x05            Passport
 >1     byte                    0x06            Lexicon
->1     byte                    0x07            Kurzweil
+>1     byte                    0x07            Kurzweil/Future Retro
+>>3    byte                    0x77            777
+>>4    byte                    0x00            Bank
+>>4    byte                    0x01            Song
+>>5    byte                    0x0f            16
+>>5    byte                    0x0e            15
+>>5    byte                    0x0d            14
+>>5    byte                    0x0c            13
+>>5    byte                    0x0b            12
+>>5    byte                    0x0a            11
+>>5    byte                    0x09            10
+>>5    byte                    0x08            9
+>>5    byte                    0x07            8
+>>5    byte                    0x06            7
+>>5    byte                    0x05            6
+>>5    byte                    0x04            5
+>>5    byte                    0x03            4
+>>5    byte                    0x02            3
+>>5    byte                    0x01            2
+>>5    byte                    0x00            1
+>>5    byte                    0x10            (ALL)
+>>2    byte                    x                       \b, Channel %d
 >1     byte                    0x08            Fender
 >1     byte                    0x09            Gulbransen
 >1     byte                    0x0a            AKG
 >1     byte                    0x0e            Garfield
 >1     byte                    0x0f            Ensoniq
 >1     byte                    0x10            Oberheim
+>>2    byte                    0x06            Matrix 6 series
+>>3    byte                    0x0A            Dump (All)
+>>3    byte                    0x01            Dump (Bank)
+>>4 belong                     0x0002040E              Matrix 1000
+>>>11 byte                     <2                      User bank %d
+>>>11 byte                     >1                      Preset bank %d
 >1     byte                    0x11            Apple
 >1     byte                    0x12            GreyMatter
 >1     byte                    0x14            PalmTree
 >>3    byte                    0x09            EK-44
 
 >1     byte                    0x30            Dynacord
+>1     byte                    0x31            Jomox
 >1     byte                    0x33            Clavia
 >1     byte                    0x39            Soundcraft
-
+# Some Waldorf info from http://Stromeko.Synth.net/Downloads#WaldorfDocs
 >1     byte                    0x3e            Waldorf
+>>2    byte                    0x00            microWave
+>>2    byte                    0x0E            microwave2 / XT
+>>2    byte                    0x0F            Q / Q+
+>>3    byte                    =0                      (default id)
+>>3 byte                       >0                      (
+>>>3 byte                      <0x7F           \bdevice %d)
+>>>3 byte                      =0x7F           \bbroadcast id)
 >>3    byte                    0x7f            Microwave I
+>>>4   byte                    0x00            SNDR (Sound Request)
+>>>4   byte                    0x10            SNDD (Sound Dump)
+>>>4   byte                    0x20            SNDP (Sound Parameter Change)
+>>>4   byte                    0x30            SNDQ (Sound Parameter Inquiry)
+>>>4   byte                    0x70            BOOT (Sound Reserved)
+>>>4   byte                    0x01            MULR (Multi Request)
+>>>4   byte                    0x11            MULD (Multi Dump)
+>>>4   byte                    0x21            MULP (Multi Parameter Change)
+>>>4   byte                    0x31            MULQ (Multi Parameter Inquiry)
+>>>4   byte                    0x71            OS (Multi Reserved)
+>>>4   byte                    0x02            DRMR (Drum Map Request)
+>>>4   byte                    0x12            DRMD (Drum Map Dump)
+>>>4   byte                    0x22            DRMP (Drum Map Parameter Change)
+>>>4   byte                    0x32            DRMQ (Drum Map Parameter Inquiry)
+>>>4   byte                    0x72            BIN (Drum Map Reserved)
+>>>4   byte                    0x03            PATR (Sequencer Pattern Request)
+>>>4   byte                    0x13            PATD (Sequencer Pattern Dump)
+>>>4   byte                    0x23            PATP (Sequencer Pattern Parameter Change)
+>>>4   byte                    0x33            PATQ (Sequencer Pattern Parameter Inquiry)
+>>>4   byte                    0x73            AFM (Sequencer Pattern Reserved)
+>>>4   byte                    0x04            GLBR (Global Parameter Request)
+>>>4   byte                    0x14            GLBD (Global Parameter Dump)
+>>>4   byte                    0x24            GLBP (Global Parameter Parameter Change)
+>>>4   byte                    0x34            GLBQ (Global Parameter Parameter Inquiry)
+>>>4   byte                    0x07            MODR (Mode Parameter Request)
+>>>4   byte                    0x17            MODD (Mode Parameter Dump)
+>>>4   byte                    0x27            MODP (Mode Parameter Parameter Change)
+>>>4   byte                    0x37            MODQ (Mode Parameter Parameter Inquiry)
+>>2    byte                    0x10            microQ
+>>>4   byte                    0x00            SNDR (Sound Request)
+>>>4   byte                    0x10            SNDD (Sound Dump)
+>>>4   byte                    0x20            SNDP (Sound Parameter Change)
+>>>4   byte                    0x30            SNDQ (Sound Parameter Inquiry)
+>>>4   byte                    0x70            (Sound Reserved)
+>>>4   byte                    0x01            MULR (Multi Request)
+>>>4   byte                    0x11            MULD (Multi Dump)
+>>>4   byte                    0x21            MULP (Multi Parameter Change)
+>>>4   byte                    0x31            MULQ (Multi Parameter Inquiry)
+>>>4   byte                    0x71            OS (Multi Reserved)
+>>>4   byte                    0x02            DRMR (Drum Map Request)
+>>>4   byte                    0x12            DRMD (Drum Map Dump)
+>>>4   byte                    0x22            DRMP (Drum Map Parameter Change)
+>>>4   byte                    0x32            DRMQ (Drum Map Parameter Inquiry)
+>>>4   byte                    0x72            BIN (Drum Map Reserved)
+>>>4   byte                    0x04            GLBR (Global Parameter Request)
+>>>4   byte                    0x14            GLBD (Global Parameter Dump)
+>>>4   byte                    0x24            GLBP (Global Parameter Parameter Change)
+>>>4   byte                    0x34            GLBQ (Global Parameter Parameter Inquiry)
+>>2    byte                    0x11            rackAttack
+>>>4   byte                    0x00            SNDR (Sound Parameter Request)
+>>>4   byte                    0x10            SNDD (Sound Parameter Dump)
+>>>4   byte                    0x20            SNDP (Sound Parameter Parameter Change)
+>>>4   byte                    0x30            SNDQ (Sound Parameter Parameter Inquiry)
+>>>4   byte                    0x01            PRGR (Program Parameter Request)
+>>>4   byte                    0x11            PRGD (Program Parameter Dump)
+>>>4   byte                    0x21            PRGP (Program Parameter Parameter Change)
+>>>4   byte                    0x31            PRGQ (Program Parameter Parameter Inquiry)
+>>>4   byte                    0x71            OS (Program Parameter Reserved)
+>>>4   byte                    0x03            PATR (Pattern Parameter Request)
+>>>4   byte                    0x13            PATD (Pattern Parameter Dump)
+>>>4   byte                    0x23            PATP (Pattern Parameter Parameter Change)
+>>>4   byte                    0x33            PATQ (Pattern Parameter Parameter Inquiry)
+>>>4   byte                    0x04            GLBR (Global Parameter Request)
+>>>4   byte                    0x14            GLBD (Global Parameter Dump)
+>>>4   byte                    0x24            GLBP (Global Parameter Parameter Change)
+>>>4   byte                    0x34            GLBQ (Global Parameter Parameter Inquiry)
+>>>4   byte                    0x05            EFXR (FX Parameter Request)
+>>>4   byte                    0x15            EFXD (FX Parameter Dump)
+>>>4   byte                    0x25            EFXP (FX Parameter Parameter Change)
+>>>4   byte                    0x35            EFXQ (FX Parameter Parameter Inquiry)
+>>>4   byte                    0x07            MODR (Mode Command Request)
+>>>4   byte                    0x17            MODD (Mode Command Dump)
+>>>4   byte                    0x27            MODP (Mode Command Parameter Change)
+>>>4   byte                    0x37            MODQ (Mode Command Parameter Inquiry)
+>>2    byte                    0x03            Wave
+>>>4   byte                    0x00            SBPR (Soundprogram)
+>>>4   byte                    0x01            SAPR (Performance)
+>>>4   byte                    0x02            SWAVE (Wave)
+>>>4   byte                    0x03            SWTBL (Wave control table)
+>>>4   byte                    0x04            SVT (Velocity Curve)
+>>>4   byte                    0x05            STT (Tuning Table)
+>>>4   byte                    0x06            SGLB (Global Parameters)
+>>>4   byte                    0x07            SARRMAP (Performance Program Change Map)
+>>>4   byte                    0x08            SBPRMAP (Sound Program Change Map)
+>>>4   byte                    0x09            SBPRPAR (Sound Parameter)
+>>>4   byte                    0x0A            SARRPAR (Performance Parameter)
+>>>4   byte                    0x0B            SINSPAR (Instrument/External Parameter)
+>>>4   byte                    0x0F            SBULK (Bulk Switch on/off)
 
 # Japanese Group
 >1     byte                    0x40            Kawai
diff --git a/contrib/file-4/magic/Magdir/unicode b/contrib/file-4/magic/Magdir/unicode
new file mode 100644 (file)
index 0000000..45a32d4
--- /dev/null
@@ -0,0 +1,15 @@
+
+#---------------------------------------------------------------------------
+# Unicode:  BOM prefixed text files - Adrian Havill <havill@turbolinux.co.jp>
+#
+0      string  +/v8                    Unicode text, UTF-7
+0      string  +/v9                    Unicode text, UTF-7
+0      string  +/v+                    Unicode text, UTF-7
+0      string  +/v/                    Unicode text, UTF-7
+0      string  \357\273\277            Unicode text, UTF-8
+0      string  \335\163\146\163        Unicode text, UTF-8-EBCDIC
+0      string  \376\377\000\000        Unicode text, UTF-32, big-endian
+0      string  \377\376\000\000        Unicode text, UTF-32, little-endian
+0      string  \376\377                Unicode text, UTF-16, big-endian
+0      string  \377\376                Unicode text, UTF-16, little-endian
+0      string  \016\376\377            Unicode text, SCSU (Standard Compression Scheme for Unicode)
index 6af543c..28e19e5 100644 (file)
@@ -3,10 +3,3 @@
 # VMware specific files (deducted from version 1.1 and log file entries)
 # Anthon van der Neut (anthon@mnt.org)
 0      belong  0x4d52564e      VMware nvram 
-0      belong  0x434f5744      VMware
->4     byte    3               virtual disk 
->>32   lelong  x               (%d/
->>36   lelong  x               \b%d/
->>40   lelong  x               \b%d)
->4     byte    2               undoable disk
->>32   string  >\0             (%s)
index 0ac97ba..9c06d8d 100644 (file)
 #end of WordPerfect type files Version 1.6 - PLEASE DO NOT REMOVE THIS LINE
 
 # Hangul (Korean) Word Processor File
-0      string  HWP\ Document\ File     Hangul (Korean) Word Processor File
+0      string  HWP\ Document\ File     Hangul (Korean) Word Processor File 3.0
+# From: Won-Kyu Park <wkpark@kldp.org>
+512    string          R\0o\0o\0t\0    Hangul (Korean) Word Processor File 2000
 
 # CosmicBook, from BenoĆ®t Rouits
 0       string  CSBK    Ted Neslson's CosmicBook hypertext file
 2      string  IIXPRa                  Intel Quark Express Document (Korean)
 2      string  MMXPR3                  Motorola Quark Express Document (English)
 2      string  MMXPRa                  Motorola Quark Express Document (Korean)
+
+# adobe indesign (document, whatever...) from querkan
+0      belong  0x0606edf5              Adobe InDesign
+>16    string  DOCUMENT                Document
+
+# From: Michael Piefel <piefel@debian.org>
+# sqtroff intermediate language (replacement for ditroff int. lang.)
+0      string          X\ 495          SoftQuad troff Context intermediate for AT&T 495 laser printer
+0      string          X\ hp           SoftQuad troff Context intermediate for HP LaserJet
+0      string          X\ impr         SoftQuad troff Context intermediate for IMAGEN imPRESS
+0      string          X\ ps           SoftQuad troff Context intermediate for PostScript
index 1805d45..57f3b08 100644 (file)
@@ -13,7 +13,7 @@
 
 # xfsdump archive
 0      string  xFSdump0                        xfsdump archive
->8     long    x       (version %d)
+>8     belong  x       (version %d)
 
 # Jaleo XFS files
 0      long    395726                          Jaleo XFS file
index 7815286..3fa67e5 100644 (file)
@@ -99,9 +99,7 @@
 
 # svg
 
-0      string          \<?xml
-#                      text/xml
->38    string          \<\!DOCTYPE\040svg      image/svg+xml
+38     string          \<\!DOCTYPE\040svg      image/svg+xml
 
 
 # xml
 #------------------------------------------------------------------------------
 # Java
 
-0      short           0xcafe
->2     short           0xbabe          application/java
+0      beshort         0xcafe
+>2     beshort         0xbabe          application/java
 
 #------------------------------------------------------------------------------
 # audio:  file(1) magic for sound formats
 # DEC systems (e.g. DECstation 5000) use a variant of the Sun/NeXT format
 # that uses little-endian encoding and has a different magic number
 # (0x0064732E in little-endian encoding).
-0      lelong          0x0064732E      
+0      lelong          0x0064732E
 >12    lelong          1               audio/x-dec-basic
 >12    lelong          2               audio/x-dec-basic
 >12    lelong          3               audio/x-dec-basic
 
 # Bytes 0-3 of AIFF, AIFF-C, & 8SVX audio files are "FORM"
 #                                      AIFF audio data
-8      string          AIFF            audio/x-aiff    
+8      string          AIFF            audio/x-aiff
 #                                      AIFF-C audio data
-8      string          AIFC            audio/x-aiff    
+8      string          AIFC            audio/x-aiff
 #                                      IFF/8SVX audio data
-8      string          8SVX            audio/x-aiff    
+8      string          8SVX            audio/x-aiff
 
 
 
 # Creative Labs AUDIO stuff
 #                                      Standard MIDI data
-0      string  MThd                    audio/unknown   
+0      string  MThd                    audio/unknown
 #>9    byte    >0                      (format %d)
 #>11   byte    >1                      using %d channels
 #                                      Creative Music (CMF) data
-0      string  CTMF                    audio/unknown   
+0      string  CTMF                    audio/unknown
 #                                      SoundBlaster instrument data
-0      string  SBI                     audio/unknown   
+0      string  SBI                     audio/unknown
 #                                      Creative Labs voice data
-0      string  Creative\ Voice\ File   audio/unknown   
+0      string  Creative\ Voice\ File   audio/unknown
 ## is this next line right?  it came this way...
 #>19   byte    0x1A
 #>23   byte    >0                      - version %d
 0      string          \<!--   text/html
 0      string          \<h1    text/html
 0      string          \<H1    text/html
-0      string          \<!doctype\ HTML        text/html
-0      string          \<!DOCTYPE\ HTML        text/html
-0      string          \<!doctype\ html        text/html
-0      string          \<!doctype\ HTML        text/html
+0      string/c        \<!doctype\ html        text/html
 
 #------------------------------------------------------------------------------
 # images:  file(1) magic for image formats (see also "c-lang" for XPM bitmaps)
 #
 
 0      string          \376\067\0\043                  application/msword
-0      string          \320\317\021\340\241\261        application/msword
+# disable this one because it applies also to other
+# Office/OLE documents for which msword is not correct. See PR#2608.
+# from magic file of the apache
+#0     string          \320\317\021\340\241\261        application/msword
+512    string          \354\245\301                    application/msword
 0      string          \333\245-\0\0\0                 application/msword
 
 
 #0     string          \367\203        TeX generic font data
 #0     string          \367\131        TeX packed font data
 #0     string          \367\312        TeX virtual font data
-#0     string          This\ is\ TeX,  TeX transcript text     
+#0     string          This\ is\ TeX,  TeX transcript text
 #0     string          This\ is\ METAFONT,     METAFONT transcript text
 
 # There is no way to detect TeX Font Metric (*.tfm) files without
 0       belong             0x000001B3     video/mpv
 0       belong&0xFF5FFF1F  0x47400010     video/mp2t
 0       belong             0x00000001
->4      byte&1F            0x07           video/h264
+>4      byte&0x1F         0x07           video/h264
 
 # FLI animation format
 0      leshort         0xAF11                          video/fli
 #
 # Executables
 #
-0      string          \177ELF 
+0      string          \177ELF
 >16    leshort         0               application/octet-stream
 >16    leshort         1               application/x-object
 >16    leshort         2               application/x-executable
 4      string  Standard\ Jet\ DB       application/msaccess
 
 ## magic for XBase files
-#0      byte       0x02        
+#0      byte       0x02
 #>8     leshort          >0
 #>>12   leshort    0   application/x-dbf
 #
-#0      byte       0x03        
+#0      byte       0x03
 #>8     leshort          >0
 #>>12   leshort    0   application/x-dbf
 #
-#0      byte       0x04        
+#0      byte       0x04
 #>8     leshort          >0
 #>>12   leshort    0   application/x-dbf
 #
-#0      byte       0x05        
+#0      byte       0x05
 #>8     leshort          >0
 #>>12   leshort    0   application/x-dbf
 #
 #>8     leshort          >0
 #>>12   leshort    0   application/x-dbf
 #
-#0      byte       0x83        
+#0      byte       0x83
 #>8     leshort          >0
 #>>12   leshort    0   application/x-dbf
 #
 #>8     leshort          >0
 #>>12   leshort    0   application/x-dbf
 #
-#0      byte       0x8e        
+#0      byte       0x8e
 #>8     leshort          >0
 #>>12   leshort    0   application/x-dbf
 #
 0       beshort         0x9501                  text/PGP key security ring
 0       beshort         0x9500                  text/PGP key security ring
 0       beshort         0xa600                  text/PGP encrypted data
-0       string          -----BEGIN\040PGP       text/PGP armored data 
+0       string          -----BEGIN\040PGP       text/PGP armored data
 >15     string          PUBLIC\040KEY\040BLOCK- public key block
 >15     string          MESSAGE-                message
 >15     string          SIGNED\040MESSAGE-      signed message
 0       beshort         0x8501                  data
 #
 # GnuPG Magic:
-# 
+#
 0       beshort         0x9901                  text/GnuPG key public ring
 0       beshort         0x8501                  text/OpenPGP data
 
 #
 #       http://www.macromedia.com/software/flash/open/
 #
-0      string          FWS             
+0      string          FWS
 >3     byte            x                       application/x-shockwave-flash
 
 # The following paramaters are created for Namazu.
 #0     string  \000\000\001\000        image/x-ico
 
 # Quark Xpress 3 Files:
-# (made the mimetype up) 
+# (made the mimetype up)
 0      string  \0\0MMXPR3\0    application/x-quark-xpress-3
 
 # EET archive
 # From: Denis Knauf, via gentoo.
 0      string  fLaC            audio/x-flac
 0      string  CWS             application/x-shockwave-flash
+
+# Hangul Document Files:
+# Reversed-engineered HWP magic numbers
+# From: Won-Kyu Park <wkpark@kldp.org>
+512    string          R\0o\0o\0t\0    application/x-hwp
+
+0      string/c        BEGIN:VCARD     text/x-vcard
+0      string          WordPro\0       application/vnd.lotus-wordpro
+0      string          WordPro\r\373   application/vnd.lotus-wordpro
+0      string          CPC\262         image/cpi
+
+# 
+128    string          DICM            application/dicom
index 9f801db..974fae9 100644 (file)
@@ -46,7 +46,7 @@
 #endif
 
 #ifndef        lint
-FILE_RCSID("@(#)$Id: apprentice.c,v 1.98 2006/10/31 19:37:17 christos Exp $")
+FILE_RCSID("@(#)$Id: apprentice.c,v 1.100 2006/12/11 21:48:49 christos Exp $")
 #endif /* lint */
 
 #define        EATAB {while (isascii((unsigned char) *l) && \
@@ -97,7 +97,7 @@ private int hextoint(int);
 private const char *getstr(struct magic_set *, const char *, char *, int,
     int *);
 private int parse(struct magic_set *, struct magic_entry **, uint32_t *,
-    const char *, int);
+    const char *, size_t, int);
 private void eatsize(const char **);
 private int apprentice_1(struct magic_set *, const char *, int, struct mlist *);
 private size_t apprentice_magic_strength(const struct magic *);
@@ -203,7 +203,7 @@ apprentice_1(struct magic_set *ms, const char *fn, int action,
 
        if ((ml = malloc(sizeof(*ml))) == NULL) {
                file_delmagic(magic, mapped, nmagic);
-               file_oomem(ms);
+               file_oomem(ms, sizeof(*ml));
                return -1;
        }
 
@@ -257,13 +257,13 @@ file_apprentice(struct magic_set *ms, const char *fn, int action)
                fn = MAGIC;
 
        if ((fn = mfn = strdup(fn)) == NULL) {
-               file_oomem(ms);
+               file_oomem(ms, strlen(fn));
                return NULL;
        }
 
        if ((mlist = malloc(sizeof(*mlist))) == NULL) {
                free(mfn);
-               file_oomem(ms);
+               file_oomem(ms, sizeof(*mlist));
                return NULL;
        }
        mlist->next = mlist->prev = mlist;
@@ -275,10 +275,11 @@ file_apprentice(struct magic_set *ms, const char *fn, int action)
                if (*fn == '\0')
                        break;
                if (ms->flags & MAGIC_MIME) {
-                       if ((afn = malloc(strlen(fn) + sizeof(mime))) == NULL) {
+                       size_t len = strlen(fn) + sizeof(mime);
+                       if ((afn = malloc(len)) == NULL) {
                                free(mfn);
                                free(mlist);
-                               file_oomem(ms);
+                               file_oomem(ms, len);
                                return NULL;
                        }
                        (void)strcpy(afn, fn);
@@ -312,33 +313,40 @@ private size_t
 apprentice_magic_strength(const struct magic *m)
 {
 #define MULT 10
+       size_t val = 2 * MULT;  /* baseline strength */
 
        switch (m->type) {
        case FILE_BYTE:
-               return 1 * MULT;
+               val += 1 * MULT;
+               break;
 
        case FILE_SHORT:
        case FILE_LESHORT:
        case FILE_BESHORT:
-               return 2 * MULT;
+               val += 2 * MULT;
+               break;
 
        case FILE_LONG:
        case FILE_LELONG:
        case FILE_BELONG:
        case FILE_MELONG:
-               return 4 * MULT;
+               val += 4 * MULT;
+               break;
 
        case FILE_PSTRING:
        case FILE_STRING:
-               return m->vallen * MULT;
+               val += m->vallen * MULT;
+               break;
 
        case FILE_BESTRING16:
        case FILE_LESTRING16:
-               return m->vallen * MULT / 2;
+               val += m->vallen * MULT / 2;
+               break;
 
        case FILE_SEARCH:
        case FILE_REGEX:
-               return m->vallen;
+               val += m->vallen;
+               break;
 
        case FILE_DATE:
        case FILE_LEDATE:
@@ -348,19 +356,52 @@ apprentice_magic_strength(const struct magic *m)
        case FILE_LELDATE:
        case FILE_BELDATE:
        case FILE_MELDATE:
-               return 4 * MULT;
+               val += 4 * MULT;
+               break;
 
+       case FILE_QUAD:
+       case FILE_BEQUAD:
+       case FILE_LEQUAD:
        case FILE_QDATE:
        case FILE_LEQDATE:
        case FILE_BEQDATE:
        case FILE_QLDATE:
        case FILE_LEQLDATE:
        case FILE_BEQLDATE:
-               return 8 * MULT;
+               val += 8 * MULT;
+               break;
 
        default:
-               return 0;
+               val = 0;
+               (void)fprintf(stderr, "Bad type %d\n", m->type);
+               abort();
+       }
+
+       switch (m->reln) {
+       case 'x':       /* matches anything penalize */
+               val = 0;
+               break;
+
+       case '!':
+       case '=':       /* Exact match, prefer */
+               val += MULT;
+               break;
+
+       case '>':
+       case '<':       /* comparison match reduce strength */
+               val -= 2 * MULT;
+               break;
+
+       case '^':
+       case '&':       /* masking bits, we could count them too */
+               val -= MULT;
+               break;
+
+       default:
+               (void)fprintf(stderr, "Bad relation %c\n", m->reln);
+               abort();
        }
+       return val;
 }
 
 /*  
@@ -396,6 +437,7 @@ apprentice_file(struct magic_set *ms, struct magic **magicp, uint32_t *nmagicp,
        int errs = 0;
        struct magic_entry *marray;
        uint32_t marraycount, i, mentrycount = 0;
+       size_t lineno = 0;
 
        ms->flags |= MAGIC_CHECK;       /* Enable checks for parsed files */
 
@@ -410,7 +452,7 @@ apprentice_file(struct magic_set *ms, struct magic **magicp, uint32_t *nmagicp,
         maxmagic = MAXMAGIS;
        if ((marray = calloc(maxmagic, sizeof(*marray))) == NULL) {
                (void)fclose(f);
-               file_oomem(ms);
+               file_oomem(ms, maxmagic * sizeof(*marray));
                return -1;
        }
        marraycount = 0;
@@ -422,14 +464,18 @@ apprentice_file(struct magic_set *ms, struct magic **magicp, uint32_t *nmagicp,
        /* read and parse this file */
        for (ms->line = 1; fgets(line, BUFSIZ, f) != NULL; ms->line++) {
                size_t len;
-               if (line[0] == '#')     /* comment, do not parse */
-                       continue;
                len = strlen(line);
-               if (len < 2) /* null line, garbage, etc */
+               if (len == 0) /* null line, garbage, etc */
                        continue;
-               if (line[len - 1] == '\n')
+               if (line[len - 1] == '\n') {
+                       lineno++;
                        line[len - 1] = '\0'; /* delete newline */
-               if (parse(ms, &marray, &marraycount, line, action) != 0)
+               }
+               if (line[0] == '\0')    /* empty, do not parse */
+                       continue;
+               if (line[0] == '#')     /* comment, do not parse */
+                       continue;
+               if (parse(ms, &marray, &marraycount, line, lineno, action) != 0)
                        errs++;
        }
 
@@ -445,7 +491,7 @@ apprentice_file(struct magic_set *ms, struct magic **magicp, uint32_t *nmagicp,
                mentrycount += marray[i].cont_count;
 
        if ((*magicp = malloc(sizeof(**magicp) * mentrycount)) == NULL) {
-               file_oomem(ms);
+               file_oomem(ms, sizeof(**magicp) * mentrycount);
                errs++;
                goto out;
        }
@@ -538,7 +584,7 @@ file_signextend(struct magic_set *ms, struct magic *m, uint64_t v)
  */
 private int
 parse(struct magic_set *ms, struct magic_entry **mentryp, uint32_t *nmentryp, 
-    const char *line, int action)
+    const char *line, size_t lineno, int action)
 {
        size_t i;
        struct magic_entry *me;
@@ -569,7 +615,7 @@ parse(struct magic_set *ms, struct magic_entry **mentryp, uint32_t *nmentryp,
                        struct magic *nm;
                        size_t cnt = me->max_count + ALLOC_CHUNK;
                        if ((nm = realloc(me->mp, sizeof(*nm) * cnt)) == NULL) {
-                               file_oomem(ms);
+                               file_oomem(ms, sizeof(*nm) * cnt);
                                return -1;
                        }
                        me->mp = m = nm;
@@ -585,7 +631,7 @@ parse(struct magic_set *ms, struct magic_entry **mentryp, uint32_t *nmentryp,
                        maxmagic += ALLOC_INCR;
                        if ((mp = realloc(*mentryp, sizeof(*mp) * maxmagic)) ==
                            NULL) {
-                               file_oomem(ms);
+                               file_oomem(ms, sizeof(*mp) * maxmagic);
                                return -1;
                        }
                        (void)memset(&mp[*nmentryp], 0, sizeof(*mp) *
@@ -595,7 +641,7 @@ parse(struct magic_set *ms, struct magic_entry **mentryp, uint32_t *nmentryp,
                me = &(*mentryp)[*nmentryp];
                if (me->mp == NULL) {
                        if ((m = malloc(sizeof(*m) * ALLOC_CHUNK)) == NULL) {
-                               file_oomem(ms);
+                               file_oomem(ms, sizeof(*m) * ALLOC_CHUNK);
                                return -1;
                        }
                        me->mp = m;
@@ -606,6 +652,7 @@ parse(struct magic_set *ms, struct magic_entry **mentryp, uint32_t *nmentryp,
                m->cont_level = 0;
                me->cont_count = 1;
        }
+       m->lineno = lineno;
 
        if (m->cont_level != 0 && *l == '&') {
                 ++l;            /* step over */
@@ -1307,7 +1354,7 @@ apprentice_map(struct magic_set *ms, struct magic **magicp, uint32_t *nmagicp,
 #define RET    2
 #else
        if ((mm = malloc((size_t)st.st_size)) == NULL) {
-               file_oomem(ms);
+               file_oomem(ms, (size_t)st.st_size);
                goto error;
        }
        if (read(fd, mm, (size_t)st.st_size) != (size_t)st.st_size) {
@@ -1469,14 +1516,14 @@ swap8(uint64_t sv)
        uint32_t rv;
        uint8_t *s = (uint8_t *)(void *)&sv; 
        uint8_t *d = (uint8_t *)(void *)&rv; 
-       d[0] = s[7];
-       d[1] = s[6];
-       d[2] = s[5];
-       d[3] = s[4];
-       d[4] = s[3];
-       d[5] = s[2];
-       d[6] = s[1];
-       d[7] = s[0];
+       d[0] = s[3];
+       d[1] = s[2];
+       d[2] = s[1];
+       d[3] = s[0];
+       d[4] = s[7];
+       d[5] = s[6];
+       d[6] = s[5];
+       d[7] = s[4];
        return rv;
 }
 
index 30e04fa..f3fae24 100644 (file)
@@ -71,7 +71,7 @@
 #include "patchlevel.h"
 
 #ifndef        lint
-FILE_RCSID("@(#)$Id: file.c,v 1.102 2006/06/02 00:07:58 ian Exp $")
+FILE_RCSID("@(#)$Id: file.c,v 1.104 2006/11/25 17:28:54 christos Exp $")
 #endif /* lint */
 
 
@@ -81,7 +81,7 @@ FILE_RCSID("@(#)$Id: file.c,v 1.102 2006/06/02 00:07:58 ian Exp $")
 #define SYMLINKFLAG ""
 #endif
 
-# define USAGE  "Usage: %s [-bcik" SYMLINKFLAG "nNrsvz] [-f namefile] [-F separator] [-m magicfiles] file...\n       %s -C -m magicfiles\n"
+# define USAGE  "Usage: %s [-bcik" SYMLINKFLAG "nNrsvz0] [-f namefile] [-F separator] [-m magicfiles] file...\n       %s -C -m magicfiles\n"
 
 #ifndef MAXPATHLEN
 #define        MAXPATHLEN      512
@@ -90,7 +90,8 @@ FILE_RCSID("@(#)$Id: file.c,v 1.102 2006/06/02 00:07:58 ian Exp $")
 private int            /* Global command-line options          */
        bflag = 0,      /* brief output format                  */
        nopad = 0,      /* Don't pad output                     */
-       nobuffer = 0;   /* Do not buffer stdout                 */
+       nobuffer = 0,   /* Do not buffer stdout                 */
+       nulsep = 0;     /* Append '\0' to the separator         */
 
 private const char *magicfile = 0;     /* where the magic is   */
 private const char *default_magicfile = MAGIC;
@@ -127,7 +128,7 @@ main(int argc, char *argv[])
        char *home, *usermagic;
        struct stat sb;
        static const char hmagic[] = "/.magic";
-#define OPTSTRING      "bcCdf:F:hikLm:nNprsvz"
+#define OPTSTRING      "bcCdf:F:hikLm:nNprsvz0"
 #ifdef HAVE_GETOPT_LONG
        int longindex;
        static const struct option long_options[] =
@@ -155,6 +156,7 @@ main(int argc, char *argv[])
                {"no-pad", 0, 0, 'N'},
                {"special-files", 0, 0, 's'},
                {"compile", 0, 0, 'C'},
+               {"print0", 0, 0, '0'},
                {0, 0, 0, 0},
        };
 #endif
@@ -206,6 +208,9 @@ main(int argc, char *argv[])
                                help();
                        break;
 #endif
+               case '0':
+                       nulsep = 1;
+                       break;
                case 'b':
                        ++bflag;
                        break;
@@ -396,9 +401,15 @@ process(const char *inname, int wid)
        const char *type;
        int std_in = strcmp(inname, "-") == 0;
 
-       if (wid > 0 && !bflag)
-               (void)printf("%s%s%*s ", std_in ? "/dev/stdin" : inname,
-                   separator, (int) (nopad ? 0 : (wid - file_mbswidth(inname))), "");
+       if (wid > 0 && !bflag) {
+               (void)printf("%s", std_in ? "/dev/stdin" : inname);
+               if (nulsep)
+                       (void)puts('\0');
+               else
+                       (void)printf("%s", separator);
+               (void)printf("%*s ",
+                   (int) (nopad ? 0 : (wid - file_mbswidth(inname))), "");
+       }
 
        type = magic_file(magic, std_in ? NULL : inname);
        if (type == NULL)
index 1723ec7..bb2fc16 100644 (file)
@@ -27,7 +27,7 @@
  */
 /*
  * file.h - definitions for file(1) program
- * @(#)$Id: file.h,v 1.80 2006/10/31 20:57:45 christos Exp $
+ * @(#)$Id: file.h,v 1.83 2006/12/11 21:48:49 christos Exp $
  */
 
 #ifndef __file_h__
@@ -225,7 +225,7 @@ struct magic {
        /* Word 5 */
        int32_t in_offset;      /* offset from indirection */
        /* Word 6 */
-       uint32_t dummy4;
+       uint32_t lineno;        /* line number in magic file */
        /* Word 7,8 */
        uint64_t mask;  /* mask before comparison with value */
        /* Words 9-16 */
@@ -282,6 +282,7 @@ struct magic_set {
        char *pbuf;
        size_t psize;
     } o;
+    uint32_t offset;
     int error;
     int flags;
     int haderr;
@@ -306,7 +307,7 @@ protected uint64_t file_signextend(struct magic_set *, struct magic *, uint64_t)
 protected void file_delmagic(struct magic *, int type, size_t entries);
 protected void file_badread(struct magic_set *);
 protected void file_badseek(struct magic_set *);
-protected void file_oomem(struct magic_set *);
+protected void file_oomem(struct magic_set *, size_t);
 protected void file_error(struct magic_set *, int, const char *, ...);
 protected void file_magwarn(struct magic_set *, const char *, ...);
 protected void file_mdump(struct magic *);
index ea0a54c..824e3a0 100644 (file)
@@ -38,7 +38,7 @@
 #endif
 
 #ifndef        lint
-FILE_RCSID("@(#)$Id: funcs.c,v 1.22 2006/10/31 19:37:17 christos Exp $")
+FILE_RCSID("@(#)$Id: funcs.c,v 1.23 2006/12/11 21:48:49 christos Exp $")
 #endif /* lint */
 
 #ifndef HAVE_VSNPRINTF
@@ -60,7 +60,7 @@ file_printf(struct magic_set *ms, const char *fmt, ...)
        if ((len = vsnprintf(ms->o.ptr, ms->o.len, fmt, ap)) >= ms->o.len) {
                va_end(ap);
                if ((buf = realloc(ms->o.buf, len + 1024)) == NULL) {
-                       file_oomem(ms);
+                       file_oomem(ms, len + 1024);
                        return -1;
                }
                ms->o.ptr = buf + (ms->o.ptr - ms->o.buf);
@@ -102,9 +102,9 @@ file_error(struct magic_set *ms, int error, const char *f, ...)
 
 
 protected void
-file_oomem(struct magic_set *ms)
+file_oomem(struct magic_set *ms, size_t len)
 {
-       file_error(ms, errno, "cannot allocate memory");
+       file_error(ms, errno, "cannot allocate %zu bytes", len);
 }
 
 protected void
@@ -184,7 +184,7 @@ file_getbuffer(struct magic_set *ms)
        nsize = ms->o.len * 4 + 1;
        if (ms->o.psize < nsize) {
                if ((nbuf = realloc(ms->o.pbuf, nsize)) == NULL) {
-                       file_oomem(ms);
+                       file_oomem(ms, nsize);
                        return NULL;
                }
                ms->o.psize = nsize;
index f7a8c12..334732c 100644 (file)
@@ -1,11 +1,14 @@
 #define        FILE_VERSION_MAJOR      4
-#define        patchlevel              18
+#define        patchlevel              19
 
 /*
  * Patchlevel file for Ian Darwin's MAGIC command.
- * $Id: patchlevel.h,v 1.61 2006/10/31 21:18:09 christos Exp $
+ * $Id: patchlevel.h,v 1.62 2006/12/11 21:49:58 christos Exp $
  *
  * $Log: patchlevel.h,v $
+ * Revision 1.62  2006/12/11 21:49:58  christos
+ * time for 4.19
+ *
  * Revision 1.61  2006/10/31 21:18:09  christos
  * bump
  *
index e9cd7ab..28cca18 100644 (file)
@@ -41,7 +41,7 @@
 #include <time.h>
 
 #ifndef lint
-FILE_RCSID("@(#)$Id: print.c,v 1.54 2006/10/31 19:37:17 christos Exp $")
+FILE_RCSID("@(#)$Id: print.c,v 1.56 2006/12/08 20:31:07 christos Exp $")
 #endif  /* lint */
 
 #define SZOF(a)        (sizeof(a) / sizeof(a[0]))
@@ -52,7 +52,7 @@ file_mdump(struct magic *m)
 {
        private const char optyp[] = { FILE_OPS };
 
-       (void) fputc('[', stderr);
+       (void) fprintf(stderr, "[%zu", m->lineno);
        (void) fprintf(stderr, ">>>>>>>> %d" + 8 - (m->cont_level & 7),
                       m->offset);
 
@@ -79,7 +79,8 @@ file_mdump(struct magic *m)
                else
                        fputc('?', stderr);
                if (FILE_STRING != m->type || FILE_PSTRING != m->type)
-                       (void) fprintf(stderr, "%.8llx", m->mask);
+                       (void) fprintf(stderr, "%.8llx",
+                           (unsigned long long)m->mask);
                else {
                        if (m->mask & STRING_IGNORE_LOWERCASE) 
                                (void) fputc(CHAR_IGNORE_LOWERCASE, stderr);
@@ -108,7 +109,8 @@ file_mdump(struct magic *m)
                case FILE_BEQUAD:
                case FILE_LEQUAD:
                case FILE_QUAD:
-                       (void) fprintf(stderr, "%lld", m->value.q);
+                       (void) fprintf(stderr, "%lld",
+                           (unsigned long long)m->value.q);
                        break;
                case FILE_PSTRING:
                case FILE_STRING:
index 1ef1f2e..69318fa 100644 (file)
@@ -37,7 +37,7 @@
 #include "readelf.h"
 
 #ifndef lint
-FILE_RCSID("@(#)$Id: readelf.c,v 1.59 2006/10/31 19:37:17 christos Exp $")
+FILE_RCSID("@(#)$Id: readelf.c,v 1.61 2006/11/15 15:53:23 christos Exp $")
 #endif
 
 #ifdef ELFCORE
@@ -898,13 +898,8 @@ file_tryelf(struct magic_set *ms, int fd, const unsigned char *buf,
     size_t nbytes)
 {
        union {
-#if defined(__s390x__) || defined(__powerpc64__)
                int32_t l;
                char c[sizeof (int32_t)];
-#else
-               long l;
-               char c[sizeof (long)];
-#endif
        } u;
        int class;
        int swap;
index 894c05c..7725048 100644 (file)
@@ -39,7 +39,7 @@
 
 
 #ifndef        lint
-FILE_RCSID("@(#)$Id: softmagic.c,v 1.83 2006/10/31 19:37:17 christos Exp $")
+FILE_RCSID("@(#)$Id: softmagic.c,v 1.87 2006/12/11 21:48:49 christos Exp $")
 #endif /* lint */
 
 private int match(struct magic_set *, struct magic *, uint32_t,
@@ -50,7 +50,7 @@ private int magiccheck(struct magic_set *, union VALUETYPE *, struct magic *);
 private int32_t mprint(struct magic_set *, union VALUETYPE *, struct magic *);
 private void mdebug(uint32_t, const char *, size_t);
 private int mcopy(struct magic_set *, union VALUETYPE *, int, int,
-    const unsigned char *, size_t, size_t);
+    const unsigned char *, uint32_t, size_t);
 private int mconvert(struct magic_set *, union VALUETYPE *, struct magic *);
 private int check_mem(struct magic_set *, unsigned int);
 private int print_sep(struct magic_set *, int);
@@ -68,9 +68,10 @@ protected int
 file_softmagic(struct magic_set *ms, const unsigned char *buf, size_t nbytes)
 {
        struct mlist *ml;
+       int rv;
        for (ml = ms->mlist->next; ml != ms->mlist; ml = ml->next)
-               if (match(ms, ml->magic, ml->nmagic, buf, nbytes))
-                       return 1;
+               if ((rv = match(ms, ml->magic, ml->nmagic, buf, nbytes)) != 0)
+                       return rv;
 
        return 0;
 }
@@ -113,16 +114,19 @@ match(struct magic_set *ms, struct magic *magic, uint32_t nmagic,
        int32_t oldoff = 0;
        int returnval = 0; /* if a match is found it is set to 1*/
        int firstline = 1; /* a flag to print X\n  X\n- X */
+       int printed_something = 0;
 
        if (check_mem(ms, cont_level) == -1)
                return -1;
 
        for (magindex = 0; magindex < nmagic; magindex++) {
                /* if main entry matches, print it... */
+               ms->offset = magic[magindex].offset;
                int flush = !mget(ms, &p, s, &magic[magindex], nbytes,
                    cont_level);
                if (flush) {
-                       if (magic[magindex].reln == '!') flush = 0;
+                       if (magic[magindex].reln == '!')
+                               flush = 0;
                } else {        
                        switch (magiccheck(ms, &p, &magic[magindex])) {
                        case -1:
@@ -151,6 +155,7 @@ match(struct magic_set *ms, struct magic *magic, uint32_t nmagic,
                 */
                if (magic[magindex].desc[0]) {
                        need_separator = 1;
+                       printed_something = 1;
                        if (print_sep(ms, firstline) == -1)
                                return -1;
                }
@@ -174,16 +179,16 @@ match(struct magic_set *ms, struct magic *magic, uint32_t nmagic,
                                 */
                                cont_level = magic[magindex].cont_level;
                        }
-                       oldoff = magic[magindex].offset;
+                       ms->offset = magic[magindex].offset;
                        if (magic[magindex].flag & OFFADD) {
-                               magic[magindex].offset +=
+                               ms->offset +=
                                    ms->c.off[cont_level - 1];
                        }
 
                        flush = !mget(ms, &p, s, &magic[magindex], nbytes,
                            cont_level);
                        if (flush && magic[magindex].reln != '!')
-                               goto done;
+                               continue;
                                
                        switch (flush ? 1 : magiccheck(ms, &p, &magic[magindex])) {
                        case -1:
@@ -196,6 +201,7 @@ match(struct magic_set *ms, struct magic *magic, uint32_t nmagic,
                                 * make sure that we have a separator first.
                                 */
                                if (magic[magindex].desc[0]) {
+                                       printed_something = 1;
                                        if (print_sep(ms, firstline) == -1)
                                                return -1;
                                }
@@ -228,12 +234,11 @@ match(struct magic_set *ms, struct magic *magic, uint32_t nmagic,
                                if (check_mem(ms, ++cont_level) == -1)
                                        return -1;
                        }
-done:
-                       magic[magindex].offset = oldoff;
                }
                firstline = 0;
-               returnval = 1;
-               if ((ms->flags & MAGIC_CONTINUE) == 0) {
+               if (printed_something)
+                       returnval = 1;
+               if ((ms->flags & MAGIC_CONTINUE) == 0 && printed_something) {
                        return 1; /* don't keep searching */
                }                       
        }
@@ -252,7 +257,7 @@ check_mem(struct magic_set *ms, unsigned int level)
        ms->c.off = (ms->c.off == NULL) ? malloc(len) : realloc(ms->c.off, len);
        if (ms->c.off != NULL)
                return 0;
-       file_oomem(ms);
+       file_oomem(ms, len);
        return -1;
 }
 
@@ -304,7 +309,7 @@ mprint(struct magic_set *ms, union VALUETYPE *p, struct magic *m)
                                return -1;
                        break;
                }
-               t = m->offset + sizeof(char);
+               t = ms->offset + sizeof(char);
                break;
 
        case FILE_SHORT:
@@ -315,7 +320,8 @@ mprint(struct magic_set *ms, union VALUETYPE *p, struct magic *m)
                case -1:
                        return -1;
                case 1:
-                       if (snprintf(buf, sizeof(buf), "%hu", (unsigned short)v) < 0)
+                       if (snprintf(buf, sizeof(buf), "%hu",
+                           (unsigned short)v) < 0)
                                return -1;
                        if (file_printf(ms, m->desc, buf) == -1)
                                return -1;
@@ -325,7 +331,7 @@ mprint(struct magic_set *ms, union VALUETYPE *p, struct magic *m)
                                return -1;
                        break;
                }
-               t = m->offset + sizeof(short);
+               t = ms->offset + sizeof(short);
                break;
 
        case FILE_LONG:
@@ -347,7 +353,7 @@ mprint(struct magic_set *ms, union VALUETYPE *p, struct magic *m)
                                return -1;
                        break;
                }
-               t = m->offset + sizeof(int32_t);
+               t = ms->offset + sizeof(int32_t);
                break;
 
        case FILE_QUAD:
@@ -356,7 +362,7 @@ mprint(struct magic_set *ms, union VALUETYPE *p, struct magic *m)
                v = file_signextend(ms, m, p->q);
                if (file_printf(ms, m->desc, (uint64_t) v) == -1)
                        return -1;
-               t = m->offset + sizeof(int64_t);
+               t = ms->offset + sizeof(int64_t);
                break;
        case FILE_STRING:
        case FILE_PSTRING:
@@ -365,7 +371,7 @@ mprint(struct magic_set *ms, union VALUETYPE *p, struct magic *m)
                if (m->reln == '=' || m->reln == '!') {
                        if (file_printf(ms, m->desc, m->value.s) == -1)
                                return -1;
-                       t = m->offset + m->vallen;
+                       t = ms->offset + m->vallen;
                }
                else {
                        if (*m->value.s == '\0') {
@@ -375,7 +381,7 @@ mprint(struct magic_set *ms, union VALUETYPE *p, struct magic *m)
                        }
                        if (file_printf(ms, m->desc, p->s) == -1)
                                return -1;
-                       t = m->offset + strlen(p->s);
+                       t = ms->offset + strlen(p->s);
                }
                break;
 
@@ -385,7 +391,7 @@ mprint(struct magic_set *ms, union VALUETYPE *p, struct magic *m)
        case FILE_MEDATE:
                if (file_printf(ms, m->desc, file_fmttime(p->l, 1)) == -1)
                        return -1;
-               t = m->offset + sizeof(time_t);
+               t = ms->offset + sizeof(time_t);
                break;
 
        case FILE_LDATE:
@@ -394,7 +400,7 @@ mprint(struct magic_set *ms, union VALUETYPE *p, struct magic *m)
        case FILE_MELDATE:
                if (file_printf(ms, m->desc, file_fmttime(p->l, 0)) == -1)
                        return -1;
-               t = m->offset + sizeof(time_t);
+               t = ms->offset + sizeof(time_t);
                break;
 
        case FILE_QDATE:
@@ -403,7 +409,7 @@ mprint(struct magic_set *ms, union VALUETYPE *p, struct magic *m)
                if (file_printf(ms, m->desc, file_fmttime((uint32_t)p->q, 1))
                    == -1)
                        return -1;
-               t = m->offset + sizeof(uint64_t);
+               t = ms->offset + sizeof(uint64_t);
                break;
 
        case FILE_QLDATE:
@@ -412,19 +418,19 @@ mprint(struct magic_set *ms, union VALUETYPE *p, struct magic *m)
                if (file_printf(ms, m->desc, file_fmttime((uint32_t)p->q, 0))
                    == -1)
                        return -1;
-               t = m->offset + sizeof(uint64_t);
+               t = ms->offset + sizeof(uint64_t);
                break;
 
        case FILE_REGEX:
                if (file_printf(ms, m->desc, p->s) == -1)
                        return -1;
-               t = m->offset + strlen(p->s);
+               t = ms->offset + strlen(p->s);
                break;
 
        case FILE_SEARCH:
                if (file_printf(ms, m->desc, m->value.s) == -1)
                        return -1;
-               t = m->offset + m->vallen;
+               t = ms->offset + m->vallen;
                break;
 
        default:
@@ -610,7 +616,7 @@ mdebug(uint32_t offset, const char *str, size_t len)
 
 private int
 mcopy(struct magic_set *ms, union VALUETYPE *p, int type, int indir,
-    const unsigned char *s, size_t offset, size_t nbytes)
+    const unsigned char *s, uint32_t offset, size_t nbytes)
 {
        if (type == FILE_REGEX && indir == 0) {
                /*
@@ -624,7 +630,7 @@ mcopy(struct magic_set *ms, union VALUETYPE *p, int type, int indir,
                        return 0;
                }
                if ((p->search.buf = strdup((const char *)s)) == NULL) {
-                       file_oomem(ms);
+                       file_oomem(ms, strlen((const char *)s));
                        return -1;
                }
                for (b = p->search.buf; offset && 
@@ -692,7 +698,7 @@ private int
 mget(struct magic_set *ms, union VALUETYPE *p, const unsigned char *s,
     struct magic *m, size_t nbytes, unsigned int cont_level)
 {
-       uint32_t offset = m->offset;
+       uint32_t offset = ms->offset;
 
        if (mcopy(ms, p, m->type, m->flag & INDIR, s, offset, nbytes) == -1)
                return -1;
@@ -1169,7 +1175,7 @@ mget(struct magic_set *ms, union VALUETYPE *p, const unsigned char *s,
                if (m->flag & INDIROFFADD) offset += ms->c.off[cont_level-1];
                if (mcopy(ms, p, m->type, 0, s, offset, nbytes) == -1)
                        return -1;
-               m->offset = offset;
+               ms->offset = offset;
 
                if ((ms->flags & MAGIC_DEBUG) != 0) {
                        mdebug(offset, (char *)(void *)p,
@@ -1381,17 +1387,21 @@ magiccheck(struct magic_set *ms, union VALUETYPE *p, struct magic *m)
                        while (len-- > 0 && (v = *b++ - *a++) == 0)
                                continue;
                        if (!v) {
-                               m->offset += range - 1;
+                               ms->offset += range - 1;
                                break;
                        }
-                       if (range + slen >= p->search.buflen)
+                       if (range + slen >= p->search.buflen) {
+                               v = 1;
                                break;
+                       }
                        len = slen;
                        a = (unsigned char*)m->value.s;
                        b = (unsigned char*)p->search.buf + range;
                }
                free(p->search.buf);
                p->search.buf = NULL;
+               if (v)
+                       return 0;
                break;
        }
        default:
@@ -1405,7 +1415,8 @@ magiccheck(struct magic_set *ms, union VALUETYPE *p, struct magic *m)
        switch (m->reln) {
        case 'x':
                if ((ms->flags & MAGIC_DEBUG) != 0)
-                       (void) fprintf(stderr, "%llu == *any* = 1\n", v);
+                       (void) fprintf(stderr, "%llu == *any* = 1\n",
+                           (unsigned long long)v);
                matched = 1;
                break;
 
@@ -1413,14 +1424,16 @@ magiccheck(struct magic_set *ms, union VALUETYPE *p, struct magic *m)
                matched = v != l;
                if ((ms->flags & MAGIC_DEBUG) != 0)
                        (void) fprintf(stderr, "%llu != %llu = %d\n",
-                                      v, l, matched);
+                           (unsigned long long)v, (unsigned long long)l,
+                           matched);
                break;
 
        case '=':
                matched = v == l;
                if ((ms->flags & MAGIC_DEBUG) != 0)
                        (void) fprintf(stderr, "%llu == %llu = %d\n",
-                                      v, l, matched);
+                           (unsigned long long)v, (unsigned long long)l,
+                           matched);
                break;
 
        case '>':
@@ -1428,13 +1441,14 @@ magiccheck(struct magic_set *ms, union VALUETYPE *p, struct magic *m)
                        matched = v > l;
                        if ((ms->flags & MAGIC_DEBUG) != 0)
                                (void) fprintf(stderr, "%llu > %llu = %d\n",
-                                              v, l, matched);
+                                   (unsigned long long)v,
+                                   (unsigned long long)l, matched);
                }
                else {
                        matched = (int32_t) v > (int32_t) l;
                        if ((ms->flags & MAGIC_DEBUG) != 0)
                                (void) fprintf(stderr, "%lld > %lld = %d\n",
-                                              v, l, matched);
+                                   (long long)v, (long long)l, matched);
                }
                break;
 
@@ -1443,13 +1457,14 @@ magiccheck(struct magic_set *ms, union VALUETYPE *p, struct magic *m)
                        matched = v < l;
                        if ((ms->flags & MAGIC_DEBUG) != 0)
                                (void) fprintf(stderr, "%llu < %llu = %d\n",
-                                              v, l, matched);
+                                   (unsigned long long)v,
+                                   (unsigned long long)l, matched);
                }
                else {
                        matched = (int32_t) v < (int32_t) l;
                        if ((ms->flags & MAGIC_DEBUG) != 0)
                                (void) fprintf(stderr, "%lld < %lld = %d\n",
-                                              v, l, matched);
+                                      (long long)v, (long long)l, matched);
                }
                break;
 
@@ -1457,14 +1472,16 @@ magiccheck(struct magic_set *ms, union VALUETYPE *p, struct magic *m)
                matched = (v & l) == l;
                if ((ms->flags & MAGIC_DEBUG) != 0)
                        (void) fprintf(stderr, "((%llx & %llx) == %llx) = %d\n",
-                                      v, l, l, matched);
+                           (unsigned long long)v, (unsigned long long)l,
+                           (unsigned long long)l, matched);
                break;
 
        case '^':
                matched = (v & l) != l;
                if ((ms->flags & MAGIC_DEBUG) != 0)
                        (void) fprintf(stderr, "((%llx & %llx) != %llx) = %d\n",
-                                      v, l, l, matched);
+                           (unsigned long long)v, (unsigned long long)l,
+                           (unsigned long long)l, matched);
                break;
 
        default: