mirror of
https://github.com/php/php-src.git
synced 2024-09-22 02:17:32 +00:00
Upgrade bundled libmagic to 5.03 (fixes CDF parsing related issues)
Clean up / remove whitespace differences to make next merge easier Removed unnecessary files from trunk
This commit is contained in:
parent
832eb472c5
commit
1496161f01
4
NEWS
4
NEWS
@ -1,8 +1,11 @@
|
||||
PHP NEWS
|
||||
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||
?? ??? 20??, PHP 5.3.3
|
||||
- Upgraded bundled libmagic to version 5.03. (Mikko)
|
||||
|
||||
- Added missing host validation for HTTP urls inside FILTER_VALIDATE_URL.
|
||||
(Ilia)
|
||||
- Added stream_resolve_include_path(). (Mikko)
|
||||
|
||||
- Fixed bug #47409 (extract() problem with array containing word "this").
|
||||
(Ilia, chrisstocktonaz at gmail dot com)
|
||||
@ -36,7 +39,6 @@ PHP NEWS
|
||||
- Added support for CURLOPT_CERTINFO. FR #49253.
|
||||
(Linus Nielsen Feltzing <linus@haxx.se>)
|
||||
- Added client-side server name indication support in openssl. (Arnaud)
|
||||
- Added stream_resolve_include_path() (Mikko)
|
||||
|
||||
- Improved fix for bug #50006 (Segfault caused by uksort()). (Stas)
|
||||
|
||||
|
@ -34,7 +34,7 @@
|
||||
#include "file.h"
|
||||
|
||||
#ifndef lint
|
||||
FILE_RCSID("@(#)$File: apprentice.c,v 1.132 2008/03/28 18:19:30 christos Exp $")
|
||||
FILE_RCSID("@(#)$File: apprentice.c,v 1.151 2009/03/18 15:19:23 christos Exp $")
|
||||
#endif /* lint */
|
||||
|
||||
#include "magic.h"
|
||||
@ -44,7 +44,7 @@ FILE_RCSID("@(#)$File: apprentice.c,v 1.132 2008/03/28 18:19:30 christos Exp $")
|
||||
#ifdef PHP_WIN32
|
||||
#include "win32/unistd.h"
|
||||
#if _MSC_VER <= 1300
|
||||
#include "win32/php_strtoi64.h"
|
||||
# include "win32/php_strtoi64.h"
|
||||
#endif
|
||||
#define strtoull _strtoui64
|
||||
#else
|
||||
@ -55,7 +55,9 @@ FILE_RCSID("@(#)$File: apprentice.c,v 1.132 2008/03/28 18:19:30 christos Exp $")
|
||||
#include <assert.h>
|
||||
#include <ctype.h>
|
||||
#include <fcntl.h>
|
||||
|
||||
#ifndef PHP_WIN32
|
||||
#include <dirent.h>
|
||||
#endif
|
||||
|
||||
#define EATAB {while (isascii((unsigned char) *l) && \
|
||||
isspace((unsigned char) *l)) ++l;}
|
||||
@ -609,7 +611,11 @@ load_1(struct magic_set *ms, int action, const char *fn, int *errs,
|
||||
} else {
|
||||
|
||||
/* read and parse this file */
|
||||
#if (PHP_MAJOR_VERSION < 6)
|
||||
for (ms->line = 1; (line = php_stream_get_line(stream, buffer , BUFSIZ, &line_len)) != NULL; ms->line++) {
|
||||
#else
|
||||
for (ms->line = 1; (line = php_stream_get_line(stream, ZSTR(buffer), BUFSIZ, &line_len)) != NULL; ms->line++) {
|
||||
#endif
|
||||
if (line_len == 0) /* null line, garbage, etc */
|
||||
continue;
|
||||
|
||||
@ -851,9 +857,9 @@ file_signextend(struct magic_set *ms, struct magic *m, uint64_t v)
|
||||
case FILE_INDIRECT:
|
||||
break;
|
||||
default:
|
||||
if (ms->flags & MAGIC_CHECK) {
|
||||
file_magwarn(ms, "cannot happen: m->type=%d\n", m->type);
|
||||
}
|
||||
if (ms->flags & MAGIC_CHECK)
|
||||
file_magwarn(ms, "cannot happen: m->type=%d\n",
|
||||
m->type);
|
||||
return ~0U;
|
||||
}
|
||||
}
|
||||
@ -1669,7 +1675,7 @@ check_format(struct magic_set *ms, struct magic *m)
|
||||
*/
|
||||
file_magwarn(ms, "Printf format `%c' is not valid for type "
|
||||
"`%s' in description `%s'", *ptr ? *ptr : '?',
|
||||
file_names[m->type], m->desc);
|
||||
file_names[m->type], m->desc);
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
@ -27,10 +27,9 @@
|
||||
#include "file.h"
|
||||
|
||||
#ifndef lint
|
||||
FILE_RCSID("@(#)$File: apptype.c,v 1.7 2007/01/12 17:38:27 christos Exp $")
|
||||
FILE_RCSID("@(#)$File: apptype.c,v 1.11 2009/02/04 18:24:32 christos Exp $")
|
||||
#endif /* lint */
|
||||
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
* Copyright (c) Ian F. Darwin 1986-1995.
|
||||
* Software written by Ian F. Darwin and others;
|
||||
* maintained 1995-present by Christos Zoulas and others.
|
||||
*
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
@ -12,7 +12,7 @@
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
@ -36,7 +36,7 @@
|
||||
#include "file.h"
|
||||
|
||||
#ifndef lint
|
||||
FILE_RCSID("@(#)$File: ascmagic.c,v 1.62 2008/03/01 22:21:48 rrt Exp $")
|
||||
FILE_RCSID("@(#)$File: ascmagic.c,v 1.75 2009/02/03 20:27:51 christos Exp $")
|
||||
#endif /* lint */
|
||||
|
||||
#include "magic.h"
|
||||
@ -66,14 +66,14 @@ trim_nuls(const unsigned char *buf, size_t nbytes)
|
||||
{
|
||||
while (nbytes > 1 && buf[nbytes - 1] == '\0')
|
||||
nbytes--;
|
||||
|
||||
|
||||
return nbytes;
|
||||
}
|
||||
|
||||
protected int
|
||||
file_ascmagic(struct magic_set *ms, const unsigned char *buf, size_t nbytes)
|
||||
{
|
||||
unichar *ubuf = NULL;
|
||||
unichar *ubuf = NULL;
|
||||
size_t ulen;
|
||||
int rv = 1;
|
||||
|
||||
@ -264,7 +264,7 @@ subtype_identified:
|
||||
if (file_printf(ms, ", with") == -1)
|
||||
goto done;
|
||||
|
||||
if (n_crlf == 0 && n_cr == 0 && n_nel == 0 && n_lf == 0) {
|
||||
if (n_crlf == 0 && n_cr == 0 && n_nel == 0 && n_lf == 0) {
|
||||
if (file_printf(ms, " no") == -1)
|
||||
goto done;
|
||||
} else {
|
||||
|
@ -32,7 +32,7 @@
|
||||
#include "file.h"
|
||||
|
||||
#ifndef lint
|
||||
FILE_RCSID("@(#)$File: cdf.c,v 1.17 2009/02/03 20:27:51 christos Exp $")
|
||||
FILE_RCSID("@(#)$File: cdf.c,v 1.30 2009/05/06 14:29:47 christos Exp $")
|
||||
#endif
|
||||
|
||||
#include <assert.h>
|
||||
@ -237,6 +237,19 @@ cdf_unpack_dir(cdf_directory_t *d, char *buf)
|
||||
CDF_UNPACK(d->d_unused0);
|
||||
}
|
||||
|
||||
static int
|
||||
cdf_check_stream_offset(const cdf_stream_t *sst, const void *p, size_t tail)
|
||||
{
|
||||
const char *b = (const char *)sst->sst_tab;
|
||||
const char *e = ((const char *)p) + tail;
|
||||
if (e >= b && (size_t)(e - b) < sst->sst_dirlen * sst->sst_len)
|
||||
return 0;
|
||||
DPRINTF((stderr, "offset begin %p end %p %zu >= %zu\n", b, e,
|
||||
(size_t)(e - b), sst->sst_dirlen * sst->sst_len));
|
||||
errno = EFTYPE;
|
||||
return -1;
|
||||
}
|
||||
|
||||
static ssize_t
|
||||
cdf_read(const cdf_info_t *info, off_t off, void *buf, size_t len)
|
||||
{
|
||||
@ -264,7 +277,6 @@ cdf_read(const cdf_info_t *info, off_t off, void *buf, size_t len)
|
||||
return (ssize_t)len;
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
cdf_read_header(const cdf_info_t *info, cdf_header_t *h)
|
||||
{
|
||||
@ -332,15 +344,15 @@ cdf_read_sat(const cdf_info_t *info, cdf_header_t *h, cdf_sat_t *sat)
|
||||
break;
|
||||
|
||||
#define CDF_SEC_LIMIT (UINT32_MAX / (4 * ss))
|
||||
if (h->h_num_sectors_in_master_sat > CDF_SEC_LIMIT ||
|
||||
i > CDF_SEC_LIMIT / nsatpersec) {
|
||||
if (h->h_num_sectors_in_master_sat > CDF_SEC_LIMIT / nsatpersec ||
|
||||
i > CDF_SEC_LIMIT) {
|
||||
DPRINTF(("Number of sectors in master SAT too big %u %zu\n",
|
||||
h->h_num_sectors_in_master_sat, i));
|
||||
errno = EFTYPE;
|
||||
return -1;
|
||||
}
|
||||
|
||||
sat->sat_len = h->h_num_sectors_in_master_sat + i * nsatpersec;
|
||||
sat->sat_len = h->h_num_sectors_in_master_sat * nsatpersec + i;
|
||||
DPRINTF(("sat_len = %zu ss = %zu\n", sat->sat_len, ss));
|
||||
if ((sat->sat_tab = calloc(sat->sat_len, ss)) == NULL)
|
||||
return -1;
|
||||
@ -360,6 +372,8 @@ cdf_read_sat(const cdf_info_t *info, cdf_header_t *h, cdf_sat_t *sat)
|
||||
|
||||
mid = h->h_secid_first_sector_in_master_sat;
|
||||
for (j = 0; j < h->h_num_sectors_in_master_sat; j++) {
|
||||
if (mid < 0)
|
||||
goto out;
|
||||
if (j >= CDF_LOOP_LIMIT) {
|
||||
DPRINTF(("Reading master sector loop limit"));
|
||||
errno = EFTYPE;
|
||||
@ -371,10 +385,8 @@ cdf_read_sat(const cdf_info_t *info, cdf_header_t *h, cdf_sat_t *sat)
|
||||
}
|
||||
for (k = 0; k < nsatpersec; k++, i++) {
|
||||
sec = CDF_TOLE4(msa[k]);
|
||||
if (sec < 0) {
|
||||
sat->sat_len = i;
|
||||
break;
|
||||
}
|
||||
if (sec < 0)
|
||||
goto out;
|
||||
if (i >= sat->sat_len) {
|
||||
DPRINTF(("Out of bounds reading MSA %u >= %u",
|
||||
i, sat->sat_len));
|
||||
@ -390,6 +402,8 @@ cdf_read_sat(const cdf_info_t *info, cdf_header_t *h, cdf_sat_t *sat)
|
||||
}
|
||||
mid = CDF_TOLE4(msa[nsatpersec]);
|
||||
}
|
||||
out:
|
||||
sat->sat_len = i;
|
||||
free(msa);
|
||||
return 0;
|
||||
out2:
|
||||
@ -478,7 +492,7 @@ cdf_read_short_sector_chain(const cdf_header_t *h,
|
||||
scn->sst_len = cdf_count_chain(ssat, sid, CDF_SEC_SIZE(h));
|
||||
scn->sst_dirlen = len;
|
||||
|
||||
if (scn->sst_len == (size_t)-1)
|
||||
if (sst->sst_tab == NULL || scn->sst_len == (size_t)-1)
|
||||
return -1;
|
||||
|
||||
scn->sst_tab = calloc(scn->sst_len, ss);
|
||||
@ -629,22 +643,21 @@ cdf_read_short_stream(const cdf_info_t *info, const cdf_header_t *h,
|
||||
break;
|
||||
|
||||
/* If the it is not there, just fake it; some docs don't have it */
|
||||
if (i == dir->dir_len) {
|
||||
scn->sst_tab = NULL;
|
||||
scn->sst_len = 0;
|
||||
return 0;
|
||||
}
|
||||
if (i == dir->dir_len)
|
||||
goto out;
|
||||
d = &dir->dir_tab[i];
|
||||
|
||||
/* If the it is not there, just fake it; some docs don't have it */
|
||||
if (d->d_stream_first_sector < 0) {
|
||||
scn->sst_tab = NULL;
|
||||
scn->sst_len = 0;
|
||||
return 0;
|
||||
}
|
||||
if (d->d_stream_first_sector < 0)
|
||||
goto out;
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
static int
|
||||
@ -697,15 +710,27 @@ cdf_read_property_info(const cdf_stream_t *sst, uint32_t offs,
|
||||
size_t i, o, nelements, j;
|
||||
cdf_property_info_t *inp;
|
||||
|
||||
shp = (const void *)((const char *)sst->sst_tab + offs);
|
||||
sh.sh_len = CDF_TOLE4(shp->sh_len);
|
||||
sh.sh_properties = CDF_TOLE4(shp->sh_properties);
|
||||
#define CDF_PROP_LIM (UINT32_MAX / (4 * sizeof(*inp)))
|
||||
if (sh.sh_properties > CDF_PROP_LIM)
|
||||
if (offs > UINT32_MAX / 4) {
|
||||
errno = EFTYPE;
|
||||
goto out;
|
||||
DPRINTF(("section len: %u properties %u\n", sh.sh_len, sh.sh_properties));
|
||||
}
|
||||
shp = (const void *)((const char *)sst->sst_tab + offs);
|
||||
if (cdf_check_stream_offset(sst, shp, sizeof(*shp)) == -1)
|
||||
goto out;
|
||||
sh.sh_len = CDF_TOLE4(shp->sh_len);
|
||||
#define CDF_SHLEN_LIMIT (UINT32_MAX / 8)
|
||||
if (sh.sh_len > CDF_SHLEN_LIMIT) {
|
||||
errno = EFTYPE;
|
||||
goto out;
|
||||
}
|
||||
sh.sh_properties = CDF_TOLE4(shp->sh_properties);
|
||||
#define CDF_PROP_LIMIT (UINT32_MAX / (4 * sizeof(*inp)))
|
||||
if (sh.sh_properties > CDF_PROP_LIMIT)
|
||||
goto out;
|
||||
DPRINTF(("section len: %u properties %u\n", sh.sh_len,
|
||||
sh.sh_properties));
|
||||
if (*maxcount) {
|
||||
if (*maxcount > CDF_PROP_LIM)
|
||||
if (*maxcount > CDF_PROP_LIMIT)
|
||||
goto out;
|
||||
*maxcount += sh.sh_properties;
|
||||
inp = realloc(*info, *maxcount * sizeof(*inp));
|
||||
@ -720,6 +745,8 @@ cdf_read_property_info(const cdf_stream_t *sst, uint32_t offs,
|
||||
*count += sh.sh_properties;
|
||||
p = (const void *)((const char *)sst->sst_tab + offs + sizeof(sh));
|
||||
e = (const void *)(((const char *)shp) + sh.sh_len);
|
||||
if (cdf_check_stream_offset(sst, e, 0) == -1)
|
||||
goto out;
|
||||
for (i = 0; i < sh.sh_properties; i++) {
|
||||
q = (const uint32_t *)((const char *)p +
|
||||
CDF_TOLE4(p[(i << 1) + 1])) - 2;
|
||||
@ -777,8 +804,8 @@ cdf_read_property_info(const cdf_stream_t *sst, uint32_t offs,
|
||||
case CDF_LENGTH32_STRING:
|
||||
if (nelements > 1) {
|
||||
size_t nelem = inp - *info;
|
||||
if (*maxcount > CDF_PROP_LIM
|
||||
|| nelements > CDF_PROP_LIM)
|
||||
if (*maxcount > CDF_PROP_LIMIT
|
||||
|| nelements > CDF_PROP_LIMIT)
|
||||
goto out;
|
||||
*maxcount += nelements;
|
||||
inp = realloc(*info, *maxcount * sizeof(*inp));
|
||||
@ -832,6 +859,9 @@ cdf_unpack_summary_info(const cdf_stream_t *sst, cdf_summary_info_header_t *ssi,
|
||||
const cdf_section_declaration_t *sd = (const void *)
|
||||
((const char *)sst->sst_tab + CDF_SECTION_DECLARATION_OFFSET);
|
||||
|
||||
if (cdf_check_stream_offset(sst, si, sizeof(*si)) == -1 ||
|
||||
cdf_check_stream_offset(sst, sd, sizeof(*sd)) == -1)
|
||||
return -1;
|
||||
ssi->si_byte_order = CDF_TOLE2(si->si_byte_order);
|
||||
ssi->si_os_version = CDF_TOLE2(si->si_os_version);
|
||||
ssi->si_os = CDF_TOLE2(si->si_os);
|
||||
@ -946,11 +976,13 @@ cdf_dump_header(const cdf_header_t *h)
|
||||
size_t i;
|
||||
|
||||
#define DUMP(a, b) (void)fprintf(stderr, "%40.40s = " a "\n", # b, h->h_ ## b)
|
||||
#define DUMP2(a, b) (void)fprintf(stderr, "%40.40s = " a " (" a ")\n", # b, \
|
||||
h->h_ ## b, 1 << h->h_ ## b)
|
||||
DUMP("%d", revision);
|
||||
DUMP("%d", version);
|
||||
DUMP("0x%x", byte_order);
|
||||
DUMP("%d", sec_size_p2);
|
||||
DUMP("%d", short_sec_size_p2);
|
||||
DUMP2("%d", sec_size_p2);
|
||||
DUMP2("%d", short_sec_size_p2);
|
||||
DUMP("%d", num_sectors_in_sat);
|
||||
DUMP("%d", secid_first_directory);
|
||||
DUMP("%d", min_size_standard_stream);
|
||||
@ -1202,7 +1234,7 @@ main(int argc, char *argv[])
|
||||
#endif
|
||||
|
||||
|
||||
if (cdf_read_summary_info(&inf, &h, &sat, &ssat, &sst, &dir,
|
||||
if (cdf_read_summary_info(&info, &h, &sat, &ssat, &sst, &dir,
|
||||
&scn) == -1)
|
||||
err(1, "Cannot read summary info");
|
||||
#ifdef CDF_DEBUG
|
||||
|
@ -27,7 +27,7 @@
|
||||
#include "file.h"
|
||||
|
||||
#ifndef lint
|
||||
FILE_RCSID("@(#)$File: cdf_time.c,v 1.5 2009/02/03 20:27:51 christos Exp $")
|
||||
FILE_RCSID("@(#)$File: cdf_time.c,v 1.6 2009/03/10 11:44:29 christos Exp $")
|
||||
#endif
|
||||
|
||||
#include <time.h>
|
||||
|
@ -32,12 +32,11 @@
|
||||
* uncompress(method, old, n, newch) - uncompress old into new,
|
||||
* using method, return sizeof new
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
#include "file.h"
|
||||
|
||||
#ifndef lint
|
||||
FILE_RCSID("@(#)$File: compress.c,v 1.56 2008/02/07 00:58:52 christos Exp $")
|
||||
FILE_RCSID("@(#)$File: compress.c,v 1.63 2009/03/23 14:21:51 christos Exp $")
|
||||
#endif
|
||||
|
||||
#include "magic.h"
|
||||
@ -89,7 +88,6 @@ private const struct {
|
||||
|
||||
#define NODATA ((size_t)~0)
|
||||
|
||||
|
||||
private ssize_t swrite(int, const void *, size_t);
|
||||
#ifdef PHP_FILEINFO_UNCOMPRESS
|
||||
private size_t uncompressbuf(struct magic_set *, int, size_t,
|
||||
@ -107,10 +105,13 @@ file_zmagic(struct magic_set *ms, int fd, const char *name,
|
||||
size_t i, nsz;
|
||||
int rv = 0;
|
||||
int mime = ms->flags & MAGIC_MIME;
|
||||
size_t ncompr;
|
||||
|
||||
if ((ms->flags & MAGIC_COMPRESS) == 0)
|
||||
return 0;
|
||||
|
||||
ncompr = sizeof(compr) / sizeof(compr[0]);
|
||||
|
||||
for (i = 0; i < ncompr; i++) {
|
||||
if (nbytes < compr[i].maglen)
|
||||
continue;
|
||||
@ -189,6 +190,7 @@ sread(int fd, void *buf, size_t n, int canbepipe)
|
||||
#ifdef FIONREAD
|
||||
if ((canbepipe && (ioctl(fd, FIONREAD, &t) == -1)) || (t == 0)) {
|
||||
#ifdef FD_ZERO
|
||||
int cnt;
|
||||
for (cnt = 0;; cnt++) {
|
||||
fd_set check;
|
||||
struct timeval tout = {0, 100 * 1000};
|
||||
@ -310,6 +312,7 @@ file_pipe2file(struct magic_set *ms, int fd, const void *startbuf,
|
||||
#define FNAME (1 << 3)
|
||||
#define FCOMMENT (1 << 4)
|
||||
|
||||
|
||||
private size_t
|
||||
uncompressgzipped(struct magic_set *ms, const unsigned char *old,
|
||||
unsigned char **newch, size_t n)
|
||||
@ -373,7 +376,6 @@ uncompressgzipped(struct magic_set *ms, const unsigned char *old,
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
private size_t
|
||||
uncompressbuf(struct magic_set *ms, int fd, size_t method,
|
||||
const unsigned char *old, unsigned char **newch, size_t n)
|
||||
@ -490,7 +492,7 @@ err:
|
||||
(void)wait(NULL);
|
||||
#endif
|
||||
(void) close(fdin[0]);
|
||||
|
||||
|
||||
return n;
|
||||
}
|
||||
}
|
||||
|
@ -2,7 +2,7 @@
|
||||
* Copyright (c) Ian F. Darwin 1986-1995.
|
||||
* Software written by Ian F. Darwin and others;
|
||||
* maintained 1995-present by Christos Zoulas and others.
|
||||
*
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
@ -12,7 +12,7 @@
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
@ -27,7 +27,7 @@
|
||||
*/
|
||||
/*
|
||||
* file.h - definitions for file(1) program
|
||||
* @(#)$File: file.h,v 1.103 2008/03/01 22:21:49 rrt Exp $
|
||||
* @(#)$File: file.h,v 1.119 2009/02/04 18:24:32 christos Exp $
|
||||
*/
|
||||
|
||||
#ifndef __file_h__
|
||||
@ -138,7 +138,7 @@ struct magic {
|
||||
#define UNSIGNED 0x08 /* comparison is unsigned */
|
||||
#define NOSPACE 0x10 /* suppress space character before output */
|
||||
#define BINTEST 0x20 /* test is for a binary type (set only
|
||||
for top-level tests) */
|
||||
for top-level tests) */
|
||||
#define TEXTTEST 0 /* for passing to file_softmagic */
|
||||
|
||||
uint8_t factor;
|
||||
@ -216,7 +216,7 @@ struct magic {
|
||||
#else
|
||||
uint8_t dummy;
|
||||
#endif
|
||||
uint8_t factor_op;
|
||||
uint8_t factor_op;
|
||||
#define FILE_FACTOR_OP_PLUS '+'
|
||||
#define FILE_FACTOR_OP_MINUS '-'
|
||||
#define FILE_FACTOR_OP_TIMES '*'
|
||||
@ -264,7 +264,7 @@ struct magic {
|
||||
#define str_range _u._s._count
|
||||
#define str_flags _u._s._flags
|
||||
/* Words 9-16 */
|
||||
union VALUETYPE value; /* either number of string */
|
||||
union VALUETYPE value; /* either number or string */
|
||||
/* Words 17-24 */
|
||||
char desc[MAXDESC]; /* description */
|
||||
/* Words 25-32 */
|
||||
@ -312,7 +312,6 @@ struct level_info {
|
||||
int last_cond; /* used for error checking by parse() */
|
||||
#endif
|
||||
};
|
||||
|
||||
struct magic_set {
|
||||
struct mlist *mlist;
|
||||
struct cont {
|
||||
|
@ -176,7 +176,7 @@ file_fsmagic(struct magic_set *ms, const char *fn, struct stat *sb, php_stream *
|
||||
return 1;
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef S_IFIFO
|
||||
case S_IFIFO:
|
||||
if((ms->flags & MAGIC_DEVICES) != 0)
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*
|
||||
* Copyright (c) Christos Zoulas 2003.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
@ -11,7 +11,7 @@
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
@ -27,7 +27,7 @@
|
||||
#include "file.h"
|
||||
|
||||
#ifndef lint
|
||||
FILE_RCSID("@(#)$File: funcs.c,v 1.39 2008/03/01 22:21:49 rrt Exp $")
|
||||
FILE_RCSID("@(#)$File: funcs.c,v 1.53 2009/04/07 11:07:00 christos Exp $")
|
||||
#endif /* lint */
|
||||
|
||||
#include "magic.h"
|
||||
@ -392,7 +392,7 @@ file_getbuffer(struct magic_set *ms)
|
||||
|
||||
for (np = ms->o.pbuf, op = ms->o.buf; *op; op++) {
|
||||
if (isprint((unsigned char)*op)) {
|
||||
*np++ = *op;
|
||||
*np++ = *op;
|
||||
} else {
|
||||
OCTALIFY(np, op);
|
||||
}
|
||||
|
@ -40,7 +40,7 @@
|
||||
#include "file.h"
|
||||
|
||||
#ifndef lint
|
||||
FILE_RCSID("@(#)$File: is_tar.c,v 1.31 2008/02/04 20:51:17 christos Exp $")
|
||||
FILE_RCSID("@(#)$File: is_tar.c,v 1.36 2009/02/03 20:27:51 christos Exp $")
|
||||
#endif
|
||||
|
||||
#include "magic.h"
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*
|
||||
* Copyright (c) Christos Zoulas 2003.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
@ -11,7 +11,7 @@
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
@ -28,7 +28,7 @@
|
||||
#include "file.h"
|
||||
|
||||
#ifndef lint
|
||||
FILE_RCSID("@(#)$File: magic.c,v 1.50 2008/02/19 00:58:59 rrt Exp $")
|
||||
FILE_RCSID("@(#)$File: magic.c,v 1.62 2009/03/20 21:25:41 christos Exp $")
|
||||
#endif /* lint */
|
||||
|
||||
#include "magic.h"
|
||||
@ -65,9 +65,10 @@ FILE_RCSID("@(#)$File: magic.c,v 1.50 2008/02/19 00:58:59 rrt Exp $")
|
||||
#ifndef PHP_WIN32
|
||||
# include <netinet/in.h> /* for byte swapping */
|
||||
#endif
|
||||
|
||||
#include "patchlevel.h"
|
||||
|
||||
#ifndef PIPE_BUF
|
||||
#ifndef PIPE_BUF
|
||||
/* Get the PIPE_BUF from pathconf */
|
||||
#ifdef _PC_PIPE_BUF
|
||||
#define PIPE_BUF pathconf(".", _PC_PIPE_BUF)
|
||||
@ -199,6 +200,7 @@ private void
|
||||
close_and_restore(const struct magic_set *ms, const char *name, int fd,
|
||||
const struct stat *sb)
|
||||
{
|
||||
|
||||
if ((ms->flags & MAGIC_PRESERVE_ATIME) != 0) {
|
||||
/*
|
||||
* Try to restore access, modification times if read it.
|
||||
@ -303,7 +305,7 @@ file_or_stream(struct magic_set *ms, const char *inname, php_stream *stream)
|
||||
}
|
||||
|
||||
#ifdef O_NONBLOCK
|
||||
/* we should be already be in non blocking mode for network socket */
|
||||
/* we should be already be in non blocking mode for network socket */
|
||||
#endif
|
||||
|
||||
/*
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*
|
||||
* Copyright (c) Christos Zoulas 2003.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
@ -11,7 +11,7 @@
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
|
@ -6,14 +6,14 @@
|
||||
* $File: patchlevel.h,v 1.68 2008/03/22 21:39:43 christos Exp $
|
||||
*
|
||||
* $Log$
|
||||
* Revision 1.1.2.3 2009/05/04 20:54:53 scottmac
|
||||
* MFH Update libmagic to 5.02
|
||||
* Revision 1.4 2009/05/04 20:52:43 scottmac
|
||||
* Update libmagic to 5.02
|
||||
*
|
||||
* Revision 1.1.2.2 2009/03/15 23:04:18 scottmac
|
||||
* MFH Update fileinfo to libmagic 5.00 and remove dependency on dirent.h on Windows
|
||||
* Revision 1.3 2009/03/15 23:02:35 scottmac
|
||||
* Update fileinfo to libmagic 5.00 and remove dependency on dirent.h on Windows
|
||||
*
|
||||
* Revision 1.1.2.1 2008/11/02 16:13:49 scottmac
|
||||
* MFH: Sync libmagic with 4.26 and add support for the new v6 magic file format
|
||||
* Revision 1.2 2008/11/02 16:09:27 scottmac
|
||||
* Update libmagic to 4.26 and add support for v6 of the magic file format.
|
||||
*
|
||||
* Revision 1.1 2008/07/11 14:13:50 derick
|
||||
* - Move lib to libmagic
|
||||
|
@ -34,7 +34,7 @@
|
||||
#include "file.h"
|
||||
|
||||
#ifndef lint
|
||||
FILE_RCSID("@(#)$File: print.c,v 1.63 2008/02/17 19:28:54 rrt Exp $")
|
||||
FILE_RCSID("@(#)$File: print.c,v 1.66 2009/02/03 20:27:51 christos Exp $")
|
||||
#endif /* lint */
|
||||
|
||||
#include <string.h>
|
||||
|
@ -26,17 +26,15 @@
|
||||
#include "file.h"
|
||||
|
||||
#ifndef lint
|
||||
FILE_RCSID("@(#)$File: readcdf.c,v 1.11 2009/02/03 20:27:51 christos Exp $")
|
||||
FILE_RCSID("@(#)$File: readcdf.c,v 1.18 2009/05/06 20:48:22 christos Exp $")
|
||||
#endif
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
#ifdef PHP_WIN32
|
||||
#include "win32/unistd.h"
|
||||
#else
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
|
||||
#include <string.h>
|
||||
#include <time.h>
|
||||
#include <ctype.h>
|
||||
@ -202,7 +200,7 @@ protected int
|
||||
file_trycdf(struct magic_set *ms, int fd, const unsigned char *buf,
|
||||
size_t nbytes)
|
||||
{
|
||||
cdf_info_t info;
|
||||
cdf_info_t info;
|
||||
cdf_header_t h;
|
||||
cdf_sat_t sat, ssat;
|
||||
cdf_stream_t sst, scn;
|
||||
@ -246,7 +244,6 @@ file_trycdf(struct magic_set *ms, int fd, const unsigned char *buf,
|
||||
expn = "Cannot read short stream";
|
||||
goto out3;
|
||||
}
|
||||
|
||||
#ifdef CDF_DEBUG
|
||||
cdf_dump_dir(&info, &h, &sat, &ssat, &sst, &dir);
|
||||
#endif
|
||||
|
@ -27,7 +27,7 @@
|
||||
#include "file.h"
|
||||
|
||||
#ifndef lint
|
||||
FILE_RCSID("@(#)$File: readelf.c,v 1.73 2008/03/27 22:00:28 christos Exp $")
|
||||
FILE_RCSID("@(#)$File: readelf.c,v 1.81 2008/11/04 16:38:28 christos Exp $")
|
||||
#endif
|
||||
|
||||
#ifdef BUILTIN_ELF
|
||||
@ -1118,6 +1118,7 @@ dophn_exec(struct magic_set *ms, int clazz, int swap, int fd, off_t off,
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
protected int
|
||||
file_tryelf(struct magic_set *ms, int fd, const unsigned char *buf,
|
||||
size_t nbytes)
|
||||
@ -1137,7 +1138,6 @@ file_tryelf(struct magic_set *ms, int fd, const unsigned char *buf,
|
||||
|
||||
if (ms->flags & (MAGIC_MIME|MAGIC_APPLE))
|
||||
return 0;
|
||||
|
||||
/*
|
||||
* ELF executables have multiple section headers in arbitrary
|
||||
* file locations and thus file(1) cannot determine it from easily.
|
||||
|
@ -2,7 +2,7 @@
|
||||
* Copyright (c) Ian F. Darwin 1986-1995.
|
||||
* Software written by Ian F. Darwin and others;
|
||||
* maintained 1995-present by Christos Zoulas and others.
|
||||
*
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
@ -12,7 +12,7 @@
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
@ -32,7 +32,7 @@
|
||||
#include "file.h"
|
||||
|
||||
#ifndef lint
|
||||
FILE_RCSID("@(#)$File: softmagic.c,v 1.117 2008/03/01 22:21:49 rrt Exp $")
|
||||
FILE_RCSID("@(#)$File: softmagic.c,v 1.135 2009/03/27 22:42:49 christos Exp $")
|
||||
#endif /* lint */
|
||||
|
||||
#include "magic.h"
|
||||
@ -149,7 +149,7 @@ match(struct magic_set *ms, struct magic *magic, uint32_t nmagic,
|
||||
default:
|
||||
if (m->type == FILE_INDIRECT)
|
||||
returnval = 1;
|
||||
|
||||
|
||||
switch (magiccheck(ms, m)) {
|
||||
case -1:
|
||||
return -1;
|
||||
@ -163,7 +163,7 @@ match(struct magic_set *ms, struct magic *magic, uint32_t nmagic,
|
||||
break;
|
||||
}
|
||||
if (flush) {
|
||||
/*
|
||||
/*
|
||||
* main entry didn't match,
|
||||
* flush its continuations
|
||||
*/
|
||||
@ -188,7 +188,7 @@ match(struct magic_set *ms, struct magic *magic, uint32_t nmagic,
|
||||
|
||||
|
||||
if (print && mprint(ms, m) == -1)
|
||||
return -1;
|
||||
return -1;
|
||||
|
||||
ms->c.li[cont_level].off = moffset(ms, m);
|
||||
|
||||
@ -227,7 +227,7 @@ match(struct magic_set *ms, struct magic *magic, uint32_t nmagic,
|
||||
return -1;
|
||||
case 0:
|
||||
if (m->reln != '!')
|
||||
continue;
|
||||
continue;
|
||||
flush = 1;
|
||||
break;
|
||||
default:
|
||||
@ -305,11 +305,11 @@ match(struct magic_set *ms, struct magic *magic, uint32_t nmagic,
|
||||
if (printed_something) {
|
||||
firstline = 0;
|
||||
if (print)
|
||||
returnval = 1;
|
||||
returnval = 1;
|
||||
}
|
||||
if ((ms->flags & MAGIC_CONTINUE) == 0 && printed_something) {
|
||||
return returnval; /* don't keep searching */
|
||||
}
|
||||
}
|
||||
}
|
||||
return returnval; /* This is hit if -k is set or there is no match */
|
||||
}
|
||||
@ -377,7 +377,8 @@ mprint(struct magic_set *ms, struct magic *m)
|
||||
return -1;
|
||||
break;
|
||||
default:
|
||||
if (file_printf(ms, m->desc, (unsigned short) v) == -1)
|
||||
if (
|
||||
file_printf(ms, m->desc, (unsigned short) v) == -1)
|
||||
return -1;
|
||||
break;
|
||||
}
|
||||
@ -932,7 +933,7 @@ mcopy(struct magic_set *ms, union VALUETYPE *p, int type, int indir,
|
||||
}
|
||||
if (lines)
|
||||
last = (const char *)s + nbytes;
|
||||
|
||||
|
||||
ms->search.s = buf;
|
||||
ms->search.s_len = last - buf;
|
||||
ms->search.offset = offset;
|
||||
@ -945,10 +946,10 @@ mcopy(struct magic_set *ms, union VALUETYPE *p, int type, int indir,
|
||||
const unsigned char *esrc = s + nbytes;
|
||||
char *dst = p->s;
|
||||
char *edst = &p->s[sizeof(p->s) - 1];
|
||||
|
||||
|
||||
if (type == FILE_BESTRING16)
|
||||
src++;
|
||||
|
||||
|
||||
/* check for pointer overflow */
|
||||
if (src < s) {
|
||||
file_magerror(ms, "invalid offset %u in mcopy()",
|
||||
@ -1506,14 +1507,14 @@ mget(struct magic_set *ms, const unsigned char *s,
|
||||
if (nbytes < (offset + 1)) /* should alway be true */
|
||||
return 0;
|
||||
break;
|
||||
|
||||
|
||||
case FILE_SHORT:
|
||||
case FILE_BESHORT:
|
||||
case FILE_LESHORT:
|
||||
if (nbytes < (offset + 2))
|
||||
return 0;
|
||||
break;
|
||||
|
||||
|
||||
case FILE_LONG:
|
||||
case FILE_BELONG:
|
||||
case FILE_LELONG:
|
||||
@ -1532,7 +1533,7 @@ mget(struct magic_set *ms, const unsigned char *s,
|
||||
if (nbytes < (offset + 4))
|
||||
return 0;
|
||||
break;
|
||||
|
||||
|
||||
case FILE_DOUBLE:
|
||||
case FILE_BEDOUBLE:
|
||||
case FILE_LEDOUBLE:
|
||||
@ -1591,7 +1592,7 @@ file_strncmp(const char *s1, const char *s2, size_t len, uint32_t flags)
|
||||
if (0L == flags) { /* normal string: do it fast */
|
||||
while (len-- > 0)
|
||||
if ((v = *b++ - *a++) != '\0')
|
||||
break;
|
||||
break;
|
||||
}
|
||||
else { /* combine the others */
|
||||
while (len-- > 0) {
|
||||
@ -1605,8 +1606,8 @@ file_strncmp(const char *s1, const char *s2, size_t len, uint32_t flags)
|
||||
if ((v = toupper(*b++) - *a++) != '\0')
|
||||
break;
|
||||
}
|
||||
else if ((flags & STRING_COMPACT_BLANK) &&
|
||||
isspace(*a)) {
|
||||
else if ((flags & STRING_COMPACT_BLANK) &&
|
||||
isspace(*a)) {
|
||||
a++;
|
||||
if (isspace(*b++)) {
|
||||
while (isspace(*b))
|
||||
@ -1761,23 +1762,23 @@ magiccheck(struct magic_set *ms, struct magic *m)
|
||||
case 'x':
|
||||
matched = 1;
|
||||
break;
|
||||
|
||||
|
||||
case '!':
|
||||
matched = fv != fl;
|
||||
break;
|
||||
|
||||
|
||||
case '=':
|
||||
matched = fv == fl;
|
||||
break;
|
||||
|
||||
|
||||
case '>':
|
||||
matched = fv > fl;
|
||||
break;
|
||||
|
||||
|
||||
case '<':
|
||||
matched = fv < fl;
|
||||
break;
|
||||
|
||||
|
||||
default:
|
||||
matched = 0;
|
||||
file_magerror(ms, "cannot happen with float: invalid relation `%c'",
|
||||
@ -1795,23 +1796,23 @@ magiccheck(struct magic_set *ms, struct magic *m)
|
||||
case 'x':
|
||||
matched = 1;
|
||||
break;
|
||||
|
||||
|
||||
case '!':
|
||||
matched = dv != dl;
|
||||
break;
|
||||
|
||||
|
||||
case '=':
|
||||
matched = dv == dl;
|
||||
break;
|
||||
|
||||
|
||||
case '>':
|
||||
matched = dv > dl;
|
||||
break;
|
||||
|
||||
|
||||
case '<':
|
||||
matched = dv < dl;
|
||||
break;
|
||||
|
||||
|
||||
default:
|
||||
matched = 0;
|
||||
file_magerror(ms, "cannot happen with double: invalid relation `%c'", m->reln);
|
||||
@ -1859,7 +1860,6 @@ magiccheck(struct magic_set *ms, struct magic *m)
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case FILE_REGEX: {
|
||||
zval *pattern;
|
||||
int options = 0;
|
||||
@ -1867,9 +1867,7 @@ magiccheck(struct magic_set *ms, struct magic *m)
|
||||
TSRMLS_FETCH();
|
||||
|
||||
MAKE_STD_ZVAL(pattern);
|
||||
Z_STRVAL_P(pattern) = (char *)m->value.s;
|
||||
Z_STRLEN_P(pattern) = m->vallen;
|
||||
Z_TYPE_P(pattern) = IS_STRING;
|
||||
ZVAL_STRINGL(pattern, (char *)m->value.s, m->vallen, 0);
|
||||
|
||||
options |= PCRE_MULTILINE;
|
||||
|
||||
@ -1878,8 +1876,14 @@ magiccheck(struct magic_set *ms, struct magic *m)
|
||||
}
|
||||
|
||||
convert_libmagic_pattern(pattern, options);
|
||||
|
||||
|
||||
#if (PHP_MAJOR_VERSION < 6)
|
||||
if ((pce = pcre_get_compiled_regex_cache(Z_STRVAL_P(pattern), Z_STRLEN_P(pattern) TSRMLS_CC)) == NULL) {
|
||||
#else
|
||||
if ((pce = pcre_get_compiled_regex_cache(IS_STRING, Z_STRVAL_P(pattern), Z_STRLEN_P(pattern) TSRMLS_CC)) == NULL) {
|
||||
#endif
|
||||
zval_dtor(pattern);
|
||||
FREE_ZVAL(pattern);
|
||||
return -1;
|
||||
} else {
|
||||
/* pce now contains the compiled regex */
|
||||
@ -1894,16 +1898,19 @@ magiccheck(struct magic_set *ms, struct magic *m)
|
||||
haystack = estrndup(ms->search.s, ms->search.s_len);
|
||||
|
||||
/* match v = 0, no match v = 1 */
|
||||
#if (PHP_MAJOR_VERSION < 6)
|
||||
php_pcre_match_impl(pce, haystack, ms->search.s_len, retval, subpats, 1, 1, PREG_OFFSET_CAPTURE, 0 TSRMLS_CC);
|
||||
|
||||
#else
|
||||
php_pcre_match_impl(pce, IS_STRING, haystack, ms->search.s_len, retval, subpats, 1, 1, PREG_OFFSET_CAPTURE, 0 TSRMLS_CC);
|
||||
#endif
|
||||
/* Free haystack */
|
||||
efree(haystack);
|
||||
|
||||
if (Z_LVAL_P(retval) < 0) {
|
||||
zval_ptr_dtor(&subpats);
|
||||
FREE_ZVAL(retval);
|
||||
efree(Z_STRVAL_P(pattern));
|
||||
efree(pattern);
|
||||
zval_dtor(pattern);
|
||||
FREE_ZVAL(pattern);
|
||||
return -1;
|
||||
} else if ((Z_LVAL_P(retval) > 0) && (Z_TYPE_P(subpats) == IS_ARRAY)) {
|
||||
|
||||
@ -1991,8 +1998,8 @@ magiccheck(struct magic_set *ms, struct magic *m)
|
||||
} else {
|
||||
zval_ptr_dtor(&subpats);
|
||||
FREE_ZVAL(retval);
|
||||
efree(Z_STRVAL_P(pattern));
|
||||
efree(pattern);
|
||||
zval_dtor(pattern);
|
||||
FREE_ZVAL(pattern);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
@ -2004,8 +2011,8 @@ magiccheck(struct magic_set *ms, struct magic *m)
|
||||
zval_ptr_dtor(&subpats);
|
||||
FREE_ZVAL(retval);
|
||||
}
|
||||
efree(Z_STRVAL_P(pattern));
|
||||
efree(pattern);
|
||||
zval_dtor(pattern);
|
||||
FREE_ZVAL(pattern);
|
||||
break;
|
||||
}
|
||||
case FILE_INDIRECT:
|
||||
@ -2123,7 +2130,7 @@ print_sep(struct magic_set *ms, int firstline)
|
||||
if (firstline)
|
||||
return 0;
|
||||
/*
|
||||
* we found another match
|
||||
* we found another match
|
||||
* put a newline and '-' to do some simple formatting
|
||||
*/
|
||||
return file_printf(ms, "\n- ");
|
||||
|
Loading…
Reference in New Issue
Block a user