]> granicus.if.org Git - php/commitdiff
updated libmagic.patch for 5.4+
authorAnatol Belski <ab@php.net>
Tue, 27 May 2014 20:36:12 +0000 (22:36 +0200)
committerAnatol Belski <ab@php.net>
Tue, 27 May 2014 20:36:12 +0000 (22:36 +0200)
ext/fileinfo/libmagic.patch

index ae8b57f6ca91a10d1f9657f02f5d4029cf1ec97b..39807ac00b13e243a7d34a5d912ce589e0f214f8 100644 (file)
@@ -1,6 +1,6 @@
 diff -u libmagic.orig/apprentice.c libmagic/apprentice.c
 --- libmagic.orig/apprentice.c Thu Mar 21 18:45:14 2013
-+++ libmagic/apprentice.c      Fri May  3 15:19:35 2013
++++ libmagic/apprentice.c      Fri Apr 11 12:36:52 2014
 @@ -29,6 +29,8 @@
   * apprentice - make one pass through /etc/magic, learning its secrets.
   */
@@ -180,7 +180,7 @@ diff -u libmagic.orig/apprentice.c libmagic/apprentice.c
        return NULL;
  }
  
-@@ -499,22 +492,24 @@
+@@ -499,22 +492,26 @@
  {
        if (map == NULL)
                return;
@@ -194,12 +194,14 @@ diff -u libmagic.orig/apprentice.c libmagic/apprentice.c
 -              free(map->p);
 -      free(map);
 +      if (map->p != php_magic_database) {
-+              int j;
-+              for (j = 0; j < MAGIC_SETS; j++) {
-+                      if (map->magic[j])
-+                              efree(map->magic[j]);
-+              }
-+              if (map->p != NULL) {
++              if (map->p == NULL) {
++                      int j;
++                      for (j = 0; j < MAGIC_SETS; j++) {
++                              if (map->magic[j]) {
++                                      efree(map->magic[j]);
++                              }
++                      }
++              } else {
 +                      efree(map->p);
 +              }
 +      }
@@ -215,7 +217,7 @@ diff -u libmagic.orig/apprentice.c libmagic/apprentice.c
                return NULL;
        }
        mlist->next = mlist->prev = mlist;
-@@ -533,10 +528,10 @@
+@@ -533,10 +530,10 @@
                struct mlist *next = ml->next;
                if (ml->map)
                        apprentice_unmap(ml->map);
@@ -228,7 +230,7 @@ diff -u libmagic.orig/apprentice.c libmagic/apprentice.c
  }
  
  /* const char *fn: list of magic files and directories */
-@@ -546,13 +541,28 @@
+@@ -546,13 +543,28 @@
        char *p, *mfn;
        int file_err, errs = -1;
        size_t i;
@@ -259,7 +261,7 @@ diff -u libmagic.orig/apprentice.c libmagic/apprentice.c
                file_oomem(ms, strlen(fn));
                return -1;
        }
-@@ -567,7 +577,7 @@
+@@ -567,7 +579,7 @@
                                        mlist_free(ms->mlist[i]);
                                while (i != 0);
                        }
@@ -268,7 +270,7 @@ diff -u libmagic.orig/apprentice.c libmagic/apprentice.c
                        return -1;
                }
        }
-@@ -584,7 +594,7 @@
+@@ -584,7 +596,7 @@
                fn = p;
        }
  
@@ -277,7 +279,7 @@ diff -u libmagic.orig/apprentice.c libmagic/apprentice.c
  
        if (errs == -1) {
                for (i = 0; i < MAGIC_SETS; i++) {
-@@ -904,7 +914,7 @@
+@@ -904,7 +916,7 @@
  
                maxmagic[i] += ALLOC_INCR;
                if ((mp = CAST(struct magic_entry *,
@@ -286,7 +288,7 @@ diff -u libmagic.orig/apprentice.c libmagic/apprentice.c
                    NULL) {
                        file_oomem(ms, sizeof(*mp) * maxmagic[i]);
                        return -1;
-@@ -925,13 +935,24 @@
+@@ -925,13 +937,24 @@
  load_1(struct magic_set *ms, int action, const char *fn, int *errs,
     struct magic_entry **mentry, uint32_t *mentrycount)
  {
@@ -315,7 +317,7 @@ diff -u libmagic.orig/apprentice.c libmagic/apprentice.c
                if (errno != ENOENT)
                        file_error(ms, errno, "cannot read magic file `%s'",
                                   fn);
-@@ -941,8 +962,7 @@
+@@ -941,8 +964,7 @@
  
        memset(&me, 0, sizeof(me));
        /* read and parse this file */
@@ -325,7 +327,7 @@ diff -u libmagic.orig/apprentice.c libmagic/apprentice.c
                if (len == 0) /* null line, garbage, etc */
                        continue;
                if (line[len - 1] == '\n') {
-@@ -994,14 +1014,13 @@
+@@ -994,14 +1016,13 @@
                                goto again;
                        default:
                                (*errs)++;
@@ -343,7 +345,7 @@ diff -u libmagic.orig/apprentice.c libmagic/apprentice.c
  }
  
  /*
-@@ -1080,7 +1099,7 @@
+@@ -1080,7 +1101,7 @@
                mentrycount += me[i].cont_count;
  
        slen = sizeof(**ma) * mentrycount;
@@ -352,7 +354,7 @@ diff -u libmagic.orig/apprentice.c libmagic/apprentice.c
                file_oomem(ms, slen);
                return -1;
        }
-@@ -1102,27 +1121,29 @@
+@@ -1102,27 +1123,29 @@
        if (me == NULL)
                return;
        for (i = 0; i < nme; i++)
@@ -389,7 +391,7 @@ diff -u libmagic.orig/apprentice.c libmagic/apprentice.c
                file_oomem(ms, sizeof(*map));
                return NULL;
        }
-@@ -1131,23 +1152,37 @@
+@@ -1131,23 +1154,37 @@
        if (action == FILE_CHECK)
                (void)fprintf(stderr, "%s\n", usg_hdr);
  
@@ -434,7 +436,7 @@ diff -u libmagic.orig/apprentice.c libmagic/apprentice.c
                                continue;
                        }
                        if (files >= maxfiles) {
-@@ -1155,24 +1190,23 @@
+@@ -1155,24 +1192,23 @@
                                maxfiles = (maxfiles + 1) * 2;
                                mlen = maxfiles * sizeof(*filearr);
                                if ((filearr = CAST(char **,
@@ -465,7 +467,7 @@ diff -u libmagic.orig/apprentice.c libmagic/apprentice.c
        } else
                load_1(ms, action, fn, &errs, mentry, mentrycount);
        if (errs)
-@@ -1211,9 +1245,9 @@
+@@ -1211,9 +1247,9 @@
        if (errs) {
                for (j = 0; j < MAGIC_SETS; j++) {
                        if (map->magic[j])
@@ -477,7 +479,7 @@ diff -u libmagic.orig/apprentice.c libmagic/apprentice.c
                return NULL;
        }
        return map;
-@@ -1500,7 +1534,7 @@
+@@ -1500,7 +1536,7 @@
                if (me->cont_count == me->max_count) {
                        struct magic *nm;
                        size_t cnt = me->max_count + ALLOC_CHUNK;
@@ -486,7 +488,7 @@ diff -u libmagic.orig/apprentice.c libmagic/apprentice.c
                            sizeof(*nm) * cnt))) == NULL) {
                                file_oomem(ms, sizeof(*nm) * cnt);
                                return -1;
-@@ -1515,7 +1549,7 @@
+@@ -1515,7 +1551,7 @@
                static const size_t len = sizeof(*m) * ALLOC_CHUNK;
                if (me->mp != NULL)
                        return 1;
@@ -495,7 +497,7 @@ diff -u libmagic.orig/apprentice.c libmagic/apprentice.c
                        file_oomem(ms, len);
                        return -1;
                }
-@@ -1688,7 +1722,7 @@
+@@ -1688,7 +1724,7 @@
                                m->type = get_standard_integer_type(l, &l);
                        else if (*l == 's' && !isalpha((unsigned char)l[1])) {
                                m->type = FILE_STRING;
@@ -504,7 +506,7 @@ diff -u libmagic.orig/apprentice.c libmagic/apprentice.c
                        }
                }
        }
-@@ -1701,6 +1735,10 @@
+@@ -1701,6 +1737,10 @@
        if (m->type == FILE_INVALID) {
                if (ms->flags & MAGIC_CHECK)
                        file_magwarn(ms, "type `%s' invalid", l);
@@ -515,7 +517,7 @@ diff -u libmagic.orig/apprentice.c libmagic/apprentice.c
                return -1;
        }
  
-@@ -1709,7 +1747,7 @@
+@@ -1709,7 +1749,7 @@
  
        m->mask_op = 0;
        if (*l == '~') {
@@ -524,7 +526,7 @@ diff -u libmagic.orig/apprentice.c libmagic/apprentice.c
                        m->mask_op |= FILE_OPINVERSE;
                else if (ms->flags & MAGIC_CHECK)
                        file_magwarn(ms, "'~' invalid for string types");
-@@ -1718,7 +1756,7 @@
+@@ -1718,7 +1758,7 @@
        m->str_range = 0;
        m->str_flags = m->type == FILE_PSTRING ? PSTRING_1_LE : 0;
        if ((op = get_op(*l)) != -1) {
@@ -533,7 +535,7 @@ diff -u libmagic.orig/apprentice.c libmagic/apprentice.c
                        uint64_t val;
                        ++l;
                        m->mask_op |= op;
-@@ -1909,11 +1947,6 @@
+@@ -1909,11 +1949,6 @@
                if (check_format(ms, m) == -1)
                        return -1;
        }
@@ -545,7 +547,7 @@ diff -u libmagic.orig/apprentice.c libmagic/apprentice.c
        m->mimetype[0] = '\0';          /* initialise MIME type to none */
        return 0;
  }
-@@ -2554,59 +2587,80 @@
+@@ -2554,59 +2589,80 @@
  private struct magic_map *
  apprentice_map(struct magic_set *ms, const char *fn)
  {
@@ -559,10 +561,10 @@ diff -u libmagic.orig/apprentice.c libmagic/apprentice.c
        size_t i;
 +      php_stream *stream = NULL;
 +      php_stream_statbuf st;
-+
  
 -      fd = -1;
 -      if ((map = CAST(struct magic_map *, calloc(1, sizeof(*map)))) == NULL) {
++
 +      TSRMLS_FETCH();
 +
 +      if ((map = CAST(struct magic_map *, ecalloc(1, sizeof(*map)))) == NULL) {
@@ -647,7 +649,7 @@ diff -u libmagic.orig/apprentice.c libmagic/apprentice.c
        if (*ptr != MAGICNO) {
                if (swap4(*ptr) != MAGICNO) {
                        file_error(ms, 0, "bad magic in `%s'", dbname);
-@@ -2620,17 +2674,29 @@
+@@ -2620,17 +2676,29 @@
        else
                version = ptr[1];
        if (version != VERSIONNO) {
@@ -685,7 +687,7 @@ diff -u libmagic.orig/apprentice.c libmagic/apprentice.c
        }
        map->magic[0] = CAST(struct magic *, map->p) + 1;
        nentries = 0;
-@@ -2643,22 +2709,29 @@
+@@ -2643,22 +2711,29 @@
                        map->magic[i + 1] = map->magic[i] + map->nmagic[i];
                nentries += map->nmagic[i];
        }
@@ -720,7 +722,7 @@ diff -u libmagic.orig/apprentice.c libmagic/apprentice.c
        return NULL;
  }
  
-@@ -2679,14 +2752,23 @@
+@@ -2679,14 +2754,23 @@
        char *dbname;
        int rv = -1;
        uint32_t i;
@@ -747,7 +749,7 @@ diff -u libmagic.orig/apprentice.c libmagic/apprentice.c
                file_error(ms, errno, "cannot open `%s'", dbname);
                goto out;
        }
-@@ -2696,31 +2778,33 @@
+@@ -2696,31 +2780,33 @@
                goto out;
        }
  
@@ -787,7 +789,7 @@ diff -u libmagic.orig/apprentice.c libmagic/apprentice.c
        return rv;
  }
  
-@@ -2733,6 +2817,7 @@
+@@ -2733,6 +2819,7 @@
  {
        const char *p, *q;
        char *buf;
@@ -795,7 +797,7 @@ diff -u libmagic.orig/apprentice.c libmagic/apprentice.c
  
        if (strip) {
                if ((p = strrchr(fn, '/')) != NULL)
-@@ -2754,16 +2839,18 @@
+@@ -2754,16 +2841,18 @@
        q++;
        /* Compatibility with old code that looked in .mime */
        if (ms->flags & MAGIC_MIME) {
@@ -820,7 +822,7 @@ diff -u libmagic.orig/apprentice.c libmagic/apprentice.c
  
        /* Compatibility with old code that looked in .mime */
        if (strstr(p, ".mime") != NULL)
-@@ -2853,7 +2940,7 @@
+@@ -2853,7 +2942,7 @@
        m->offset = swap4((uint32_t)m->offset);
        m->in_offset = swap4((uint32_t)m->in_offset);
        m->lineno = swap4((uint32_t)m->lineno);
@@ -831,7 +833,7 @@ diff -u libmagic.orig/apprentice.c libmagic/apprentice.c
        }
 diff -u libmagic.orig/ascmagic.c libmagic/ascmagic.c
 --- libmagic.orig/ascmagic.c   Wed Oct 31 18:03:01 2012
-+++ libmagic/ascmagic.c        Tue Feb 18 18:44:17 2014
++++ libmagic/ascmagic.c        Mon Mar 10 16:40:55 2014
 @@ -139,7 +139,7 @@
                /* malloc size is a conservative overestimate; could be
                   improved, or at least realloced after conversion. */
@@ -870,7 +872,7 @@ diff -u libmagic.orig/ascmagic.c libmagic/ascmagic.c
  }
 diff -u libmagic.orig/cdf.c libmagic/cdf.c
 --- libmagic.orig/cdf.c        Thu Mar 21 18:45:14 2013
-+++ libmagic/cdf.c     Sun Apr  7 22:30:22 2013
++++ libmagic/cdf.c     Tue May 27 22:22:35 2014
 @@ -43,7 +43,17 @@
  #include <err.h>
  #endif
@@ -901,7 +903,63 @@ diff -u libmagic.orig/cdf.c libmagic/cdf.c
                return -1;
  
        return (ssize_t)len;
-@@ -1132,7 +1145,7 @@
+@@ -810,6 +823,10 @@
+                   i, inp[i].pi_id, inp[i].pi_type, q - p, offs));
+               if (inp[i].pi_type & CDF_VECTOR) {
+                       nelements = CDF_GETUINT32(q, 1);
++                      if (nelements == 0) {
++                              DPRINTF(("CDF_VECTOR with nelements == 0\n"));
++                              goto out;
++                      }
+                       o = 2;
+               } else {
+                       nelements = 1;
+@@ -884,7 +901,9 @@
+                       }
+                       DPRINTF(("nelements = %" SIZE_T_FORMAT "u\n",
+                           nelements));
+-                      for (j = 0; j < nelements; j++, i++) {
++                      for (j = 0; j < nelements && i < sh.sh_properties; 
++                          j++, i++) 
++                      {
+                               uint32_t l = CDF_GETUINT32(q, o);
+                               inp[i].pi_str.s_len = l;
+                               inp[i].pi_str.s_buf = (const char *)
+@@ -929,7 +948,7 @@
+ cdf_unpack_summary_info(const cdf_stream_t *sst, const cdf_header_t *h,
+     cdf_summary_info_header_t *ssi, cdf_property_info_t **info, size_t *count)
+ {
+-      size_t i, maxcount;
++      size_t maxcount;
+       const cdf_summary_info_header_t *si =
+           CAST(const cdf_summary_info_header_t *, sst->sst_tab);
+       const cdf_section_declaration_t *sd =
+@@ -944,21 +963,13 @@
+       ssi->si_os = CDF_TOLE2(si->si_os);
+       ssi->si_class = si->si_class;
+       cdf_swap_class(&ssi->si_class);
+-      ssi->si_count = CDF_TOLE2(si->si_count);
++      ssi->si_count = CDF_TOLE4(si->si_count);
+       *count = 0;
+       maxcount = 0;
+       *info = NULL;
+-      for (i = 0; i < CDF_TOLE4(si->si_count); i++) {
+-              if (i >= CDF_LOOP_LIMIT) {
+-                      DPRINTF(("Unpack summary info loop limit"));
+-                      errno = EFTYPE;
+-                      return -1;
+-              }
+-              if (cdf_read_property_info(sst, h, CDF_TOLE4(sd->sd_offset),
+-                  info, count, &maxcount) == -1) {
++      if (cdf_read_property_info(sst, h, CDF_TOLE4(sd->sd_offset), info,
++              count, &maxcount) == -1) 
+                       return -1;
+-              }
+-      }
+       return 0;
+ }
+@@ -1132,7 +1143,7 @@
        cdf_directory_t *d;
        char name[__arraycount(d->d_name)];
        cdf_stream_t scn;
@@ -910,7 +968,7 @@ diff -u libmagic.orig/cdf.c libmagic/cdf.c
  
        static const char *types[] = { "empty", "user storage",
            "user stream", "lockbytes", "property", "root storage" };
-@@ -1185,7 +1198,7 @@
+@@ -1185,7 +1196,7 @@
  cdf_dump_property_info(const cdf_property_info_t *info, size_t count)
  {
        cdf_timestamp_t tp;
@@ -919,7 +977,7 @@ diff -u libmagic.orig/cdf.c libmagic/cdf.c
        char buf[64];
        size_t i, j;
  
-@@ -1229,7 +1242,11 @@
+@@ -1229,7 +1240,11 @@
                        break;
                case CDF_FILETIME:
                        tp = info[i].pi_tp;
@@ -933,7 +991,7 @@ diff -u libmagic.orig/cdf.c libmagic/cdf.c
                        } else {
 diff -u libmagic.orig/cdf.h libmagic/cdf.h
 --- libmagic.orig/cdf.h        Wed Oct 31 18:03:01 2012
-+++ libmagic/cdf.h     Sun Apr  7 22:30:22 2013
++++ libmagic/cdf.h     Mon Dec  2 15:25:29 2013
 @@ -35,10 +35,12 @@
  #ifndef _H_CDF_
  #define _H_CDF_
@@ -976,7 +1034,7 @@ diff -u libmagic.orig/cdf.h libmagic/cdf.h
  void cdf_unpack_header(cdf_header_t *, char *);
 diff -u libmagic.orig/cdf_time.c libmagic/cdf_time.c
 --- libmagic.orig/cdf_time.c   Wed Oct 31 18:03:01 2012
-+++ libmagic/cdf_time.c        Sun Apr  7 22:30:22 2013
++++ libmagic/cdf_time.c        Mon Dec  2 15:25:29 2013
 @@ -96,7 +96,7 @@
  }
  
@@ -1036,7 +1094,7 @@ diff -u libmagic.orig/cdf_time.c libmagic/cdf_time.c
        static const char *ref = "Sat Apr 23 01:30:00 1977";
 diff -u libmagic.orig/compress.c libmagic/compress.c
 --- libmagic.orig/compress.c   Sun Jan  6 21:35:43 2013
-+++ libmagic/compress.c        Sun Apr  7 22:30:22 2013
++++ libmagic/compress.c        Mon Dec  2 15:25:29 2013
 @@ -32,6 +32,7 @@
   *    uncompress(method, old, n, newch) - uncompress old into new, 
   *                                        using method, return sizeof new
@@ -1199,7 +1257,7 @@ diff -u libmagic.orig/compress.c libmagic/compress.c
 +#endif /* if PHP_FILEINFO_UNCOMPRESS */
 diff -u libmagic.orig/file.h libmagic/file.h
 --- libmagic.orig/file.h       Mon Feb 18 16:40:59 2013
-+++ libmagic/file.h    Tue Feb 18 18:44:17 2014
++++ libmagic/file.h    Mon Mar 10 16:40:55 2014
 @@ -33,11 +33,9 @@
  #ifndef __file_h__
  #define __file_h__
@@ -1409,7 +1467,7 @@ diff -u libmagic.orig/file.h libmagic/file.h
  #endif /* __file_h__ */
 diff -u libmagic.orig/fsmagic.c libmagic/fsmagic.c
 --- libmagic.orig/fsmagic.c    Thu Mar 21 18:45:14 2013
-+++ libmagic/fsmagic.c Sun Apr  7 22:30:22 2013
++++ libmagic/fsmagic.c Mon Dec  2 15:25:29 2013
 @@ -59,27 +59,21 @@
  # define minor(dev)  ((dev) & 0xff)
  #endif
@@ -1776,7 +1834,7 @@ diff -u libmagic.orig/fsmagic.c libmagic/fsmagic.c
  }
 diff -u libmagic.orig/funcs.c libmagic/funcs.c
 --- libmagic.orig/funcs.c      Wed Oct 31 18:03:01 2012
-+++ libmagic/funcs.c   Tue Feb 18 18:44:17 2014
++++ libmagic/funcs.c   Mon Mar 10 16:40:55 2014
 @@ -41,52 +41,42 @@
  #if defined(HAVE_WCTYPE_H)
  #include <wctype.h>
@@ -2070,7 +2128,7 @@ diff -u libmagic.orig/funcs.c libmagic/funcs.c
 +
 diff -u libmagic.orig/magic.c libmagic/magic.c
 --- libmagic.orig/magic.c      Fri Jan 11 17:43:09 2013
-+++ libmagic/magic.c   Fri May  3 15:19:35 2013
++++ libmagic/magic.c   Mon Dec  2 15:29:02 2013
 @@ -25,11 +25,6 @@
   * SUCH DAMAGE.
   */
@@ -2414,7 +2472,7 @@ diff -u libmagic.orig/magic.c libmagic/magic.c
  magic_error(struct magic_set *ms)
 diff -u libmagic.orig/magic.h libmagic/magic.h
 --- libmagic.orig/magic.h      Thu Mar 21 18:52:42 2013
-+++ libmagic/magic.h   Sun Apr  7 22:30:22 2013
++++ libmagic/magic.h   Mon Dec  2 15:25:29 2013
 @@ -87,6 +87,7 @@
  
  const char *magic_getpath(const char *, int);
@@ -2433,14 +2491,14 @@ diff -u libmagic.orig/magic.h libmagic/magic.h
  
 diff -u libmagic.orig/print.c libmagic/print.c
 --- libmagic.orig/print.c      Thu Mar 21 18:45:14 2013
-+++ libmagic/print.c   Mon Dec 16 23:09:24 2013
-@@ -29,12 +29,17 @@
++++ libmagic/print.c   Mon Dec  2 15:29:02 2013
+@@ -28,13 +28,17 @@
+ /*
   * print.c - debugging printout routines
   */
 +#define _GNU_SOURCE
 +#include "php.h"
-+
  #include "file.h"
 +#include "cdf.h"
  
@@ -2452,7 +2510,7 @@ diff -u libmagic.orig/print.c libmagic/print.c
  #include <string.h>
  #include <stdarg.h>
  #include <stdlib.h>
-@@ -43,188 +48,28 @@
+@@ -43,188 +47,28 @@
  #endif
  #include <time.h>
  
@@ -2653,7 +2711,7 @@ diff -u libmagic.orig/print.c libmagic/print.c
  }
  
  protected const char *
-@@ -235,7 +80,7 @@
+@@ -235,7 +79,7 @@
        struct tm *tm;
  
        if (flags & FILE_T_WINDOWS) {
@@ -2664,7 +2722,7 @@ diff -u libmagic.orig/print.c libmagic/print.c
        }
 diff -u libmagic.orig/readcdf.c libmagic/readcdf.c
 --- libmagic.orig/readcdf.c    Wed Oct 31 18:03:01 2012
-+++ libmagic/readcdf.c Sun Apr  7 22:30:22 2013
++++ libmagic/readcdf.c Thu Apr 24 19:54:40 2014
 @@ -30,7 +30,11 @@
  #endif
  
@@ -2677,7 +2735,7 @@ diff -u libmagic.orig/readcdf.c libmagic/readcdf.c
  #include <string.h>
  #include <time.h>
  #include <ctype.h>
-@@ -46,7 +50,7 @@
+@@ -46,12 +50,14 @@
  {
          size_t i;
          cdf_timestamp_t tp;
@@ -2686,7 +2744,14 @@ diff -u libmagic.orig/readcdf.c libmagic/readcdf.c
          char buf[64];
          const char *str = NULL;
          const char *s;
-@@ -125,8 +129,12 @@
+         int len;
++      memset(&ts, 0, sizeof(ts));
++
+         for (i = 0; i < count; i++) {
+                 cdf_print_property_name(buf, sizeof(buf), info[i].pi_id);
+                 switch (info[i].pi_type) {
+@@ -125,8 +131,12 @@
                  case CDF_FILETIME:
                          tp = info[i].pi_tp;
                          if (tp != 0) {
@@ -2701,18 +2766,24 @@ diff -u libmagic.orig/readcdf.c libmagic/readcdf.c
                                          cdf_print_elapsed_time(tbuf,
                                              sizeof(tbuf), tp);
                                          if (NOTMIME(ms) && file_printf(ms,
-@@ -134,7 +142,9 @@
+@@ -134,9 +144,13 @@
                                                  return -1;
                                  } else {
                                          char *c, *ec;
 -                                        cdf_timestamp_to_timespec(&ts, tp);
+-                                        c = cdf_ctime(&ts.tv_sec, tbuf);
+-                                        if ((ec = strchr(c, '\n')) != NULL)
++                                      const time_t sec = ts.tv_sec;
 +                                        if (cdf_timestamp_to_timespec(&ts, tp) == -1) {
 +                                                                                      return -1;
 +                                                                              }
-                                         c = cdf_ctime(&ts.tv_sec, tbuf);
-                                         if ((ec = strchr(c, '\n')) != NULL)
++                                        c = cdf_ctime(&sec, tbuf);
++                                        if (c != NULL &&
++                                          (ec = strchr(c, '\n')) != NULL)
                                                  *ec = '\0';
-@@ -314,9 +324,9 @@
+                                         if (NOTMIME(ms) && file_printf(ms,
+@@ -314,9 +328,9 @@
                        if (file_printf(ms,
                            "Composite Document File V2 Document") == -1)
                            return -1;
@@ -2727,7 +2798,7 @@ diff -u libmagic.orig/readcdf.c libmagic/readcdf.c
                            return -1;
 diff -u libmagic.orig/readelf.c libmagic/readelf.c
 --- libmagic.orig/readelf.c    Thu Mar 21 18:45:14 2013
-+++ libmagic/readelf.c Sun Apr  7 22:30:22 2013
++++ libmagic/readelf.c Mon Dec  2 15:25:29 2013
 @@ -48,8 +48,8 @@
  private int dophn_exec(struct magic_set *, int, int, int, off_t, int, size_t,
      off_t, int *, int);
@@ -2979,7 +3050,7 @@ diff -u libmagic.orig/readelf.c libmagic/readelf.c
        if (fstat(fd, &st) == -1) {
 diff -u libmagic.orig/readelf.h libmagic/readelf.h
 --- libmagic.orig/readelf.h    Thu Mar 21 18:45:14 2013
-+++ libmagic/readelf.h Wed Mar 28 15:35:26 2012
++++ libmagic/readelf.h Mon Dec  2 15:25:29 2013
 @@ -44,9 +44,17 @@
  typedef uint32_t      Elf32_Word;
  typedef uint8_t               Elf32_Char;
@@ -3000,7 +3071,7 @@ diff -u libmagic.orig/readelf.h libmagic/readelf.h
  typedef uint8_t               Elf64_Char;
 diff -u libmagic.orig/softmagic.c libmagic/softmagic.c
 --- libmagic.orig/softmagic.c  Thu Mar 21 18:45:14 2013
-+++ libmagic/softmagic.c       Mon Mar 10 14:03:18 2014
++++ libmagic/softmagic.c       Mon Mar 10 16:40:55 2014
 @@ -41,6 +41,11 @@
  #include <stdlib.h>
  #include <time.h>
@@ -3592,3 +3663,4 @@ diff -u libmagic.orig/softmagic.c libmagic/softmagic.c
        default:
                file_magerror(ms, "invalid type %d in magiccheck()", m->type);
                return -1;
+