Author: delphij
Date: Sat May 14 08:52:37 2016
New Revision: 299736
URL: https://svnweb.freebsd.org/changeset/base/299736

Log:
  MFV r299716: file 5.27
  
  MFC after:    2 weeks
  Relnotes:     yes

Modified:
  head/contrib/file/ChangeLog
  head/contrib/file/configure
  head/contrib/file/configure.ac
  head/contrib/file/magic/Magdir/archive
  head/contrib/file/magic/Magdir/commands
  head/contrib/file/magic/Magdir/console
  head/contrib/file/magic/Magdir/os2
  head/contrib/file/magic/Magdir/xenix
  head/contrib/file/src/ascmagic.c
  head/contrib/file/src/cdf.c
  head/contrib/file/src/cdf.h
  head/contrib/file/src/compress.c
  head/contrib/file/src/der.c
  head/contrib/file/src/magic.c
  head/contrib/file/src/magic.h
  head/contrib/file/src/magic.h.in
  head/contrib/file/src/readcdf.c
  head/contrib/file/src/softmagic.c
  head/contrib/file/tests/Makefile.am
  head/contrib/file/tests/Makefile.in
  head/lib/libmagic/config.h
Directory Properties:
  head/contrib/file/   (props changed)

Modified: head/contrib/file/ChangeLog
==============================================================================
--- head/contrib/file/ChangeLog Sat May 14 08:36:37 2016        (r299735)
+++ head/contrib/file/ChangeLog Sat May 14 08:52:37 2016        (r299736)
@@ -1,6 +1,19 @@
+2016-05-13  12:00  Christos Zoulas <[email protected]>
+       
+       * release 5.27
+
+2016-04-18   9:35  Christos Zoulas <[email protected]>
+       
+       * Errors comparing DER entries or computing offsets
+         are just indications of malformed non-DER files.
+         Don't print them.
+       * Offset comparison was off-by-one.
+       * Fix compression code (Werner Fink)
+       * Put new bytes constant in the right file (not the generated one)
+
 2016-04-16  18:34  Christos Zoulas <[email protected]>
        
-       * release 5.25
+       * release 5.26
 
 2016-03-31  13:50  Christos Zoulas <[email protected]>
 

Modified: head/contrib/file/configure
==============================================================================
--- head/contrib/file/configure Sat May 14 08:36:37 2016        (r299735)
+++ head/contrib/file/configure Sat May 14 08:52:37 2016        (r299736)
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for file 5.26.
+# Generated by GNU Autoconf 2.69 for file 5.27.
 #
 # Report bugs to <[email protected]>.
 #
@@ -590,8 +590,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='file'
 PACKAGE_TARNAME='file'
-PACKAGE_VERSION='5.26'
-PACKAGE_STRING='file 5.26'
+PACKAGE_VERSION='5.27'
+PACKAGE_STRING='file 5.27'
 PACKAGE_BUGREPORT='[email protected]'
 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.26 to adapt to many kinds of systems.
+\`configure' configures file 5.27 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.26:";;
+     short | recursive ) echo "Configuration of file 5.27:";;
    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.26
+file configure 5.27
 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.26, which was
+It was created by file $as_me 5.27, 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.26'
+ VERSION='5.27'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -15049,7 +15049,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_wri
 # 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.26, which was
+This file was extended by file $as_me 5.27, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -15115,7 +15115,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.26
+file config.status 5.27
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 

Modified: head/contrib/file/configure.ac
==============================================================================
--- head/contrib/file/configure.ac      Sat May 14 08:36:37 2016        
(r299735)
+++ head/contrib/file/configure.ac      Sat May 14 08:52:37 2016        
(r299736)
@@ -1,5 +1,5 @@
 dnl Process this file with autoconf to produce a configure script.
-AC_INIT([file],[5.26],[[email protected]])
+AC_INIT([file],[5.27],[[email protected]])
 AM_INIT_AUTOMAKE([subdir-objects foreign])
 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
 

Modified: head/contrib/file/magic/Magdir/archive
==============================================================================
--- head/contrib/file/magic/Magdir/archive      Sat May 14 08:36:37 2016        
(r299735)
+++ head/contrib/file/magic/Magdir/archive      Sat May 14 08:52:37 2016        
(r299736)
@@ -1,5 +1,5 @@
 #------------------------------------------------------------------------------
-# $File: archive,v 1.102 2016/01/11 20:59:24 christos Exp $
+# $File: archive,v 1.103 2016/05/05 17:07:40 christos Exp $
 # archive:  file(1) magic for archive formats (see also "msdos" for self-
 #           extracting compressed archives)
 #
@@ -891,6 +891,14 @@
 >(26.s+30)     leshort 0xcafe          Java archive data (JAR)
 !:mime application/java-archive
 
+# iOS App
+>(26.s+30)     leshort !0xcafe
+>>26           string  !\x8\0\0\0mimetype
+>>>30          string  Payload/
+>>>>38         search/64       .app/   iOS App
+!:mime application/x-ios-app
+
+
 # Generic zip archives (Greg Roelofs, c/o [email protected])
 #   Next line excludes specialized formats:
 >(26.s+30)     leshort !0xcafe

Modified: head/contrib/file/magic/Magdir/commands
==============================================================================
--- head/contrib/file/magic/Magdir/commands     Sat May 14 08:36:37 2016        
(r299735)
+++ head/contrib/file/magic/Magdir/commands     Sat May 14 08:52:37 2016        
(r299736)
@@ -1,6 +1,6 @@
 
 #------------------------------------------------------------------------------
-# $File: commands,v 1.53 2016/02/23 12:35:20 christos Exp $
+# $File: commands,v 1.54 2016/04/19 13:40:02 christos Exp $
 # commands:  file(1) magic for various shells and interpreters
 #
 #0     string/w        :                       shell archive or script for 
antique kernel text
@@ -101,7 +101,7 @@
 0      string  =<?php
 >5     regex   [\ \n]
 >>6    string  /*\ Smarty\ version             Smarty compiled template
->24    regex   [0-9.]+                         \b, version %s
+>>>24  regex   [0-9.]+                         \b, version %s
 !:mime text/x-php
 
 0      string          Zend\x00                PHP script Zend Optimizer data

Modified: head/contrib/file/magic/Magdir/console
==============================================================================
--- head/contrib/file/magic/Magdir/console      Sat May 14 08:36:37 2016        
(r299735)
+++ head/contrib/file/magic/Magdir/console      Sat May 14 08:52:37 2016        
(r299736)
@@ -1,6 +1,6 @@
 
 #------------------------------------------------------------------------------
-# $File: console,v 1.24 2016/03/23 15:29:20 christos Exp $
+# $File: console,v 1.25 2016/04/18 20:22:10 christos Exp $
 # Console game magic
 # Toby Deshane <[email protected]>
 
@@ -53,7 +53,7 @@
 # so most of the data isn't easily parseable.
 #
 0      string  UNIF
-4      lelong  <16     UNIF v%d format NES ROM image
+>4     lelong  <16     UNIF v%d format NES ROM image
 
 #------------------------------------------------------------------------------
 # gameboy: file(1) magic for the Nintendo (Color) Gameboy raw ROM format

Modified: head/contrib/file/magic/Magdir/os2
==============================================================================
--- head/contrib/file/magic/Magdir/os2  Sat May 14 08:36:37 2016        
(r299735)
+++ head/contrib/file/magic/Magdir/os2  Sat May 14 08:52:37 2016        
(r299736)
@@ -1,12 +1,12 @@
 
 #------------------------------------------------------------------------------
-# $File: os2,v 1.8 2015/01/05 00:17:13 christos Exp $
+# $File: os2,v 1.9 2016/05/11 15:51:57 christos Exp $
 # os2:  file(1) magic for OS/2 files
 #
 
 # Provided 1998/08/22 by
 # David Mediavilla <[email protected]>
-1      search/1        InternetShortcut        MS Windows 95 Internet shortcut 
text
+1      search/100      InternetShortcut        MS Windows 95 Internet shortcut 
text
 >17    search/100      URL=                    (URL=<
 >>&0   string          x                       \b%s>)
 

Modified: head/contrib/file/magic/Magdir/xenix
==============================================================================
--- head/contrib/file/magic/Magdir/xenix        Sat May 14 08:36:37 2016        
(r299735)
+++ head/contrib/file/magic/Magdir/xenix        Sat May 14 08:52:37 2016        
(r299736)
@@ -1,6 +1,6 @@
 
 #------------------------------------------------------------------------------
-# $File: xenix,v 1.9 2009/09/19 16:28:13 christos Exp $
+# $File: xenix,v 1.10 2016/04/19 18:14:19 christos Exp $
 # xenix:  file(1) magic for Microsoft Xenix
 #
 # "Middle model" stuff, and "Xenix 8086 relocatable or 80286 small
@@ -12,7 +12,26 @@
 # XXX - "x.out" collides with PDP-11 archives
 #
 0      string          core            core file (Xenix)
-0      byte            0x80            8086 relocatable (Microsoft)
+# URL: http://www.polarhome.com/service/man/?qf=86rel&tf=2&of=Xenix
+# Reference: http://www.azillionmonkeys.com/qed/Omfg.pdf
+# Update: Joerg Jenderek
+# recordtype~TranslatorHEADerRecord
+0      byte            0x80            
+# GRR: line above is too general as it catches also Extensible storage engine 
DataBase
+# skip examples like GENA.SND Switch.Snd by looking for record length maximal 
1024-3
+>1     uleshort        <1022           
+# skip examples like GAME.PICTURE Strange.Pic by looking for positiv record 
length
+>>1    uleshort        >0              
+# skip examples like Xtable.Data FRACTAL.GEN SHR.VIEW by looking for positiv 
string length
+>>>3   ubyte           >0              
+# skip examples like OMBRE.6 with "UUUUUU" by looking for filename like 
"hello.c"
+>>>>4  regex   [a-zA-Z_/]{1,8}[.]      8086 relocatable (Microsoft)
+#!:mime        application/octet-stream
+!:mime application/x-object
+!:ext  o/a
+>>>>>3 pstring         x               \b, "%s"
+# checksum
+#>>>>>(3.b+4)  ubyte   x               \b, checksum 0x%2.2x
 0      leshort         0xff65          x.out
 >2     string          __.SYMDEF        randomized
 >0     byte            x               archive

Modified: head/contrib/file/src/ascmagic.c
==============================================================================
--- head/contrib/file/src/ascmagic.c    Sat May 14 08:36:37 2016        
(r299735)
+++ head/contrib/file/src/ascmagic.c    Sat May 14 08:52:37 2016        
(r299736)
@@ -35,7 +35,7 @@
 #include "file.h"
 
 #ifndef        lint
-FILE_RCSID("@(#)$File: ascmagic.c,v 1.94 2016/03/31 17:51:12 christos Exp $")
+FILE_RCSID("@(#)$File: ascmagic.c,v 1.95 2016/05/03 16:10:37 christos Exp $")
 #endif /* lint */
 
 #include "magic.h"
@@ -79,9 +79,6 @@ file_ascmagic(struct magic_set *ms, cons
        const char *code_mime = NULL;
        const char *type = NULL;
 
-       if (ms->flags & (MAGIC_APPLE|MAGIC_EXTENSION))
-               return 0;
-
        nbytes = trim_nuls(buf, nbytes);
 
        /* If file doesn't look like any sort of text, give up. */
@@ -123,9 +120,6 @@ file_ascmagic_with_encoding(struct magic
        size_t last_line_end = (size_t)-1;
        int has_long_lines = 0;
 
-       if (ms->flags & (MAGIC_APPLE|MAGIC_EXTENSION))
-               return 0;
-
        nbytes = trim_nuls(buf, nbytes);
 
        /* If we have fewer than 2 bytes, give up. */
@@ -150,7 +144,11 @@ file_ascmagic_with_encoding(struct magic
                    (size_t)(utf8_end - utf8_buf), NULL, NULL,
                    TEXTTEST, text)) == 0)
                        rv = -1;
+               if ((ms->flags & (MAGIC_APPLE|MAGIC_EXTENSION)))
+                       return rv == -1 ? 0 : 1;
        }
+       if ((ms->flags & (MAGIC_APPLE|MAGIC_EXTENSION)))
+               return 0;
 
        /* Now try to discover other details about the file. */
        for (i = 0; i < ulen; i++) {

Modified: head/contrib/file/src/cdf.c
==============================================================================
--- head/contrib/file/src/cdf.c Sat May 14 08:36:37 2016        (r299735)
+++ head/contrib/file/src/cdf.c Sat May 14 08:52:37 2016        (r299736)
@@ -35,7 +35,7 @@
 #include "file.h"
 
 #ifndef lint
-FILE_RCSID("@(#)$File: cdf.c,v 1.76 2015/02/28 00:18:02 christos Exp $")
+FILE_RCSID("@(#)$File: cdf.c,v 1.80 2016/05/06 15:17:10 christos Exp $")
 #endif
 
 #include <assert.h>
@@ -267,13 +267,32 @@ cdf_unpack_dir(cdf_directory_t *d, char 
 }
 
 static int
+cdf_zero_stream(cdf_stream_t *scn)
+{
+       scn->sst_len = 0;
+       scn->sst_dirlen = 0;
+       scn->sst_ss = 0;
+       free(scn->sst_tab);
+       scn->sst_tab = NULL;
+       return -1;
+}
+
+static size_t
+cdf_check_stream(const cdf_stream_t *sst, const cdf_header_t *h)
+{
+       size_t ss = sst->sst_dirlen < h->h_min_size_standard_stream ?
+           CDF_SHORT_SEC_SIZE(h) : CDF_SEC_SIZE(h);
+       assert(ss == sst->sst_ss);
+       return sst->sst_ss;
+}
+
+static int
 cdf_check_stream_offset(const cdf_stream_t *sst, const cdf_header_t *h,
     const void *p, size_t tail, int line)
 {
        const char *b = (const char *)sst->sst_tab;
        const char *e = ((const char *)p) + tail;
-       size_t ss = sst->sst_dirlen < h->h_min_size_standard_stream ?
-           CDF_SHORT_SEC_SIZE(h) : CDF_SEC_SIZE(h);
+       size_t ss = cdf_check_stream(sst, h);
        /*LINTED*/(void)&line;
        if (e >= b && (size_t)(e - b) <= ss * sst->sst_len)
                return 0;
@@ -290,10 +309,8 @@ cdf_read(const cdf_info_t *info, off_t o
 {
        size_t siz = (size_t)off + len;
 
-       if ((off_t)(off + len) != (off_t)siz) {
-               errno = EINVAL;
-               return -1;
-       }
+       if ((off_t)(off + len) != (off_t)siz)
+               goto out;
 
        if (info->i_buf != NULL && info->i_len >= siz) {
                (void)memcpy(buf, &info->i_buf[off], len);
@@ -301,12 +318,15 @@ cdf_read(const cdf_info_t *info, off_t o
        }
 
        if (info->i_fd == -1)
-               return -1;
+               goto out;
 
        if (pread(info->i_fd, buf, len, off) != (ssize_t)len)
                return -1;
 
        return (ssize_t)len;
+out:
+       errno = EINVAL;
+       return -1;
 }
 
 int
@@ -363,11 +383,14 @@ cdf_read_short_sector(const cdf_stream_t
                DPRINTF(("Out of bounds read %" SIZE_T_FORMAT "u > %"
                    SIZE_T_FORMAT "u\n",
                    pos + len, CDF_SEC_SIZE(h) * sst->sst_len));
-               return -1;
+               goto out;
        }
        (void)memcpy(((char *)buf) + offs,
            ((const char *)sst->sst_tab) + pos, len);
        return len;
+out:
+       errno = EFTYPE;
+       return -1;
 }
 
 /*
@@ -421,8 +444,7 @@ cdf_read_sat(const cdf_info_t *info, cdf
                        goto out;
                if (j >= CDF_LOOP_LIMIT) {
                        DPRINTF(("Reading master sector loop limit"));
-                       errno = EFTYPE;
-                       goto out2;
+                       goto out3;
                }
                if (cdf_read_sector(info, msa, 0, ss, h, mid) != (ssize_t)ss) {
                        DPRINTF(("Reading master sector %d", mid));
@@ -435,8 +457,7 @@ cdf_read_sat(const cdf_info_t *info, cdf
                        if (i >= sat->sat_len) {
                            DPRINTF(("Out of bounds reading MSA %" SIZE_T_FORMAT
                                "u >= %" SIZE_T_FORMAT "u", i, sat->sat_len));
-                           errno = EFTYPE;
-                           goto out2;
+                           goto out3;
                        }
                        if (cdf_read_sector(info, sat->sat_tab, ss * i, ss, h,
                            sec) != (ssize_t)ss) {
@@ -451,6 +472,8 @@ out:
        sat->sat_len = i;
        free(msa);
        return 0;
+out3:
+       errno = EFTYPE;
 out2:
        free(msa);
 out1:
@@ -476,23 +499,24 @@ cdf_count_chain(const cdf_sat_t *sat, cd
                DPRINTF((" %d", sid));
                if (j >= CDF_LOOP_LIMIT) {
                        DPRINTF(("Counting chain loop limit"));
-                       errno = EFTYPE;
-                       return (size_t)-1;
+                       goto out;
                }
                if (sid >= maxsector) {
                        DPRINTF(("Sector %d >= %d\n", sid, maxsector));
-                       errno = EFTYPE;
-                       return (size_t)-1;
+                       goto out;
                }
                sid = CDF_TOLE4((uint32_t)sat->sat_tab[sid]);
        }
        if (i == 0) {
                DPRINTF((" none, sid: %d\n", sid));
-               return (size_t)-1;
+               goto out;
 
        }
        DPRINTF(("\n"));
        return i;
+out:
+       errno = EFTYPE;
+       return (size_t)-1;
 }
 
 int
@@ -501,27 +525,27 @@ cdf_read_long_sector_chain(const cdf_inf
 {
        size_t ss = CDF_SEC_SIZE(h), i, j;
        ssize_t nr;
+       scn->sst_tab = NULL;
        scn->sst_len = cdf_count_chain(sat, sid, ss);
        scn->sst_dirlen = len;
+       scn->sst_ss = ss;
 
        if (scn->sst_len == (size_t)-1)
-               return -1;
+               goto out;
 
        scn->sst_tab = calloc(scn->sst_len, ss);
        if (scn->sst_tab == NULL)
-               return -1;
+               return cdf_zero_stream(scn);
 
        for (j = i = 0; sid >= 0; i++, j++) {
                if (j >= CDF_LOOP_LIMIT) {
                        DPRINTF(("Read long sector chain loop limit"));
-                       errno = EFTYPE;
                        goto out;
                }
                if (i >= scn->sst_len) {
                        DPRINTF(("Out of bounds reading long sector chain "
                            "%" SIZE_T_FORMAT "u > %" SIZE_T_FORMAT "u\n", i,
                            scn->sst_len));
-                       errno = EFTYPE;
                        goto out;
                }
                if ((nr = cdf_read_sector(info, scn->sst_tab, i * ss, ss, h,
@@ -537,8 +561,8 @@ cdf_read_long_sector_chain(const cdf_inf
        }
        return 0;
 out:
-       free(scn->sst_tab);
-       return -1;
+       errno = EFTYPE;
+       return cdf_zero_stream(scn);
 }
 
 int
@@ -547,27 +571,27 @@ cdf_read_short_sector_chain(const cdf_he
     cdf_secid_t sid, size_t len, cdf_stream_t *scn)
 {
        size_t ss = CDF_SHORT_SEC_SIZE(h), i, j;
-       scn->sst_len = cdf_count_chain(ssat, sid, CDF_SEC_SIZE(h));
+       scn->sst_tab = NULL;
+       scn->sst_len = cdf_count_chain(ssat, sid, ss);
        scn->sst_dirlen = len;
+       scn->sst_ss = ss;
 
        if (sst->sst_tab == NULL || scn->sst_len == (size_t)-1)
-               return -1;
+               goto out;
 
        scn->sst_tab = calloc(scn->sst_len, ss);
        if (scn->sst_tab == NULL)
-               return -1;
+               return cdf_zero_stream(scn);
 
        for (j = i = 0; sid >= 0; i++, j++) {
                if (j >= CDF_LOOP_LIMIT) {
                        DPRINTF(("Read short sector chain loop limit"));
-                       errno = EFTYPE;
                        goto out;
                }
                if (i >= scn->sst_len) {
                        DPRINTF(("Out of bounds reading short sector chain "
                            "%" SIZE_T_FORMAT "u > %" SIZE_T_FORMAT "u\n",
                            i, scn->sst_len));
-                       errno = EFTYPE;
                        goto out;
                }
                if (cdf_read_short_sector(sst, scn->sst_tab, i * ss, ss, h,
@@ -579,8 +603,8 @@ cdf_read_short_sector_chain(const cdf_he
        }
        return 0;
 out:
-       free(scn->sst_tab);
-       return -1;
+       errno = EFTYPE;
+       return cdf_zero_stream(scn);
 }
 
 int
@@ -625,7 +649,6 @@ cdf_read_dir(const cdf_info_t *info, con
        for (j = i = 0; i < ns; i++, j++) {
                if (j >= CDF_LOOP_LIMIT) {
                        DPRINTF(("Read dir loop limit"));
-                       errno = EFTYPE;
                        goto out;
                }
                if (cdf_read_sector(info, buf, 0, ss, h, sid) != (ssize_t)ss) {
@@ -646,6 +669,7 @@ cdf_read_dir(const cdf_info_t *info, con
 out:
        free(dir->dir_tab);
        free(buf);
+       errno = EFTYPE;
        return -1;
 }
 
@@ -658,36 +682,37 @@ cdf_read_ssat(const cdf_info_t *info, co
        size_t ss = CDF_SEC_SIZE(h);
        cdf_secid_t sid = h->h_secid_first_sector_in_short_sat;
 
+       ssat->sat_tab = NULL;
        ssat->sat_len = cdf_count_chain(sat, sid, CDF_SEC_SIZE(h));
        if (ssat->sat_len == (size_t)-1)
-               return -1;
+               goto out;
 
        ssat->sat_tab = CAST(cdf_secid_t *, calloc(ssat->sat_len, ss));
        if (ssat->sat_tab == NULL)
-               return -1;
+               goto out1;
 
        for (j = i = 0; sid >= 0; i++, j++) {
                if (j >= CDF_LOOP_LIMIT) {
                        DPRINTF(("Read short sat sector loop limit"));
-                       errno = EFTYPE;
                        goto out;
                }
                if (i >= ssat->sat_len) {
                        DPRINTF(("Out of bounds reading short sector chain "
                            "%" SIZE_T_FORMAT "u > %" SIZE_T_FORMAT "u\n", i,
                            ssat->sat_len));
-                       errno = EFTYPE;
                        goto out;
                }
                if (cdf_read_sector(info, ssat->sat_tab, i * ss, ss, h, sid) !=
                    (ssize_t)ss) {
                        DPRINTF(("Reading short sat sector %d", sid));
-                       goto out;
+                       goto out1;
                }
                sid = CDF_TOLE4((uint32_t)sat->sat_tab[sid]);
        }
        return 0;
 out:
+       errno = EFTYPE;
+out1:
        free(ssat->sat_tab);
        return -1;
 }
@@ -715,13 +740,13 @@ cdf_read_short_stream(const cdf_info_t *
        if (d->d_stream_first_sector < 0)
                goto out;
 
-       return  cdf_read_long_sector_chain(info, h, sat,
+       return cdf_read_long_sector_chain(info, h, sat,
            d->d_stream_first_sector, d->d_size, scn);
 out:
        scn->sst_tab = NULL;
-       scn->sst_len = 0;
-       scn->sst_dirlen = 0;
-       return 0;
+       (void)cdf_zero_stream(scn);
+       errno = EFTYPE;
+       return -1;
 }
 
 static int
@@ -750,8 +775,10 @@ cdf_read_user_stream(const cdf_info_t *i
        const cdf_directory_t *d;
        int i = cdf_find_stream(dir, name, CDF_DIR_TYPE_USER_STREAM);
 
-       if (i <= 0)
+       if (i <= 0) {
+               memset(scn, 0, sizeof(*scn));
                return -1;
+       }
 
        d = &dir->dir_tab[i - 1];
        return cdf_read_sector_chain(info, h, sat, ssat, sst,
@@ -824,7 +851,7 @@ cdf_read_property_info(const cdf_stream_
                    malloc(*maxcount * sizeof(*inp)));
        }
        if (inp == NULL)
-               goto out;
+               goto out1;
        *info = inp;
        inp += *count;
        *count += sh.sh_properties;
@@ -931,7 +958,7 @@ cdf_read_property_info(const cdf_stream_
                                inp = CAST(cdf_property_info_t *,
                                    realloc(*info, *maxcount * sizeof(*inp)));
                                if (inp == NULL)
-                                       goto out;
+                                       goto out1;
                                *info = inp;
                                inp = *info + nelem;
                        }
@@ -976,6 +1003,8 @@ cdf_read_property_info(const cdf_stream_
        }
        return 0;
 out:
+       errno = EFTYPE;
+out1:
        free(*info);
        return -1;
 }
@@ -1022,8 +1051,7 @@ int
 cdf_unpack_catalog(const cdf_header_t *h, const cdf_stream_t *sst,
     cdf_catalog_t **cat)
 {
-       size_t ss = sst->sst_dirlen < h->h_min_size_standard_stream ?
-           CDF_SHORT_SEC_SIZE(h) : CDF_SEC_SIZE(h);
+       size_t ss = cdf_check_stream(sst, h);
        const char *b = CAST(const char *, sst->sst_tab);
        const char *eb = b + ss * sst->sst_len;
        size_t nr, i, j, k;
@@ -1043,6 +1071,8 @@ cdf_unpack_catalog(const cdf_header_t *h
        nr--;
        *cat = CAST(cdf_catalog_t *,
            malloc(sizeof(cdf_catalog_t) + nr * sizeof(*ce)));
+       if (*cat == NULL)
+               return -1;
        ce = (*cat)->cat_e;
        memset(ce, 0, nr * sizeof(*ce));
        b = CAST(const char *, sst->sst_tab);
@@ -1245,8 +1275,7 @@ cdf_dump(const void *v, size_t len)
 void
 cdf_dump_stream(const cdf_header_t *h, const cdf_stream_t *sst)
 {
-       size_t ss = sst->sst_dirlen < h->h_min_size_standard_stream ?
-           CDF_SHORT_SEC_SIZE(h) : CDF_SEC_SIZE(h);
+       size_t ss = sst->sst_ss;
        cdf_dump(sst->sst_tab, ss * sst->sst_len);
 }
 

Modified: head/contrib/file/src/cdf.h
==============================================================================
--- head/contrib/file/src/cdf.h Sat May 14 08:36:37 2016        (r299735)
+++ head/contrib/file/src/cdf.h Sat May 14 08:52:37 2016        (r299736)
@@ -129,6 +129,7 @@ typedef struct {
        void *sst_tab;
        size_t sst_len;
        size_t sst_dirlen;
+       size_t sst_ss;
 } cdf_stream_t;
 
 typedef struct {
@@ -277,7 +278,7 @@ typedef struct {
 
 typedef struct {
        size_t cat_num;
-       cdf_catalog_entry_t cat_e[0];
+       cdf_catalog_entry_t cat_e[1];
 } cdf_catalog_t;
 
 struct timespec;

Modified: head/contrib/file/src/compress.c
==============================================================================
--- head/contrib/file/src/compress.c    Sat May 14 08:36:37 2016        
(r299735)
+++ head/contrib/file/src/compress.c    Sat May 14 08:52:37 2016        
(r299736)
@@ -35,7 +35,7 @@
 #include "file.h"
 
 #ifndef lint
-FILE_RCSID("@(#)$File: compress.c,v 1.93 2016/03/31 17:51:12 christos Exp $")
+FILE_RCSID("@(#)$File: compress.c,v 1.96 2016/04/20 00:00:26 christos Exp $")
 #endif
 
 #include "magic.h"
@@ -187,7 +187,7 @@ file_zmagic(struct magic_set *ms, int fd
        size_t i, nsz;
        char *rbuf;
        file_pushbuf_t *pb;
-       int rv = 0;
+       int urv, prv, rv = 0;
        int mime = ms->flags & MAGIC_MIME;
 #ifdef HAVE_SIGNAL_H
        sig_t osigpipe;
@@ -214,22 +214,22 @@ file_zmagic(struct magic_set *ms, int fd
                if (!zm)
                        continue;
                nsz = nbytes;
-               rv = uncompressbuf(fd, ms->bytes_max, i, buf, &newbuf, &nsz);
-               DPRINTF("uncompressbuf = %d, %s, %zu\n", rv, (char *)newbuf,
+               urv = uncompressbuf(fd, ms->bytes_max, i, buf, &newbuf, &nsz);
+               DPRINTF("uncompressbuf = %d, %s, %zu\n", urv, (char *)newbuf,
                    nsz);
-               switch (rv) {
+               switch (urv) {
                case OKDATA:
                case ERRDATA:
                        
                        ms->flags &= ~MAGIC_COMPRESS;
-                       if (rv == ERRDATA)
-                               rv = file_printf(ms, "%s ERROR: %s",
+                       if (urv == ERRDATA)
+                               prv = file_printf(ms, "%s ERROR: %s",
                                    methodname(i), newbuf);
                        else
-                               rv = file_buffer(ms, -1, name, newbuf, nsz);
-                       if (rv == -1)
+                               prv = file_buffer(ms, -1, name, newbuf, nsz);
+                       if (prv == -1)
                                goto error;
-                       DPRINTF("rv = %d\n", rv);
+                       rv = 1;
                        if ((ms->flags & MAGIC_COMPRESS_TRANSP) != 0)
                                goto out;
                        if (mime != MAGIC_MIME && mime != 0)
@@ -239,6 +239,10 @@ file_zmagic(struct magic_set *ms, int fd
                                goto error;
                        if ((pb = file_push_buffer(ms)) == NULL)
                                goto error;
+                       /*
+                        * XXX: If file_buffer fails here, we overwrite
+                        * the compressed text. FIXME.
+                        */
                        if (file_buffer(ms, -1, NULL, buf, nbytes) == -1)
                                goto error;
                        if ((rbuf = file_pop_buffer(ms, pb)) != NULL) {
@@ -250,16 +254,20 @@ file_zmagic(struct magic_set *ms, int fd
                        }
                        if (!mime && file_printf(ms, ")") == -1)
                                goto error;
-                       goto out;
+                       /*FALLTHROUGH*/
                case NODATA:
-                       goto out;
+                       break;
                default:
                        abort();
+                       /*NOTREACHED*/
+               error:
+                       rv = -1;
+                       break;
                }
        }
 out:
-       rv = 1;
-error:
+       DPRINTF("rv = %d\n", rv);
+
 #ifdef HAVE_SIGNAL_H
        (void)signal(SIGPIPE, osigpipe);
 #endif

Modified: head/contrib/file/src/der.c
==============================================================================
--- head/contrib/file/src/der.c Sat May 14 08:36:37 2016        (r299735)
+++ head/contrib/file/src/der.c Sat May 14 08:52:37 2016        (r299736)
@@ -35,7 +35,7 @@
 #include "file.h"
 
 #ifndef lint
-FILE_RCSID("@(#)$File: der.c,v 1.4 2016/03/21 23:04:40 christos Exp $")
+FILE_RCSID("@(#)$File: der.c,v 1.6 2016/04/21 14:26:03 christos Exp $")
 #endif
 #endif
 
@@ -44,7 +44,6 @@ FILE_RCSID("@(#)$File: der.c,v 1.4 2016/
 #include <sys/mman.h>
 
 #include <stdio.h>
-#include <err.h>
 #include <fcntl.h>
 #include <stdlib.h>
 #include <string.h>
@@ -53,6 +52,8 @@ FILE_RCSID("@(#)$File: der.c,v 1.4 2016/
 #ifndef TEST_DER
 #include "magic.h"
 #include "der.h"
+#else
+#include <err.h>
 #endif
 
 #define DER_BAD        ((uint32_t)-1)
@@ -61,11 +62,15 @@ FILE_RCSID("@(#)$File: der.c,v 1.4 2016/
 #define        DER_CLASS_APPLICATION   1
 #define        DER_CLASS_CONTEXT       2
 #define        DER_CLASS_PRIVATE       3
+#ifdef DEBUG_DER
 static const char der_class[] = "UACP";
+#endif
 
 #define DER_TYPE_PRIMITIVE     0
 #define DER_TYPE_CONSTRUCTED   1
+#ifdef DEBUG_DER
 static const char der_type[] = "PC";
+#endif
 
 #define        DER_TAG_EOC                     0x00
 #define        DER_TAG_BOOLEAN                 0x01

Modified: head/contrib/file/src/magic.c
==============================================================================
--- head/contrib/file/src/magic.c       Sat May 14 08:36:37 2016        
(r299735)
+++ head/contrib/file/src/magic.c       Sat May 14 08:52:37 2016        
(r299736)
@@ -33,7 +33,7 @@
 #include "file.h"
 
 #ifndef        lint
-FILE_RCSID("@(#)$File: magic.c,v 1.97 2016/03/31 17:51:12 christos Exp $")
+FILE_RCSID("@(#)$File: magic.c,v 1.99 2016/05/03 16:09:38 christos Exp $")
 #endif /* lint */
 
 #include "magic.h"
@@ -523,9 +523,11 @@ file_or_fd(struct magic_set *ms, const c
        rv = 0;
 done:
        free(buf);
-       if (pos != (off_t)-1)
-               (void)lseek(fd, pos, SEEK_SET);
-       close_and_restore(ms, inname, fd, &sb);
+       if (fd != -1) {
+               if (pos != (off_t)-1)
+                       (void)lseek(fd, pos, SEEK_SET);
+               close_and_restore(ms, inname, fd, &sb);
+       }
 out:
        return rv == 0 ? file_getbuffer(ms) : NULL;
 }

Modified: head/contrib/file/src/magic.h
==============================================================================
--- head/contrib/file/src/magic.h       Sat May 14 08:36:37 2016        
(r299735)
+++ head/contrib/file/src/magic.h       Sat May 14 08:52:37 2016        
(r299736)
@@ -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          525     /* This implementation */
+#define MAGIC_VERSION          526     /* This implementation */
 
 
 #ifdef __cplusplus
@@ -114,7 +114,7 @@ int magic_errno(magic_t);
 #define MAGIC_PARAM_ELF_SHNUM_MAX      3
 #define MAGIC_PARAM_ELF_NOTES_MAX      4
 #define MAGIC_PARAM_REGEX_MAX          5
-#define MAGIC_PARAM_BYTES_MAX          6
+#define        MAGIC_PARAM_BYTES_MAX           6
 
 int magic_setparam(magic_t, int, const void *);
 int magic_getparam(magic_t, int, void *);

Modified: head/contrib/file/src/magic.h.in
==============================================================================
--- head/contrib/file/src/magic.h.in    Sat May 14 08:36:37 2016        
(r299735)
+++ head/contrib/file/src/magic.h.in    Sat May 14 08:52:37 2016        
(r299736)
@@ -114,6 +114,7 @@ int magic_errno(magic_t);
 #define MAGIC_PARAM_ELF_SHNUM_MAX      3
 #define MAGIC_PARAM_ELF_NOTES_MAX      4
 #define MAGIC_PARAM_REGEX_MAX          5
+#define        MAGIC_PARAM_BYTES_MAX           6
 
 int magic_setparam(magic_t, int, const void *);
 int magic_getparam(magic_t, int, void *);

Modified: head/contrib/file/src/readcdf.c
==============================================================================
--- head/contrib/file/src/readcdf.c     Sat May 14 08:36:37 2016        
(r299735)
+++ head/contrib/file/src/readcdf.c     Sat May 14 08:52:37 2016        
(r299736)
@@ -26,7 +26,7 @@
 #include "file.h"
 
 #ifndef lint
-FILE_RCSID("@(#)$File: readcdf.c,v 1.56 2016/03/03 22:20:03 christos Exp $")
+FILE_RCSID("@(#)$File: readcdf.c,v 1.57 2016/05/03 16:08:49 christos Exp $")
 #endif
 
 #include <assert.h>
@@ -373,7 +373,7 @@ cdf_file_catalog_info(struct magic_set *
            dir, "Catalog", scn)) == -1)
                return i;
 #ifdef CDF_DEBUG
-       cdf_dump_catalog(&h, &scn);
+       cdf_dump_catalog(&h, scn);
 #endif
        if ((i = cdf_file_catalog(ms, h, scn)) == -1)
                return -1;

Modified: head/contrib/file/src/softmagic.c
==============================================================================
--- head/contrib/file/src/softmagic.c   Sat May 14 08:36:37 2016        
(r299735)
+++ head/contrib/file/src/softmagic.c   Sat May 14 08:52:37 2016        
(r299736)
@@ -32,7 +32,7 @@
 #include "file.h"
 
 #ifndef        lint
-FILE_RCSID("@(#)$File: softmagic.c,v 1.230 2016/04/18 15:10:34 christos Exp $")
+FILE_RCSID("@(#)$File: softmagic.c,v 1.231 2016/04/21 15:23:31 christos Exp $")
 #endif /* lint */
 
 #include "magic.h"

Modified: head/contrib/file/tests/Makefile.am
==============================================================================
--- head/contrib/file/tests/Makefile.am Sat May 14 08:36:37 2016        
(r299735)
+++ head/contrib/file/tests/Makefile.am Sat May 14 08:52:37 2016        
(r299736)
@@ -13,4 +13,4 @@ issue311docx.testfile
 T = $(top_srcdir)/tests
 check-local:
        MAGIC=$(top_builddir)/magic/magic ./test
-       for i in $T/*.testfile; do echo Running test: $$i; 
MAGIC=$(top_builddir)/magic/magic ./test $$i $${i%%.testfile}.result; done
+       set -e; for i in $T/*.testfile; do echo Running test: $$i; TZ=UTC 
MAGIC=$(top_builddir)/magic/magic ./test $$i $${i%%.testfile}.result; done

Modified: head/contrib/file/tests/Makefile.in
==============================================================================
--- head/contrib/file/tests/Makefile.in Sat May 14 08:36:37 2016        
(r299735)
+++ head/contrib/file/tests/Makefile.in Sat May 14 08:52:37 2016        
(r299736)
@@ -608,7 +608,7 @@ uninstall-am:
 
 check-local:
        MAGIC=$(top_builddir)/magic/magic ./test
-       for i in $T/*.testfile; do echo Running test: $$i; 
MAGIC=$(top_builddir)/magic/magic ./test $$i $${i%%.testfile}.result; done
+       set -e; for i in $T/*.testfile; do echo Running test: $$i; TZ=UTC 
MAGIC=$(top_builddir)/magic/magic ./test $$i $${i%%.testfile}.result; done
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.

Modified: head/lib/libmagic/config.h
==============================================================================
--- head/lib/libmagic/config.h  Sat May 14 08:36:37 2016        (r299735)
+++ head/lib/libmagic/config.h  Sat May 14 08:52:37 2016        (r299736)
@@ -293,7 +293,7 @@
 #define PACKAGE_NAME "file"
 
 /* Define to the full name and version of this package. */
-#define PACKAGE_STRING "file 5.26"
+#define PACKAGE_STRING "file 5.27"
 
 /* Define to the one symbol short name of this package. */
 #define PACKAGE_TARNAME "file"
@@ -302,7 +302,7 @@
 #define PACKAGE_URL ""
 
 /* Define to the version of this package. */
-#define PACKAGE_VERSION "5.26"
+#define PACKAGE_VERSION "5.27"
 
 /* Define to 1 if you have the ANSI C header files. */
 #define STDC_HEADERS 1
@@ -333,7 +333,7 @@
 
 
 /* Version number of package */
-#define VERSION "5.26"
+#define VERSION "5.27"
 
 /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
    significant byte first (like Motorola and SPARC, unlike Intel). */
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to