From dbea6e154d95e8aa4393dd517825a2da5de435f2 Mon Sep 17 00:00:00 2001 From: Anatol Belski Date: Mon, 30 Apr 2018 14:29:55 +0200 Subject: [PATCH] Update libmagic.patch --- ext/fileinfo/libmagic.patch | 217 +++++++++++------------------------- 1 file changed, 63 insertions(+), 154 deletions(-) diff --git a/ext/fileinfo/libmagic.patch b/ext/fileinfo/libmagic.patch index d00b18e69d..43b77c23c3 100644 --- a/ext/fileinfo/libmagic.patch +++ b/ext/fileinfo/libmagic.patch @@ -1,6 +1,6 @@ diff -u libmagic.orig/apprentice.c libmagic/apprentice.c --- libmagic.orig/apprentice.c 2018-03-11 01:46:42.000000000 +0100 -+++ libmagic/apprentice.c 2018-04-27 19:30:48.686308139 +0200 ++++ libmagic/apprentice.c 2018-04-30 13:51:02.699987375 +0200 @@ -2,7 +2,7 @@ * Copyright (c) Ian F. Darwin 1986-1995. * Software written by Ian F. Darwin and others; @@ -298,7 +298,7 @@ diff -u libmagic.orig/apprentice.c libmagic/apprentice.c return NULL; } mlist->next = mlist->prev = mlist; -@@ -593,76 +564,45 @@ +@@ -593,60 +564,12 @@ for (ml = mlist->next; (next = ml->next) != NULL; ml = next) { if (ml->map) apprentice_unmap(CAST(struct magic_map *, ml->map)); @@ -360,10 +360,8 @@ diff -u libmagic.orig/apprentice.c libmagic/apprentice.c /* const char *fn: list of magic files and directories */ protected int file_apprentice(struct magic_set *ms, const char *fn, int action) - { - char *p, *mfn; -- int fileerr, errs = -1; -+ int file_err, errs = -1; +@@ -655,14 +578,31 @@ + int fileerr, errs = -1; size_t i; - (void)file_reset(ms, 0); @@ -405,14 +403,7 @@ diff -u libmagic.orig/apprentice.c libmagic/apprentice.c return -1; } } -@@ -687,12 +627,12 @@ - *p++ = '\0'; - if (*fn == '\0') - break; -- fileerr = apprentice_1(ms, fn, action); -- errs = MAX(errs, fileerr); -+ file_err = apprentice_1(ms, fn, action); -+ errs = MAX(errs, file_err); +@@ -692,7 +632,7 @@ fn = p; } @@ -1264,7 +1255,7 @@ diff -u libmagic.orig/apprentice.c libmagic/apprentice.c switch (m->str_flags & PSTRING_LEN) { diff -u libmagic.orig/apptype.c libmagic/apptype.c --- libmagic.orig/apptype.c 2011-09-07 23:57:15.000000000 +0200 -+++ libmagic/apptype.c 2018-04-28 11:06:43.473101938 +0200 ++++ libmagic/apptype.c 2018-04-30 11:42:56.817549017 +0200 @@ -1,15 +1,15 @@ /* * Adapted from: apptype.c, Written by Eberhard Mattes and put into the @@ -1299,7 +1290,7 @@ diff -u libmagic.orig/apptype.c libmagic/apptype.c #include "file.h" diff -u libmagic.orig/ascmagic.c libmagic/ascmagic.c --- libmagic.orig/ascmagic.c 2017-11-02 21:25:39.000000000 +0100 -+++ libmagic/ascmagic.c 2018-04-28 11:05:05.397660689 +0200 ++++ libmagic/ascmagic.c 2018-04-30 11:42:56.885548829 +0200 @@ -90,7 +90,7 @@ rv = file_ascmagic_with_encoding(ms, &bb, ubuf, ulen, code, type, text); @@ -1330,7 +1321,7 @@ diff -u libmagic.orig/ascmagic.c libmagic/ascmagic.c } diff -u libmagic.orig/buffer.c libmagic/buffer.c --- libmagic.orig/buffer.c 2018-03-11 01:46:42.000000000 +0100 -+++ libmagic/buffer.c 2018-04-27 19:30:49.006293549 +0200 ++++ libmagic/buffer.c 2018-04-30 11:42:56.953548641 +0200 @@ -31,7 +31,11 @@ #endif /* lint */ @@ -1381,7 +1372,7 @@ diff -u libmagic.orig/buffer.c libmagic/buffer.c diff -u libmagic.orig/cdf.c libmagic/cdf.c --- libmagic.orig/cdf.c 2018-03-11 01:46:42.000000000 +0100 -+++ libmagic/cdf.c 2018-04-28 09:02:14.865216158 +0200 ++++ libmagic/cdf.c 2018-04-30 11:42:57.053548363 +0200 @@ -43,7 +43,17 @@ #include #endif @@ -1639,22 +1630,22 @@ diff -u libmagic.orig/cdf.c libmagic/cdf.c #endif diff -u libmagic.orig/cdf.h libmagic/cdf.h --- libmagic.orig/cdf.h 2017-03-09 17:57:17.000000000 +0100 -+++ libmagic/cdf.h 2018-04-27 19:30:49.234283137 +0200 -@@ -35,10 +35,12 @@ ++++ libmagic/cdf.h 2018-04-30 11:43:04.761527016 +0200 +@@ -35,10 +35,10 @@ #ifndef _H_CDF_ #define _H_CDF_ -#ifdef WIN32 +#ifdef PHP_WIN32 #include - #define timespec timeval - #define tv_nsec tv_usec +-#define timespec timeval +-#define tv_nsec tv_usec +#define asctime_r php_asctime_r +#define ctime_r php_ctime_r #endif #ifdef __DJGPP__ #define timespec timeval -@@ -272,7 +274,7 @@ +@@ -272,7 +272,7 @@ typedef struct { uint16_t ce_namlen; uint32_t ce_num; @@ -1663,22 +1654,9 @@ diff -u libmagic.orig/cdf.h libmagic/cdf.h uint16_t ce_name[256]; } cdf_catalog_entry_t; -@@ -281,9 +283,9 @@ - cdf_catalog_entry_t cat_e[1]; - } cdf_catalog_t; - --struct timespec; --int cdf_timestamp_to_timespec(struct timespec *, cdf_timestamp_t); --int cdf_timespec_to_timestamp(cdf_timestamp_t *, const struct timespec *); -+struct timeval; -+int cdf_timestamp_to_timespec(struct timeval *, cdf_timestamp_t); -+int cdf_timespec_to_timestamp(cdf_timestamp_t *, const struct timeval *); - int cdf_read_header(const cdf_info_t *, cdf_header_t *); - void cdf_swap_header(cdf_header_t *); - void cdf_unpack_header(cdf_header_t *, char *); diff -u libmagic.orig/cdf_time.c libmagic/cdf_time.c --- libmagic.orig/cdf_time.c 2017-03-29 17:57:48.000000000 +0200 -+++ libmagic/cdf_time.c 2018-04-27 19:30:49.326278937 +0200 ++++ libmagic/cdf_time.c 2018-04-30 11:42:57.117548186 +0200 @@ -56,7 +56,7 @@ for (y = CDF_BASE_YEAR; y < year; y++) @@ -1697,57 +1675,9 @@ diff -u libmagic.orig/cdf_time.c libmagic/cdf_time.c * Return the 0...11 month number. */ static int -@@ -96,7 +96,7 @@ - } - - int --cdf_timestamp_to_timespec(struct timespec *ts, cdf_timestamp_t t) -+cdf_timestamp_to_timespec(struct timeval *ts, cdf_timestamp_t t) - { - struct tm tm; - #ifdef HAVE_STRUCT_TM_TM_ZONE -@@ -104,8 +104,9 @@ - #endif - int rdays; - -- /* Unit is 100's of nanoseconds */ -- ts->tv_nsec = (t % CDF_TIME_PREC) * 100; -+ /* XXX 5.14 at least introdced 100 ns intervals, this is to do */ -+ /* Time interval, in microseconds */ -+ ts->tv_usec = (t % CDF_TIME_PREC) * CDF_TIME_PREC; - - t /= CDF_TIME_PREC; - tm.tm_sec = (int)(t % 60); -@@ -144,7 +145,7 @@ - - int - /*ARGSUSED*/ --cdf_timespec_to_timestamp(cdf_timestamp_t *t, const struct timespec *ts) -+cdf_timespec_to_timestamp(cdf_timestamp_t *t, const struct timeval *ts) - { - #ifndef __lint__ - (void)&t; -@@ -156,7 +157,7 @@ - errno = EINVAL; - return -1; - } -- *t = (ts->ts_nsec / 100) * CDF_TIME_PREC; -+ *t = (ts->ts_usec / CDF_TIME_PREC) * CDF_TIME_PREC; - *t = tm.tm_sec; - *t += tm.tm_min * 60; - *t += tm.tm_hour * 60 * 60; -@@ -181,7 +182,7 @@ - int - main(int argc, char *argv[]) - { -- struct timespec ts; -+ struct timeval ts; - char buf[25]; - static const cdf_timestamp_t tst = 0x01A5E403C2D59C00ULL; - static const char *ref = "Sat Apr 23 01:30:00 1977"; diff -u libmagic.orig/compress.c libmagic/compress.c --- libmagic.orig/compress.c 2017-11-02 21:25:39.000000000 +0100 -+++ libmagic/compress.c 2018-04-28 11:18:14.190722374 +0200 ++++ libmagic/compress.c 2018-04-30 11:42:57.189547987 +0200 @@ -2,7 +2,7 @@ * Copyright (c) Ian F. Darwin 1986-1995. * Software written by Ian F. Darwin and others; @@ -2048,7 +1978,7 @@ diff -u libmagic.orig/compress.c libmagic/compress.c +#endif /* if PHP_FILEINFO_UNCOMPRESS */ diff -u libmagic.orig/der.c libmagic/der.c --- libmagic.orig/der.c 2017-02-10 19:14:01.000000000 +0100 -+++ libmagic/der.c 2018-04-27 19:30:49.682262679 +0200 ++++ libmagic/der.c 2018-04-30 11:42:57.277547743 +0200 @@ -51,7 +51,9 @@ #include "magic.h" #include "der.h" @@ -2068,7 +1998,24 @@ diff -u libmagic.orig/der.c libmagic/der.c strlcpy(buf, der__tag[tag], len); else snprintf(buf, len, "%#x", tag); -@@ -343,7 +345,7 @@ +@@ -218,6 +220,7 @@ + static int + der_data(char *buf, size_t blen, uint32_t tag, const void *q, uint32_t len) + { ++ uint32_t i = 0; + const uint8_t *d = CAST(const uint8_t *, q); + switch (tag) { + case DER_TAG_PRINTABLE_STRING: +@@ -229,7 +232,7 @@ + break; + } + +- for (uint32_t i = 0; i < len; i++) { ++ for (; i < len; i++) { + uint32_t z = i << 1; + if (z < blen - 2) + snprintf(buf + z, blen - z, "%.2x", d[i]); +@@ -343,7 +346,7 @@ default: break; } @@ -2077,7 +2024,7 @@ diff -u libmagic.orig/der.c libmagic/der.c for (uint32_t i = 0; i < len; i++) printf("%.2x", d[i]); printf("\n"); -@@ -367,7 +369,7 @@ +@@ -367,7 +370,7 @@ if (p + x >= ep) break; uint32_t len = getlength(p, &x, ep - p + x); @@ -2088,7 +2035,7 @@ diff -u libmagic.orig/der.c libmagic/der.c der_tag(buf, sizeof(buf), tag), len); diff -u libmagic.orig/elfclass.h libmagic/elfclass.h --- libmagic.orig/elfclass.h 2014-12-17 00:18:40.000000000 +0100 -+++ libmagic/elfclass.h 2018-04-27 19:30:49.866254276 +0200 ++++ libmagic/elfclass.h 2018-04-30 11:43:04.969526440 +0200 @@ -1,7 +1,7 @@ /* * Copyright (c) Christos Zoulas 2008. @@ -2136,7 +2083,7 @@ diff -u libmagic.orig/elfclass.h libmagic/elfclass.h (int)elf_getu16(swap, elfhdr.e_shstrndx), diff -u libmagic.orig/encoding.c libmagic/encoding.c --- libmagic.orig/encoding.c 2017-11-02 21:25:39.000000000 +0100 -+++ libmagic/encoding.c 2018-04-28 11:08:01.380663120 +0200 ++++ libmagic/encoding.c 2018-04-30 11:46:38.432940402 +0200 @@ -88,12 +88,12 @@ *code_mime = "binary"; @@ -2166,7 +2113,7 @@ diff -u libmagic.orig/encoding.c libmagic/encoding.c } diff -u libmagic.orig/file.h libmagic/file.h --- libmagic.orig/file.h 2018-03-11 01:46:42.000000000 +0100 -+++ libmagic/file.h 2018-04-27 19:30:50.194239284 +0200 ++++ libmagic/file.h 2018-04-30 11:43:05.041526241 +0200 @@ -27,21 +27,15 @@ */ /* @@ -2452,7 +2399,7 @@ diff -u libmagic.orig/file.h libmagic/file.h #endif diff -u libmagic.orig/fsmagic.c libmagic/fsmagic.c --- libmagic.orig/fsmagic.c 2017-05-24 21:17:50.000000000 +0200 -+++ libmagic/fsmagic.c 2018-04-27 19:30:50.306234161 +0200 ++++ libmagic/fsmagic.c 2018-04-30 11:42:57.433547312 +0200 @@ -2,7 +2,7 @@ * Copyright (c) Ian F. Darwin 1986-1995. * Software written by Ian F. Darwin and others; @@ -2824,7 +2771,7 @@ diff -u libmagic.orig/fsmagic.c libmagic/fsmagic.c case S_IFSOCK: diff -u libmagic.orig/funcs.c libmagic/funcs.c --- libmagic.orig/funcs.c 2017-11-02 21:25:39.000000000 +0100 -+++ libmagic/funcs.c 2018-04-28 12:46:26.840103237 +0200 ++++ libmagic/funcs.c 2018-04-30 13:51:02.523987958 +0200 @@ -31,7 +31,6 @@ #endif /* lint */ @@ -2881,14 +2828,14 @@ diff -u libmagic.orig/funcs.c libmagic/funcs.c - fprintf(stderr, "vasprintf failed (%s)", strerror(errno)); - return -1; -} -+extern public void convert_libmagic_pattern(zval *pattern, char *val, int len, int options); ++extern public void convert_libmagic_pattern(zval *pattern, char *val, size_t len, uint32_t options); protected int file_printf(struct magic_set *ms, const char *fmt, ...) { - int rv; va_list ap; -+ int len; ++ size_t len; + char *buf = NULL, *newstr; va_start(ap, fmt); @@ -3086,7 +3033,7 @@ diff -u libmagic.orig/funcs.c libmagic/funcs.c - } - rv = nm; + zval patt; -+ int opts = 0; ++ uint32_t opts = 0; + pcre_cache_entry *pce; + zend_string *res; + zend_string *repl; @@ -3201,7 +3148,7 @@ diff -u libmagic.orig/funcs.c libmagic/funcs.c diff -u libmagic.orig/magic.c libmagic/magic.c --- libmagic.orig/magic.c 2017-08-28 15:39:18.000000000 +0200 -+++ libmagic/magic.c 2018-04-27 19:30:50.918206168 +0200 ++++ libmagic/magic.c 2018-04-30 11:42:57.673546646 +0200 @@ -25,11 +25,6 @@ * SUCH DAMAGE. */ @@ -3678,7 +3625,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 2018-04-23 20:45:58.824428361 +0200 -+++ libmagic/magic.h 2018-04-27 19:30:51.050200127 +0200 ++++ libmagic/magic.h 2018-04-30 11:43:05.137525976 +0200 @@ -122,6 +122,7 @@ const char *magic_getpath(const char *, int); @@ -3689,7 +3636,7 @@ diff -u libmagic.orig/magic.h libmagic/magic.h diff -u libmagic.orig/print.c libmagic/print.c --- libmagic.orig/print.c 2017-02-10 19:14:01.000000000 +0100 -+++ libmagic/print.c 2018-04-28 11:22:53.605682359 +0200 ++++ libmagic/print.c 2018-04-30 11:42:57.733546480 +0200 @@ -2,7 +2,7 @@ * Copyright (c) Ian F. Darwin 1986-1995. * Software written by Ian F. Darwin and others; @@ -3738,7 +3685,7 @@ diff -u libmagic.orig/print.c libmagic/print.c if (m->str_flags) { (void) fputc('/', stderr); if (m->str_flags & STRING_COMPACT_WHITESPACE) -@@ -215,30 +222,30 @@ +@@ -215,26 +222,26 @@ file_magwarn(struct magic_set *ms, const char *f, ...) { va_list va; @@ -3775,13 +3722,7 @@ diff -u libmagic.orig/print.c libmagic/print.c + struct tm *tm = NULL; if (flags & FILE_T_WINDOWS) { -- struct timespec ts; -- cdf_timestamp_to_timespec(&ts, CAST(cdf_timestamp_t, v)); -+ struct timeval ts; -+ cdf_timestamp_to_timespec(&ts, t); - t = ts.tv_sec; - } else { - // XXX: perhaps detect and print something if overflow + struct timespec ts; @@ -247,9 +254,29 @@ } @@ -3816,7 +3757,7 @@ diff -u libmagic.orig/print.c libmagic/print.c goto out; diff -u libmagic.orig/readcdf.c libmagic/readcdf.c --- libmagic.orig/readcdf.c 2017-11-02 21:25:39.000000000 +0100 -+++ libmagic/readcdf.c 2018-04-28 08:59:06.029692824 +0200 ++++ libmagic/readcdf.c 2018-04-30 11:42:57.805546280 +0200 @@ -31,7 +31,11 @@ #include @@ -3829,18 +3770,7 @@ diff -u libmagic.orig/readcdf.c libmagic/readcdf.c #include #include #include -@@ -75,6 +79,10 @@ - { NULL, NULL, }, - }; - -+#ifdef PHP_WIN32 -+# define strcasestr strstr -+#endif -+ - static const struct cv { - uint64_t clsid[2]; - const char *mime; -@@ -104,10 +112,6 @@ +@@ -104,10 +108,6 @@ if (clsid[0] == cv[i].clsid[0] && clsid[1] == cv[i].clsid[1]) return cv[i].mime; } @@ -3851,7 +3781,7 @@ diff -u libmagic.orig/readcdf.c libmagic/readcdf.c return NULL; } -@@ -116,30 +120,14 @@ +@@ -116,30 +116,14 @@ { size_t i; const char *rv = NULL; @@ -3884,14 +3814,7 @@ diff -u libmagic.orig/readcdf.c libmagic/readcdf.c return rv; } -@@ -149,12 +137,14 @@ - { - size_t i; - cdf_timestamp_t tp; -- struct timespec ts; -+ struct timeval ts; - char buf[64]; - const char *str = NULL; +@@ -155,6 +139,8 @@ const char *s, *e; int len; @@ -3900,21 +3823,7 @@ diff -u libmagic.orig/readcdf.c libmagic/readcdf.c if (!NOTMIME(ms) && root_storage) str = cdf_clsid_to_mime(root_storage->d_storage_uuid, clsid2mime); -@@ -234,8 +224,11 @@ - return -1; - } else { - char *c, *ec; -- cdf_timestamp_to_timespec(&ts, tp); -- c = cdf_ctime(&ts.tv_sec, tbuf); -+ const time_t sec = ts.tv_sec; -+ if (cdf_timestamp_to_timespec(&ts, tp) == -1) { -+ return -1; -+ } -+ c = cdf_ctime(&sec, tbuf); - if (c != NULL && - (ec = strchr(c, '\n')) != NULL) - *ec = '\0'; -@@ -281,10 +274,10 @@ +@@ -281,10 +267,10 @@ if (file_printf(ms, "%s%s", cdf_u16tos8(buf, ce[i].ce_namlen, ce[i].ce_name), i == cat->cat_num - 1 ? "]" : ", ") == -1) { @@ -3927,7 +3836,7 @@ diff -u libmagic.orig/readcdf.c libmagic/readcdf.c } else { if (file_printf(ms, "application/CDFV2") == -1) return -1; -@@ -345,7 +338,7 @@ +@@ -345,7 +331,7 @@ } m = cdf_file_property_info(ms, info, count, root_storage); @@ -3936,7 +3845,7 @@ diff -u libmagic.orig/readcdf.c libmagic/readcdf.c return m == -1 ? -2 : m; } -@@ -353,11 +346,11 @@ +@@ -353,11 +339,11 @@ #ifdef notdef private char * format_clsid(char *buf, size_t len, const uint64_t uuid[2]) { @@ -3950,7 +3859,7 @@ diff -u libmagic.orig/readcdf.c libmagic/readcdf.c (uuid[1] >> 48) & (uint64_t)0x0000000000000ffffULL, (uuid[1] >> 0) & (uint64_t)0x0000fffffffffffffULL); return buf; -@@ -436,7 +429,7 @@ +@@ -436,7 +422,7 @@ const char *sections[5]; const int types[5]; } sectioninfo[] = { @@ -3959,7 +3868,7 @@ diff -u libmagic.orig/readcdf.c libmagic/readcdf.c { "EncryptedPackage", "EncryptedSummary", NULL, NULL, NULL, -@@ -448,7 +441,7 @@ +@@ -448,7 +434,7 @@ }, }, @@ -3968,7 +3877,7 @@ diff -u libmagic.orig/readcdf.c libmagic/readcdf.c { #if 0 "TaxForms", "PDFTaxForms", "modulesInBackup", -@@ -655,11 +648,11 @@ +@@ -655,11 +641,11 @@ cdf_zero_stream(&scn); cdf_zero_stream(&sst); out3: @@ -3985,7 +3894,7 @@ diff -u libmagic.orig/readcdf.c libmagic/readcdf.c if (NOTMIME(ms)) { diff -u libmagic.orig/softmagic.c libmagic/softmagic.c --- libmagic.orig/softmagic.c 2018-04-15 20:49:15.000000000 +0200 -+++ libmagic/softmagic.c 2018-04-27 19:30:51.678171356 +0200 ++++ libmagic/softmagic.c 2018-04-30 13:51:02.611987667 +0200 @@ -43,6 +43,10 @@ #include #include "der.h" @@ -4246,7 +4155,7 @@ diff -u libmagic.orig/softmagic.c libmagic/softmagic.c } +public void -+convert_libmagic_pattern(zval *pattern, char *val, int len, int options) ++convert_libmagic_pattern(zval *pattern, char *val, size_t len, uint32_t options) +{ + int i, j=0; + zend_string *t; @@ -4291,7 +4200,7 @@ diff -u libmagic.orig/softmagic.c libmagic/softmagic.c - file_regex_t rx; - const char *search; + zval pattern; -+ int options = 0; ++ uint32_t options = 0; + pcre_cache_entry *pce; - if (ms->search.s == NULL) @@ -4415,7 +4324,7 @@ diff -u libmagic.orig/softmagic.c libmagic/softmagic.c case FILE_INDIRECT: diff -u libmagic.orig/strcasestr.c libmagic/strcasestr.c --- libmagic.orig/strcasestr.c 2014-05-13 18:48:12.000000000 +0200 -+++ libmagic/strcasestr.c 2018-04-27 19:30:52.154149541 +0200 ++++ libmagic/strcasestr.c 2018-04-30 11:42:57.969545825 +0200 @@ -39,6 +39,8 @@ #include "file.h" -- 2.40.0