com php-src: updated libmagic.patch: ext/fileinfo/libmagic.patch

From: Date: Tue, 17 Dec 2013 21:30:17 +0000
Subject: com php-src: updated libmagic.patch: ext/fileinfo/libmagic.patch
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-74479@lists.php.net to get a copy of this message
Commit: 957633097913fac1780a5987da8373a8fbdb4e12 Author: Anatol Belski <ab@php.net> Tue, 17 Dec 2013 13:30:17 -0800 Parents: 4cdcbeec7630e4825bebe86d672a553fcc20909d Branches: str_size_and_int64 Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=957633097913fac1780a5987da8373a8fbdb4e12 Log: updated libmagic.patch Changed paths: M ext/fileinfo/libmagic.patch

diff --git a/ext/fileinfo/libmagic.patch b/ext/fileinfo/libmagic.patch index 97e771e..9febb4b 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 2013-03-21 18:45:14.000000000 +0100 -+++ libmagic/apprentice.c 2013-04-27 13:53:32.175250261 +0200 +--- libmagic.orig/apprentice.c 2013-12-17 10:04:50.259271000 -0800 ++++ libmagic/apprentice.c 2013-12-03 04:10:37.054901500 -0800 @@ -29,6 +29,8 @@ * apprentice - make one pass through /etc/magic, learning its secrets. */ @@ -372,8 +372,9 @@ diff -u libmagic.orig/apprentice.c libmagic/apprentice.c uint32_t i, j; size_t files = 0, maxfiles = 0; - char **filearr = NULL, *mfn; +- struct stat st; + char **filearr = NULL; - struct stat st; ++ zend_stat_t st; struct magic_map *map; - DIR *dir; - struct dirent *d; @@ -429,8 +430,9 @@ diff -u libmagic.orig/apprentice.c libmagic/apprentice.c + php_stream_closedir(dir); goto out; } - if (stat(mfn, &st) == -1 || !S_ISREG(st.st_mode)) { +- if (stat(mfn, &st) == -1 || !S_ISREG(st.st_mode)) { - free(mfn); ++ if (zend_stat(mfn, &st) == -1 || !S_ISREG(st.st_mode)) { continue; } if (files >= maxfiles) { @@ -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) { @@ -676,7 +678,7 @@ diff -u libmagic.orig/apprentice.c libmagic/apprentice.c + if (NULL != fn) { + nentries = (uint32_t)(st.sb.st_size / sizeof(struct magic)); + entries = (uint32_t)(st.sb.st_size / sizeof(struct magic)); -+ if ((off_t)(entries * sizeof(struct magic)) != st.sb.st_size) { ++ if ((zend_off_t)(entries * sizeof(struct magic)) != st.sb.st_size) { + file_error(ms, 0, "Size of `%s' %llu is not a multiple of %zu", + dbname, (unsigned long long)st.sb.st_size, + sizeof(struct magic)); @@ -760,7 +762,7 @@ diff -u libmagic.orig/apprentice.c libmagic/apprentice.c assert(nm + sizeof(ar) < m); - if (lseek(fd, (off_t)m, SEEK_SET) != (off_t)m) { -+ if (php_stream_seek(stream,(off_t)sizeof(struct magic), SEEK_SET) != sizeof(struct magic)) { ++ if (php_stream_seek(stream,(zend_off_t)sizeof(struct magic), SEEK_SET) != sizeof(struct magic)) { file_error(ms, errno, "error seeking `%s'", dbname); goto out; } @@ -830,8 +832,8 @@ diff -u libmagic.orig/apprentice.c libmagic/apprentice.c m->str_flags = swap4(m->str_flags); } diff -u libmagic.orig/ascmagic.c libmagic/ascmagic.c ---- libmagic.orig/ascmagic.c 2012-10-31 18:03:01.000000000 +0100 -+++ libmagic/ascmagic.c 2013-04-08 15:42:57.328298809 +0200 +--- libmagic.orig/ascmagic.c 2013-12-17 10:04:50.259271000 -0800 ++++ libmagic/ascmagic.c 2013-11-04 22:28:17.402901500 -0800 @@ -139,7 +139,7 @@ /* malloc size is a conservative overestimate; could be improved, or at least realloced after conversion. */ @@ -860,8 +862,8 @@ diff -u libmagic.orig/ascmagic.c libmagic/ascmagic.c return rv; } diff -u libmagic.orig/cdf.c libmagic/cdf.c ---- libmagic.orig/cdf.c 2013-03-21 18:45:14.000000000 +0100 -+++ libmagic/cdf.c 2013-04-08 15:42:57.328298809 +0200 +--- libmagic.orig/cdf.c 2013-12-17 10:04:50.259271000 -0800 ++++ libmagic/cdf.c 2013-12-03 04:10:37.054901500 -0800 @@ -43,7 +43,17 @@ #include <err.h> #endif @@ -880,18 +882,50 @@ diff -u libmagic.orig/cdf.c libmagic/cdf.c #include <string.h> #include <time.h> #include <ctype.h> +@@ -279,11 +289,11 @@ + } + + static ssize_t +-cdf_read(const cdf_info_t *info, off_t off, void *buf, size_t len) ++cdf_read(const cdf_info_t *info, zend_off_t off, void *buf, size_t len) + { + size_t siz = (size_t)off + len; + +- if ((off_t)(off + len) != (off_t)siz) { ++ if ((zend_off_t)(off + len) != (zend_off_t)siz) { + errno = EINVAL; + return -1; + } @@ -296,7 +306,10 @@ if (info->i_fd == -1) return -1; - if (pread(info->i_fd, buf, len, off) != (ssize_t)len) -+ if (FINFO_LSEEK_FUNC(info->i_fd, off, SEEK_SET) == (off_t)-1) ++ if (FINFO_LSEEK_FUNC(info->i_fd, off, SEEK_SET) == (zend_off_t)-1) + return -1; + + if (FINFO_READ_FUNC(info->i_fd, buf, len) != (ssize_t)len) return -1; return (ssize_t)len; +@@ -308,7 +321,7 @@ + char buf[512]; + + (void)memcpy(cdf_bo.s, "\01\02\03\04", 4); +- if (cdf_read(info, (off_t)0, buf, sizeof(buf)) == -1) ++ if (cdf_read(info, (zend_off_t)0, buf, sizeof(buf)) == -1) + return -1; + cdf_unpack_header(h, buf); + cdf_swap_header(h); +@@ -342,7 +355,7 @@ + size_t ss = CDF_SEC_SIZE(h); + size_t pos = CDF_SEC_POS(h, id); + assert(ss == len); +- return cdf_read(info, (off_t)pos, ((char *)buf) + offs, len); ++ return cdf_read(info, (zend_off_t)pos, ((char *)buf) + offs, len); + } + + ssize_t @@ -1132,7 +1145,7 @@ cdf_directory_t *d; char name[__arraycount(d->d_name)]; @@ -923,8 +957,8 @@ diff -u libmagic.orig/cdf.c libmagic/cdf.c (void)fprintf(stderr, "timestamp %s\n", buf); } else { diff -u libmagic.orig/cdf.h libmagic/cdf.h ---- libmagic.orig/cdf.h 2012-10-31 18:03:01.000000000 +0100 -+++ libmagic/cdf.h 2013-04-08 15:42:57.328298809 +0200 +--- libmagic.orig/cdf.h 2013-12-17 10:04:50.259271000 -0800 ++++ libmagic/cdf.h 2013-11-04 22:28:17.546901500 -0800 @@ -35,10 +35,12 @@ #ifndef _H_CDF_ #define _H_CDF_ @@ -966,8 +1000,8 @@ diff -u libmagic.orig/cdf.h libmagic/cdf.h 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 2012-10-31 18:03:01.000000000 +0100 -+++ libmagic/cdf_time.c 2013-04-08 15:42:57.328298809 +0200 +--- libmagic.orig/cdf_time.c 2013-12-17 10:04:50.259271000 -0800 ++++ libmagic/cdf_time.c 2013-11-04 22:28:17.566901500 -0800 @@ -96,7 +96,7 @@ } @@ -1026,8 +1060,8 @@ diff -u libmagic.orig/cdf_time.c libmagic/cdf_time.c 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 2013-01-06 21:35:43.000000000 +0100 -+++ libmagic/compress.c 2013-04-08 15:42:57.328298809 +0200 +--- libmagic.orig/compress.c 2013-12-17 10:04:50.259271000 -0800 ++++ libmagic/compress.c 2013-12-03 04:10:37.054901500 -0800 @@ -32,6 +32,7 @@ * uncompress(method, old, n, newch) - uncompress old into new, * using method, return sizeof new @@ -1113,7 +1147,7 @@ diff -u libmagic.orig/compress.c libmagic/compress.c } (void)close(tfd); - if (lseek(fd, (off_t)0, SEEK_SET) == (off_t)-1) { -+ if (FINFO_LSEEK_FUNC(fd, (off_t)0, SEEK_SET) == (off_t)-1) { ++ if (FINFO_LSEEK_FUNC(fd, (zend_off_t)0, SEEK_SET) == (zend_off_t)-1) { file_badseek(ms); return -1; } @@ -1142,7 +1176,7 @@ diff -u libmagic.orig/compress.c libmagic/compress.c - _exit(1); - (void) lseek(0, (off_t)0, SEEK_SET); + (void) dup(fd); -+ (void) FINFO_LSEEK_FUNC(0, (off_t)0, SEEK_SET); ++ (void) FINFO_LSEEK_FUNC(0, (zend_off_t)0, SEEK_SET); } else { - if (dup(fdin[0]) == -1) - _exit(1); @@ -1188,9 +1222,39 @@ diff -u libmagic.orig/compress.c libmagic/compress.c } -#endif +#endif /* if PHP_FILEINFO_UNCOMPRESS */ +diff -u libmagic.orig/elfclass.h libmagic/elfclass.h +--- libmagic.orig/elfclass.h 2013-12-17 10:04:50.259271000 -0800 ++++ libmagic/elfclass.h 2013-12-03 04:10:37.054901500 -0800 +@@ -37,7 +37,7 @@ + case ET_CORE: + flags |= FLAGS_IS_CORE; + if (dophn_core(ms, clazz, swap, fd, +- (off_t)elf_getu(swap, elfhdr.e_phoff), ++ (zend_off_t)elf_getu(swap, elfhdr.e_phoff), + elf_getu16(swap, elfhdr.e_phnum), + (size_t)elf_getu16(swap, elfhdr.e_phentsize), + fsize, &flags) == -1) +@@ -47,7 +47,7 @@ + case ET_EXEC: + case ET_DYN: + if (dophn_exec(ms, clazz, swap, fd, +- (off_t)elf_getu(swap, elfhdr.e_phoff), ++ (zend_off_t)elf_getu(swap, elfhdr.e_phoff), + elf_getu16(swap, elfhdr.e_phnum), + (size_t)elf_getu16(swap, elfhdr.e_phentsize), + fsize, &flags, elf_getu16(swap, elfhdr.e_shnum)) +@@ -56,7 +56,7 @@ + /*FALLTHROUGH*/ + case ET_REL: + if (doshn(ms, clazz, swap, fd, +- (off_t)elf_getu(swap, elfhdr.e_shoff), ++ (zend_off_t)elf_getu(swap, elfhdr.e_shoff), + elf_getu16(swap, elfhdr.e_shnum), + (size_t)elf_getu16(swap, elfhdr.e_shentsize), + fsize, &flags, elf_getu16(swap, elfhdr.e_machine), diff -u libmagic.orig/file.h libmagic/file.h ---- libmagic.orig/file.h 2013-02-18 16:40:59.000000000 +0100 -+++ libmagic/file.h 2013-04-08 15:42:57.328298809 +0200 +--- libmagic.orig/file.h 2013-12-17 10:04:50.259271000 -0800 ++++ libmagic/file.h 2013-12-03 04:10:37.054901500 -0800 @@ -33,11 +33,9 @@ #ifndef __file_h__ #define __file_h__ @@ -1277,6 +1341,15 @@ diff -u libmagic.orig/file.h libmagic/file.h void *map; /* internal resources used by entry */ struct mlist *next, *prev; }; +@@ -393,7 +395,7 @@ + struct { + const char *s; /* start of search in original source */ + size_t s_len; /* length of search region */ +- size_t offset; /* starting offset in source: XXX - should this be off_t? */ ++ size_t offset; /* starting offset in source: XXX - should this be zend_off_t? */ + size_t rm_len; /* match length */ + } search; + @@ -411,21 +413,18 @@ protected const char *file_fmttime(uint64_t, int, char *); protected struct magic_set *file_ms_alloc(int); @@ -1391,8 +1464,8 @@ 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 2013-03-21 18:45:14.000000000 +0100 -+++ libmagic/fsmagic.c 2013-04-08 15:42:57.328298809 +0200 +--- libmagic.orig/fsmagic.c 2013-12-17 10:04:50.259271000 -0800 ++++ libmagic/fsmagic.c 2013-12-03 04:10:37.058901500 -0800 @@ -59,27 +59,21 @@ # define minor(dev) ((dev) & 0xff) #endif @@ -1440,7 +1513,7 @@ diff -u libmagic.orig/fsmagic.c libmagic/fsmagic.c protected int -file_fsmagic(struct magic_set *ms, const char *fn, struct stat *sb) -+file_fsmagic(struct magic_set *ms, const char *fn, struct stat *sb, php_stream *stream) ++file_fsmagic(struct magic_set *ms, const char *fn, zend_stat_t *sb, php_stream *stream) { int ret, did = 0; int mime = ms->flags & MAGIC_MIME; @@ -1758,8 +1831,8 @@ diff -u libmagic.orig/fsmagic.c libmagic/fsmagic.c return ret; } diff -u libmagic.orig/funcs.c libmagic/funcs.c ---- libmagic.orig/funcs.c 2012-10-31 18:03:01.000000000 +0100 -+++ libmagic/funcs.c 2013-04-08 15:42:57.328298809 +0200 +--- libmagic.orig/funcs.c 2013-12-17 10:04:50.259271000 -0800 ++++ libmagic/funcs.c 2013-12-03 04:10:37.058901500 -0800 @@ -41,52 +41,42 @@ #if defined(HAVE_WCTYPE_H) #include <wctype.h> @@ -1978,7 +2051,7 @@ diff -u libmagic.orig/funcs.c libmagic/funcs.c if (ms->c.li == NULL) { file_oomem(ms, len); return -1; -@@ -433,29 +437,47 @@ +@@ -433,29 +437,48 @@ return ms->o.buf == NULL ? 0 : strlen(ms->o.buf); } @@ -1994,14 +2067,15 @@ diff -u libmagic.orig/funcs.c libmagic/funcs.c + pcre_cache_entry *pce; + char *res; + zval *repl; -+ int res_len, rep_cnt = 0; ++ zend_str_size_int res_len; ++ int rep_cnt = 0; + TSRMLS_FETCH(); + + MAKE_STD_ZVAL(patt); + ZVAL_STRINGL(patt, pat, strlen(pat), 0); + opts |= PCRE_MULTILINE; + convert_libmagic_pattern(patt, opts); -+ if ((pce = pcre_get_compiled_regex_cache(Z_STRVAL_P(patt), Z_STRLEN_P(patt) TSRMLS_CC)) == NULL) { ++ if ((pce = pcre_get_compiled_regex_cache(Z_STRVAL_P(patt), Z_STRSIZE_P(patt) TSRMLS_CC)) == NULL) { + zval_dtor(patt); + FREE_ZVAL(patt); + return -1; @@ -2047,8 +2121,8 @@ diff -u libmagic.orig/funcs.c libmagic/funcs.c } + diff -u libmagic.orig/magic.c libmagic/magic.c ---- libmagic.orig/magic.c 2013-01-11 17:43:09.000000000 +0100 -+++ libmagic/magic.c 2013-04-27 13:53:32.175250261 +0200 +--- libmagic.orig/magic.c 2013-12-17 10:04:50.259271000 -0800 ++++ libmagic/magic.c 2013-11-04 22:28:17.418901500 -0800 @@ -25,11 +25,6 @@ * SUCH DAMAGE. */ @@ -2391,8 +2465,8 @@ diff -u libmagic.orig/magic.c libmagic/magic.c public const char * magic_error(struct magic_set *ms) diff -u libmagic.orig/magic.h libmagic/magic.h ---- libmagic.orig/magic.h 2013-03-21 18:52:42.000000000 +0100 -+++ libmagic/magic.h 2013-04-08 15:42:57.328298809 +0200 +--- libmagic.orig/magic.h 2013-12-17 10:04:50.259271000 -0800 ++++ libmagic/magic.h 2013-11-04 22:28:17.458901500 -0800 @@ -87,6 +87,7 @@ const char *magic_getpath(const char *, int); @@ -2410,8 +2484,8 @@ diff -u libmagic.orig/magic.h libmagic/magic.h int magic_errno(magic_t); diff -u libmagic.orig/print.c libmagic/print.c ---- libmagic.orig/print.c 2013-03-21 18:45:14.000000000 +0100 -+++ libmagic/print.c 2013-04-27 13:53:32.175250261 +0200 +--- libmagic.orig/print.c 2013-12-17 10:04:50.259271000 -0800 ++++ libmagic/print.c 2013-11-04 22:28:17.390901500 -0800 @@ -28,13 +28,17 @@ /* * print.c - debugging printout routines @@ -2641,8 +2715,8 @@ diff -u libmagic.orig/print.c libmagic/print.c t = ts.tv_sec; } diff -u libmagic.orig/readcdf.c libmagic/readcdf.c ---- libmagic.orig/readcdf.c 2012-10-31 18:03:01.000000000 +0100 -+++ libmagic/readcdf.c 2013-04-08 15:42:57.328298809 +0200 +--- libmagic.orig/readcdf.c 2013-12-17 10:04:50.259271000 -0800 ++++ libmagic/readcdf.c 2013-12-03 04:10:37.058901500 -0800 @@ -30,7 +30,11 @@ #endif @@ -2679,18 +2753,22 @@ 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,8 +142,12 @@ return -1; } else { char *c, *ec; - cdf_timestamp_to_timespec(&ts, tp); +- c = cdf_ctime(&ts.tv_sec, tbuf); ++ const time_t tmt; + if (cdf_timestamp_to_timespec(&ts, tp) == -1) { + return -1; + } - c = cdf_ctime(&ts.tv_sec, tbuf); ++ c = cdf_ctime(&tmt, tbuf); ++ ts.tv_sec = (long)tmt; if ((ec = strchr(c, '\n')) != NULL) *ec = '\0'; -@@ -314,9 +324,9 @@ + +@@ -314,9 +326,9 @@ if (file_printf(ms, "Composite Document File V2 Document") == -1) return -1; @@ -2704,20 +2782,31 @@ diff -u libmagic.orig/readcdf.c libmagic/readcdf.c if (file_printf(ms, "application/CDFV2-corrupt") == -1) return -1; diff -u libmagic.orig/readelf.c libmagic/readelf.c ---- libmagic.orig/readelf.c 2013-03-21 18:45:14.000000000 +0100 -+++ libmagic/readelf.c 2013-04-08 15:42:57.328298809 +0200 -@@ -48,8 +48,8 @@ - private int dophn_exec(struct magic_set *, int, int, int, off_t, int, size_t, - off_t, int *, int); - private int doshn(struct magic_set *, int, int, int, off_t, int, size_t, +--- libmagic.orig/readelf.c 2013-12-17 10:04:50.259271000 -0800 ++++ libmagic/readelf.c 2013-12-03 04:10:37.058901500 -0800 +@@ -42,14 +42,14 @@ + #include "magic.h" + + #ifdef ELFCORE +-private int dophn_core(struct magic_set *, int, int, int, off_t, int, size_t, +- off_t, int *); ++private int dophn_core(struct magic_set *, int, int, int, zend_off_t, int, size_t, ++ zend_off_t, int *); + #endif +-private int dophn_exec(struct magic_set *, int, int, int, off_t, int, size_t, +- off_t, int *, int); +-private int doshn(struct magic_set *, int, int, int, off_t, int, size_t, - off_t, int *, int, int); -private size_t donote(struct magic_set *, void *, size_t, size_t, int, -+ off_t, int *, int); ++private int dophn_exec(struct magic_set *, int, int, int, zend_off_t, int, size_t, ++ zend_off_t, int *, int); ++private int doshn(struct magic_set *, int, int, int, zend_off_t, int, size_t, ++ zend_off_t, int *, int); +private size_t donote(struct magic_set *, unsigned char *, size_t, size_t, int, int, size_t, int *); #define ELF_ALIGN(a) ((((a) + align - 1) / align) * align) -@@ -127,11 +127,17 @@ +@@ -127,18 +127,24 @@ #define elf_getu16(swap, value) getu16(swap, value) #define elf_getu32(swap, value) getu32(swap, value) @@ -2738,7 +2827,30 @@ diff -u libmagic.orig/readelf.c libmagic/readelf.c #define xsh_sizeof (clazz == ELFCLASS32 \ ? sizeof(sh32) \ : sizeof(sh64)) -@@ -168,8 +174,8 @@ + #define xsh_size (size_t)(clazz == ELFCLASS32 \ + ? elf_getu32(swap, sh32.sh_size) \ + : elf_getu64(swap, sh64.sh_size)) +-#define xsh_offset (off_t)(clazz == ELFCLASS32 \ ++#define xsh_offset (zend_off_t)(clazz == ELFCLASS32 \ + ? elf_getu32(swap, sh32.sh_offset) \ + : elf_getu64(swap, sh64.sh_offset)) + #define xsh_type (clazz == ELFCLASS32 \ +@@ -156,20 +162,20 @@ + #define xph_type (clazz == ELFCLASS32 \ + ? elf_getu32(swap, ph32.p_type) \ + : elf_getu32(swap, ph64.p_type)) +-#define xph_offset (off_t)(clazz == ELFCLASS32 \ ++#define xph_offset (zend_off_t)(clazz == ELFCLASS32 \ + ? elf_getu32(swap, ph32.p_offset) \ + : elf_getu64(swap, ph64.p_offset)) + #define xph_align (size_t)((clazz == ELFCLASS32 \ +- ? (off_t) (ph32.p_align ? \ ++ ? (zend_off_t) (ph32.p_align ? \ + elf_getu32(swap, ph32.p_align) : 4) \ +- : (off_t) (ph64.p_align ? \ ++ : (zend_off_t) (ph64.p_align ? \ + elf_getu64(swap, ph64.p_align) : 4))) + #define xph_filesz (size_t)((clazz == ELFCLASS32 \ ? elf_getu32(swap, ph32.p_filesz) \ : elf_getu64(swap, ph64.p_filesz))) #define xnh_addr (clazz == ELFCLASS32 \ @@ -2760,7 +2872,14 @@ diff -u libmagic.orig/readelf.c libmagic/readelf.c #define xcap_sizeof (clazz == ELFCLASS32 \ ? sizeof cap32 \ : sizeof cap64) -@@ -292,7 +298,7 @@ +@@ -287,12 +293,12 @@ + #define FLAGS_IS_CORE 0x10 + + private int +-dophn_core(struct magic_set *ms, int clazz, int swap, int fd, off_t off, +- int num, size_t size, off_t fsize, int *flags) ++dophn_core(struct magic_set *ms, int clazz, int swap, int fd, zend_off_t off, ++ int num, size_t size, zend_off_t fsize, int *flags) { Elf32_Phdr ph32; Elf64_Phdr ph64; @@ -2774,7 +2893,7 @@ diff -u libmagic.orig/readelf.c libmagic/readelf.c */ for ( ; num; num--) { - if (pread(fd, xph_addr, xph_sizeof, off) == -1) { -+ if (FINFO_LSEEK_FUNC(fd, off, SEEK_SET) == (off_t)-1) { ++ if (FINFO_LSEEK_FUNC(fd, off, SEEK_SET) == (zend_off_t)-1) { + file_badseek(ms); + return -1; + } @@ -2788,7 +2907,7 @@ diff -u libmagic.orig/readelf.c libmagic/readelf.c */ - len = xph_filesz < sizeof(nbuf) ? xph_filesz : sizeof(nbuf); - if ((bufsize = pread(fd, nbuf, len, xph_offset)) == -1) { -+ if (FINFO_LSEEK_FUNC(fd, xph_offset, SEEK_SET) == (off_t)-1) { ++ if (FINFO_LSEEK_FUNC(fd, xph_offset, SEEK_SET) == (zend_off_t)-1) { + file_badseek(ms); + return -1; + } @@ -2798,6 +2917,24 @@ diff -u libmagic.orig/readelf.c libmagic/readelf.c file_badread(ms); return -1; } +@@ -834,14 +849,14 @@ + }; + + private int +-doshn(struct magic_set *ms, int clazz, int swap, int fd, off_t off, int num, +- size_t size, off_t fsize, int *flags, int mach, int strtab) ++doshn(struct magic_set *ms, int clazz, int swap, int fd, zend_off_t off, int num, ++ size_t size, zend_off_t fsize, int *flags, int mach, int strtab) + { + Elf32_Shdr sh32; + Elf64_Shdr sh64; + int stripped = 1; + void *nbuf; +- off_t noff, coff, name_off; ++ zend_off_t noff, coff, name_off; + uint64_t cap_hw1 = 0; /* SunOS 5.x hardware capabilites */ + uint64_t cap_sf1 = 0; /* SunOS 5.x software capabilites */ + char name[50]; @@ -852,24 +867,12 @@ return 0; } @@ -2813,7 +2950,7 @@ diff -u libmagic.orig/readelf.c libmagic/readelf.c - /* Read the name of this section. */ - if (pread(fd, name, sizeof(name), name_off + xsh_name) == -1) { - file_badread(ms); -+ if (FINFO_LSEEK_FUNC(fd, off, SEEK_SET) == (off_t)-1) { ++ if (FINFO_LSEEK_FUNC(fd, off, SEEK_SET) == (zend_off_t)-1) { + file_badseek(ms); return -1; } @@ -2826,7 +2963,7 @@ diff -u libmagic.orig/readelf.c libmagic/readelf.c file_badread(ms); return -1; } -@@ -894,14 +897,17 @@ +@@ -894,41 +897,35 @@ /* Things we can determine when we seek */ switch (xsh_type) { case SHT_NOTE: @@ -2834,8 +2971,8 @@ diff -u libmagic.orig/readelf.c libmagic/readelf.c - file_error(ms, errno, "Cannot allocate memory" - " for note"); + nbuf = emalloc((size_t)xsh_size); -+ if ((noff = FINFO_LSEEK_FUNC(fd, (off_t)xsh_offset, SEEK_SET)) == -+ (off_t)-1) { ++ if ((noff = FINFO_LSEEK_FUNC(fd, (zend_off_t)xsh_offset, SEEK_SET)) == ++ (zend_off_t)-1) { + file_badread(ms); + efree(nbuf); return -1; @@ -2849,8 +2986,10 @@ diff -u libmagic.orig/readelf.c libmagic/readelf.c return -1; } -@@ -910,25 +916,16 @@ - if (noff >= (off_t)xsh_size) + noff = 0; + for (;;) { +- if (noff >= (off_t)xsh_size) ++ if (noff >= (zend_off_t)xsh_size) break; noff = donote(ms, nbuf, (size_t)noff, - xsh_size, clazz, swap, 4, flags); @@ -2875,14 +3014,17 @@ diff -u libmagic.orig/readelf.c libmagic/readelf.c - } - - if (lseek(fd, xsh_offset, SEEK_SET) == (off_t)-1) { -+ if (FINFO_LSEEK_FUNC(fd, (off_t)xsh_offset, SEEK_SET) == -+ (off_t)-1) { ++ if (FINFO_LSEEK_FUNC(fd, (zend_off_t)xsh_offset, SEEK_SET) == ++ (zend_off_t)-1) { file_badseek(ms); return -1; } -@@ -940,7 +937,7 @@ +@@ -938,9 +935,9 @@ + Elf64_Cap cap64; + char cbuf[/*CONSTCOND*/ MAX(sizeof cap32, sizeof cap64)]; - if ((coff += xcap_sizeof) > (off_t)xsh_size) +- if ((coff += xcap_sizeof) > (off_t)xsh_size) ++ if ((coff += xcap_sizeof) > (zend_off_t)xsh_size) break; - if (read(fd, cbuf, (size_t)xcap_sizeof) != + if (FINFO_READ_FUNC(fd, cbuf, (size_t)xcap_sizeof) != @@ -2905,6 +3047,17 @@ diff -u libmagic.orig/readelf.c libmagic/readelf.c if (file_printf(ms, ", %sstripped", stripped ? "" : "not ") == -1) return -1; if (cap_hw1) { +@@ -1042,8 +1038,8 @@ + * otherwise it's statically linked. + */ + private int +-dophn_exec(struct magic_set *ms, int clazz, int swap, int fd, off_t off, +- int num, size_t size, off_t fsize, int *flags, int sh_num) ++dophn_exec(struct magic_set *ms, int clazz, int swap, int fd, zend_off_t off, ++ int num, size_t size, zend_off_t fsize, int *flags, int sh_num) + { + Elf32_Phdr ph32; + Elf64_Phdr ph64; @@ -1051,7 +1047,7 @@ const char *shared_libraries = ""; unsigned char nbuf[BUFSIZ]; @@ -2920,7 +3073,7 @@ diff -u libmagic.orig/readelf.c libmagic/readelf.c for ( ; num; num--) { - if (pread(fd, xph_addr, xph_sizeof, off) == -1) { - file_badread(ms); -+ if (FINFO_LSEEK_FUNC(fd, off, SEEK_SET) == (off_t)-1) { ++ if (FINFO_LSEEK_FUNC(fd, off, SEEK_SET) == (zend_off_t)-1) { + file_badseek(ms); + return -1; + } @@ -2937,7 +3090,7 @@ diff -u libmagic.orig/readelf.c libmagic/readelf.c - len = xph_filesz < sizeof(nbuf) ? xph_filesz - : sizeof(nbuf); - bufsize = pread(fd, nbuf, len, xph_offset); -+ if (FINFO_LSEEK_FUNC(fd, xph_offset, SEEK_SET) == (off_t)-1) { ++ if (FINFO_LSEEK_FUNC(fd, xph_offset, SEEK_SET) == (zend_off_t)-1) { + file_badseek(ms); + return -1; + } @@ -2946,18 +3099,27 @@ diff -u libmagic.orig/readelf.c libmagic/readelf.c if (bufsize == -1) { file_badread(ms); return -1; +@@ -1139,7 +1143,7 @@ + int clazz; + int swap; + struct stat st; +- off_t fsize; ++ zend_off_t fsize; + int flags = 0; + Elf32_Ehdr elf32hdr; + Elf64_Ehdr elf64hdr; @@ -1162,7 +1166,7 @@ /* * If we cannot seek, it must be a pipe, socket or fifo. */ - if((lseek(fd, (off_t)0, SEEK_SET) == (off_t)-1) && (errno == ESPIPE)) -+ if((FINFO_LSEEK_FUNC(fd, (off_t)0, SEEK_SET) == (off_t)-1) && (errno == ESPIPE)) ++ if((FINFO_LSEEK_FUNC(fd, (zend_off_t)0, SEEK_SET) == (zend_off_t)-1) && (errno == ESPIPE)) fd = file_pipe2file(ms, fd, buf, nbytes); if (fstat(fd, &st) == -1) { diff -u libmagic.orig/readelf.h libmagic/readelf.h ---- libmagic.orig/readelf.h 2013-03-21 18:45:14.000000000 +0100 -+++ libmagic/readelf.h 2013-03-31 16:57:18.499744030 +0200 +--- libmagic.orig/readelf.h 2013-12-17 10:04:50.259271000 -0800 ++++ libmagic/readelf.h 2013-11-04 22:28:17.378901500 -0800 @@ -44,9 +44,17 @@ typedef uint32_t Elf32_Word; typedef uint8_t Elf32_Char; @@ -2977,8 +3139,8 @@ diff -u libmagic.orig/readelf.h libmagic/readelf.h typedef uint32_t Elf64_Word; typedef uint8_t Elf64_Char; diff -u libmagic.orig/softmagic.c libmagic/softmagic.c ---- libmagic.orig/softmagic.c 2013-03-21 18:45:14.000000000 +0100 -+++ libmagic/softmagic.c 2013-05-14 11:00:07.044745939 +0200 +--- libmagic.orig/softmagic.c 2013-12-17 10:04:50.259271000 -0800 ++++ libmagic/softmagic.c 2013-12-03 04:10:37.058901500 -0800 @@ -41,6 +41,11 @@ #include <stdlib.h> #include <time.h> @@ -3113,7 +3275,7 @@ diff -u libmagic.orig/softmagic.c libmagic/softmagic.c } if (m->flag & INDIR) { -@@ -1644,9 +1624,6 @@ +@@ -1644,16 +1624,13 @@ if ((ms->flags & MAGIC_DEBUG) != 0) { mdebug(offset, (char *)(void *)p, sizeof(union VALUETYPE)); @@ -3123,6 +3285,14 @@ diff -u libmagic.orig/softmagic.c libmagic/softmagic.c } } + /* Verify we have enough data to match magic type */ + switch (m->type) { + case FILE_BYTE: +- if (nbytes < (offset + 1)) /* should alway be true */ ++ if (nbytes < (offset + 1)) /* should always be true */ + return 0; + break; + @@ -1717,12 +1694,12 @@ ms->o.buf = sbuf; ms->offset = soffset; @@ -3149,11 +3319,11 @@ diff -u libmagic.orig/softmagic.c libmagic/softmagic.c + int i, j=0; + char *t; + -+ t = (char *) safe_emalloc(Z_STRLEN_P(pattern), 2, 5); ++ t = (char *) safe_emalloc(Z_STRSIZE_P(pattern), 2, 5); + + t[j++] = '~'; + -+ for (i=0; i<Z_STRLEN_P(pattern); i++, j++) { ++ for (i=0; i<Z_STRSIZE_P(pattern); i++, j++) { + switch (Z_STRVAL_P(pattern)[i]) { + case '~': + t[j++] = '\\'; @@ -3175,7 +3345,7 @@ diff -u libmagic.orig/softmagic.c libmagic/softmagic.c + t[j]='\0'; + + Z_STRVAL_P(pattern) = t; -+ Z_STRLEN_P(pattern) = j; ++ Z_STRSIZE_P(pattern) = j; + +} + @@ -3244,7 +3414,7 @@ diff -u libmagic.orig/softmagic.c libmagic/softmagic.c + convert_libmagic_pattern(pattern, options); + + l = v = 0; -+ if ((pce = pcre_get_compiled_regex_cache(Z_STRVAL_P(pattern), Z_STRLEN_P(pattern) TSRMLS_CC)) == NULL) { ++ if ((pce = pcre_get_compiled_regex_cache(Z_STRVAL_P(pattern), Z_STRSIZE_P(pattern) TSRMLS_CC)) == NULL) { + zval_dtor(pattern); + FREE_ZVAL(pattern); + return -1; @@ -3318,7 +3488,7 @@ diff -u libmagic.orig/softmagic.c libmagic/softmagic.c + + MAKE_STD_ZVAL(pattern_match); + Z_STRVAL_P(pattern_match) = (char *)Z_STRVAL(matchcopy); -+ Z_STRLEN_P(pattern_match) = Z_STRLEN(matchcopy); ++ Z_STRSIZE_P(pattern_match) = Z_STRSIZE(matchcopy); + Z_TYPE_P(pattern_match) = IS_STRING; + + zval_dtor(&matchcopy); @@ -3348,7 +3518,7 @@ diff -u libmagic.orig/softmagic.c libmagic/softmagic.c + if ((pattern_match != NULL) && (pattern_offset != NULL)) { + ms->search.s += (int)Z_LVAL_P(pattern_offset); /* this is where the match starts */ + ms->search.offset += (size_t)Z_LVAL_P(pattern_offset); /* this is where the match starts as size_t */ -+ ms->search.rm_len = Z_STRLEN_P(pattern_match) /* This is the length of the matched pattern */; ++ ms->search.rm_len = Z_STRSIZE_P(pattern_match) /* This is the length of the matched pattern */; + v = 0; + + efree(pattern_match);
« previous php.cvs (#74479) next »