Skip to content

Commit e589609

Browse files
committed
Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4: Fix #77961: finfo_open crafted magic parsing SIGABRT
2 parents 337031a + 39f95f5 commit e589609

File tree

5 files changed

+126
-50
lines changed

5 files changed

+126
-50
lines changed

NEWS

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ PHP NEWS
88
. Fixed bug #72964 (White space not unfolded for CC/Bcc headers). (cmb)
99
. Fixed bug #80391 (Iterable not covariant to mixed). (Nikita)
1010

11+
- Fileinfo:
12+
. Fixed bug #77961 (finfo_open crafted magic parsing SIGABRT). (cmb)
13+
1114
- Opcache:
1215
. Fixed bug #80404 (Incorrect range inference result when division results
1316
in float). (Nikita)

ext/fileinfo/libmagic.patch

Lines changed: 57 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
diff -ur libmagic.orig/apprentice.c libmagic/apprentice.c
1+
diff -u libmagic.orig/apprentice.c libmagic/apprentice.c
22
--- libmagic.orig/apprentice.c 2020-05-09 20:57:15.000000000 +0200
3-
+++ libmagic/apprentice.c 2020-08-29 19:56:29.638061530 +0200
3+
+++ libmagic/apprentice.c 2020-11-07 14:41:13.543842900 +0100
44
@@ -29,6 +29,8 @@
55
* apprentice - make one pass through /etc/magic, learning its secrets.
66
*/
@@ -927,9 +927,9 @@ diff -ur libmagic.orig/apprentice.c libmagic/apprentice.c
927927
m->str_range = swap4(m->str_range);
928928
m->str_flags = swap4(m->str_flags);
929929
}
930-
diff -ur libmagic.orig/ascmagic.c libmagic/ascmagic.c
930+
diff -u libmagic.orig/ascmagic.c libmagic/ascmagic.c
931931
--- libmagic.orig/ascmagic.c 2020-06-15 02:01:01.000000000 +0200
932-
+++ libmagic/ascmagic.c 2020-08-29 02:05:56.212049441 +0200
932+
+++ libmagic/ascmagic.c 2020-11-07 14:41:13.543842900 +0100
933933
@@ -50,7 +50,7 @@
934934
#define ISSPC(x) ((x) == ' ' || (x) == '\t' || (x) == '\r' || (x) == '\n' \
935935
|| (x) == 0x85 || (x) == '\f')
@@ -993,9 +993,9 @@ diff -ur libmagic.orig/ascmagic.c libmagic/ascmagic.c
993993
{
994994
size_t i;
995995
unsigned char *end = buf + len;
996-
diff -ur libmagic.orig/buffer.c libmagic/buffer.c
996+
diff -u libmagic.orig/buffer.c libmagic/buffer.c
997997
--- libmagic.orig/buffer.c 2020-02-16 16:52:49.000000000 +0100
998-
+++ libmagic/buffer.c 2020-08-29 02:05:56.212049441 +0200
998+
+++ libmagic/buffer.c 2020-11-07 14:41:13.543842900 +0100
999999
@@ -31,19 +31,23 @@
10001000
#endif /* lint */
10011001

@@ -1049,9 +1049,9 @@ diff -ur libmagic.orig/buffer.c libmagic/buffer.c
10491049
b->ebuf = NULL;
10501050
goto out;
10511051
}
1052-
diff -ur libmagic.orig/cdf.c libmagic/cdf.c
1052+
diff -u libmagic.orig/cdf.c libmagic/cdf.c
10531053
--- libmagic.orig/cdf.c 2019-09-30 17:42:50.000000000 +0200
1054-
+++ libmagic/cdf.c 2020-08-29 02:05:56.212049441 +0200
1054+
+++ libmagic/cdf.c 2020-11-07 14:41:13.559464400 +0100
10551055
@@ -43,7 +43,17 @@
10561056
#include <err.h>
10571057
#endif
@@ -1284,9 +1284,9 @@ diff -ur libmagic.orig/cdf.c libmagic/cdf.c
12841284
}
12851285

12861286
#endif
1287-
diff -ur libmagic.orig/cdf.h libmagic/cdf.h
1287+
diff -u libmagic.orig/cdf.h libmagic/cdf.h
12881288
--- libmagic.orig/cdf.h 2019-09-30 17:42:50.000000000 +0200
1289-
+++ libmagic/cdf.h 2020-07-04 12:40:36.663619335 +0200
1289+
+++ libmagic/cdf.h 2020-10-09 14:15:33.483358900 +0200
12901290
@@ -35,10 +35,10 @@
12911291
#ifndef _H_CDF_
12921292
#define _H_CDF_
@@ -1301,9 +1301,9 @@ diff -ur libmagic.orig/cdf.h libmagic/cdf.h
13011301
#endif
13021302
#ifdef __DJGPP__
13031303
#define timespec timeval
1304-
diff -ur libmagic.orig/cdf_time.c libmagic/cdf_time.c
1304+
diff -u libmagic.orig/cdf_time.c libmagic/cdf_time.c
13051305
--- libmagic.orig/cdf_time.c 2019-03-12 21:43:05.000000000 +0100
1306-
+++ libmagic/cdf_time.c 2020-07-04 12:40:36.667619309 +0200
1306+
+++ libmagic/cdf_time.c 2020-10-09 14:15:33.484360000 +0200
13071307
@@ -23,6 +23,7 @@
13081308
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
13091309
* POSSIBILITY OF SUCH DAMAGE.
@@ -1330,9 +1330,9 @@ diff -ur libmagic.orig/cdf_time.c libmagic/cdf_time.c
13301330
if (ptr != NULL)
13311331
return buf;
13321332
(void)snprintf(buf, 26, "*Bad* %#16.16" INT64_T_FORMAT "x\n",
1333-
diff -ur libmagic.orig/compress.c libmagic/compress.c
1333+
diff -u libmagic.orig/compress.c libmagic/compress.c
13341334
--- libmagic.orig/compress.c 2020-05-31 02:11:06.000000000 +0200
1335-
+++ libmagic/compress.c 2020-08-29 02:05:56.212049441 +0200
1335+
+++ libmagic/compress.c 2020-11-07 14:41:13.559464400 +0100
13361336
@@ -51,7 +51,7 @@
13371337
#ifndef HAVE_SIG_T
13381338
typedef void (*sig_t)(int);
@@ -1467,9 +1467,9 @@ diff -ur libmagic.orig/compress.c libmagic/compress.c
14671467
}
14681468
#endif
14691469
+#endif
1470-
diff -ur libmagic.orig/der.c libmagic/der.c
1470+
diff -u libmagic.orig/der.c libmagic/der.c
14711471
--- libmagic.orig/der.c 2020-06-15 02:01:01.000000000 +0200
1472-
+++ libmagic/der.c 2020-08-29 11:56:12.303522747 +0200
1472+
+++ libmagic/der.c 2020-11-07 14:41:13.559464400 +0100
14731473
@@ -54,7 +54,9 @@
14741474
#include "magic.h"
14751475
#include "der.h"
@@ -1480,9 +1480,9 @@ diff -ur libmagic.orig/der.c libmagic/der.c
14801480
#include <sys/stat.h>
14811481
#include <err.h>
14821482
#endif
1483-
diff -ur libmagic.orig/elfclass.h libmagic/elfclass.h
1483+
diff -u libmagic.orig/elfclass.h libmagic/elfclass.h
14841484
--- libmagic.orig/elfclass.h 2019-02-20 02:30:19.000000000 +0100
1485-
+++ libmagic/elfclass.h 2020-07-04 12:40:36.667619309 +0200
1485+
+++ libmagic/elfclass.h 2020-10-09 14:15:33.488358700 +0200
14861486
@@ -41,7 +41,7 @@
14871487
return toomany(ms, "program headers", phnum);
14881488
flags |= FLAGS_IS_CORE;
@@ -1510,9 +1510,9 @@ diff -ur libmagic.orig/elfclass.h libmagic/elfclass.h
15101510
CAST(size_t, elf_getu16(swap, elfhdr.e_shentsize)),
15111511
fsize, elf_getu16(swap, elfhdr.e_machine),
15121512
CAST(int, elf_getu16(swap, elfhdr.e_shstrndx)),
1513-
diff -ur libmagic.orig/encoding.c libmagic/encoding.c
1513+
diff -u libmagic.orig/encoding.c libmagic/encoding.c
15141514
--- libmagic.orig/encoding.c 2019-06-10 23:34:41.000000000 +0200
1515-
+++ libmagic/encoding.c 2020-08-29 02:05:56.212049441 +0200
1515+
+++ libmagic/encoding.c 2020-11-07 14:41:13.559464400 +0100
15161516
@@ -43,14 +43,14 @@
15171517
#include <stdlib.h>
15181518

@@ -1700,9 +1700,9 @@ diff -ur libmagic.orig/encoding.c libmagic/encoding.c
17001700

17011701
if (ubf[*ulen - 1] == 0xfffe)
17021702
return 0;
1703-
diff -ur libmagic.orig/file.h libmagic/file.h
1703+
diff -u libmagic.orig/file.h libmagic/file.h
17041704
--- libmagic.orig/file.h 2020-06-15 02:01:01.000000000 +0200
1705-
+++ libmagic/file.h 2020-09-02 17:35:51.709611515 +0200
1705+
+++ libmagic/file.h 2020-11-24 13:44:41.506472900 +0100
17061706
@@ -33,17 +33,13 @@
17071707
#ifndef __file_h__
17081708
#define __file_h__
@@ -1725,7 +1725,7 @@ diff -ur libmagic.orig/file.h libmagic/file.h
17251725

17261726
#ifndef __STDC_LIMIT_MACROS
17271727
#define __STDC_LIMIT_MACROS
1728-
@@ -79,10 +75,11 @@
1728+
@@ -79,23 +75,26 @@
17291729
#include <stdio.h> /* Include that here, to make sure __P gets defined */
17301730
#include <errno.h>
17311731
#include <fcntl.h> /* For open and flags */
@@ -1740,7 +1740,14 @@ diff -ur libmagic.orig/file.h libmagic/file.h
17401740
#include <sys/param.h>
17411741
#endif
17421742
/* Do this here and now, because struct stat gets re-defined on solaris */
1743-
@@ -95,7 +92,7 @@
1743+
#include <sys/stat.h>
1744+
#include <stdarg.h>
1745+
1746+
+#define abort() zend_error_noreturn(E_ERROR, "fatal libmagic error")
1747+
+
1748+
#define ENABLE_CONDITIONALS
1749+
1750+
#ifndef MAGIC
17441751
#define MAGIC "/etc/magic"
17451752
#endif
17461753

@@ -1749,7 +1756,7 @@ diff -ur libmagic.orig/file.h libmagic/file.h
17491756
#define PATHSEP ';'
17501757
#else
17511758
#define PATHSEP ':'
1752-
@@ -129,12 +126,6 @@
1759+
@@ -129,12 +128,6 @@
17531760
#endif
17541761
#endif
17551762

@@ -1762,7 +1769,7 @@ diff -ur libmagic.orig/file.h libmagic/file.h
17621769
#ifndef MIN
17631770
#define MIN(a,b) (((a) < (b)) ? (a) : (b))
17641771
#endif
1765-
@@ -161,10 +152,10 @@
1772+
@@ -161,10 +154,10 @@
17661773

17671774
struct buffer {
17681775
int fd;
@@ -1775,7 +1782,7 @@ diff -ur libmagic.orig/file.h libmagic/file.h
17751782
void *ebuf;
17761783
size_t elen;
17771784
};
1778-
@@ -258,7 +249,7 @@
1785+
@@ -258,7 +251,7 @@
17791786
#define FILE_OFFSET 50
17801787
#define FILE_NAMES_SIZE 51 /* size of array to contain all names */
17811788

@@ -1784,7 +1791,7 @@ diff -ur libmagic.orig/file.h libmagic/file.h
17841791
((t) == FILE_STRING || \
17851792
(t) == FILE_PSTRING || \
17861793
(t) == FILE_BESTRING16 || \
1787-
@@ -464,21 +455,17 @@
1794+
@@ -464,21 +457,17 @@
17881795
};
17891796

17901797
/* Type for Unicode characters */
@@ -1810,7 +1817,7 @@ diff -ur libmagic.orig/file.h libmagic/file.h
18101817
protected int file_separator(struct magic_set *);
18111818
protected char *file_copystr(char *, size_t, size_t, const char *);
18121819
protected int file_checkfmt(char *, size_t, const char *);
1813-
@@ -486,48 +473,42 @@
1820+
@@ -486,48 +475,42 @@
18141821
protected int file_print_guid(char *, size_t, const uint64_t *);
18151822
protected int file_parse_guid(const char *, uint64_t *);
18161823
protected int file_replace(struct magic_set *, const char *, const char *);
@@ -1867,7 +1874,7 @@ diff -ur libmagic.orig/file.h libmagic/file.h
18671874
size_t *);
18681875
protected size_t file_pstring_length_size(struct magic_set *,
18691876
const struct magic *);
1870-
@@ -539,34 +520,12 @@
1877+
@@ -539,34 +522,12 @@
18711878
size_t);
18721879
#endif /* __EMX__ */
18731880

@@ -1904,7 +1911,7 @@ diff -ur libmagic.orig/file.h libmagic/file.h
19041911

19051912
typedef struct {
19061913
char *buf;
1907-
@@ -582,23 +541,10 @@
1914+
@@ -582,23 +543,10 @@
19081915
extern const size_t file_nnames;
19091916
#endif
19101917

@@ -1930,7 +1937,7 @@ diff -ur libmagic.orig/file.h libmagic/file.h
19301937
size_t strlcat(char *, const char *, size_t);
19311938
#endif
19321939
#ifndef HAVE_STRCASESTR
1933-
@@ -614,39 +560,6 @@
1940+
@@ -614,39 +562,6 @@
19341941
#ifndef HAVE_ASCTIME_R
19351942
char *asctime_r(const struct tm *, char *);
19361943
#endif
@@ -1970,7 +1977,7 @@ diff -ur libmagic.orig/file.h libmagic/file.h
19701977

19711978
#if defined(HAVE_MMAP) && defined(HAVE_SYS_MMAN_H) && !defined(QUICK)
19721979
#define QUICK
1973-
@@ -676,4 +589,16 @@
1980+
@@ -676,4 +591,16 @@
19741981
#define __RCSID(a)
19751982
#endif
19761983

@@ -1987,9 +1994,9 @@ diff -ur libmagic.orig/file.h libmagic/file.h
19871994
+#endif
19881995
+
19891996
#endif /* __file_h__ */
1990-
diff -ur libmagic.orig/fsmagic.c libmagic/fsmagic.c
1997+
diff -u libmagic.orig/fsmagic.c libmagic/fsmagic.c
19911998
--- libmagic.orig/fsmagic.c 2019-07-16 15:30:32.000000000 +0200
1992-
+++ libmagic/fsmagic.c 2020-08-29 02:05:56.212049441 +0200
1999+
+++ libmagic/fsmagic.c 2020-11-07 14:41:13.559464400 +0100
19932000
@@ -66,26 +66,10 @@
19942001
# define minor(dev) ((dev) & 0xff)
19952002
#endif
@@ -2280,9 +2287,9 @@ diff -ur libmagic.orig/fsmagic.c libmagic/fsmagic.c
22802287
#ifdef S_IFSOCK
22812288
#ifndef __COHERENT__
22822289
case S_IFSOCK:
2283-
diff -ur libmagic.orig/funcs.c libmagic/funcs.c
2290+
diff -u libmagic.orig/funcs.c libmagic/funcs.c
22842291
--- libmagic.orig/funcs.c 2020-02-20 16:50:20.000000000 +0100
2285-
+++ libmagic/funcs.c 2020-08-29 11:56:12.303522747 +0200
2292+
+++ libmagic/funcs.c 2020-11-07 14:41:13.559464400 +0100
22862293
@@ -48,6 +48,13 @@
22872294
#define SIZE_MAX ((size_t)~0)
22882295
#endif
@@ -2655,9 +2662,9 @@ diff -ur libmagic.orig/funcs.c libmagic/funcs.c
26552662
return rbuf;
26562663
}
26572664

2658-
diff -ur libmagic.orig/magic.c libmagic/magic.c
2665+
diff -u libmagic.orig/magic.c libmagic/magic.c
26592666
--- libmagic.orig/magic.c 2020-06-15 02:01:01.000000000 +0200
2660-
+++ libmagic/magic.c 2020-08-29 11:56:12.303522747 +0200
2667+
+++ libmagic/magic.c 2020-11-07 14:41:13.559464400 +0100
26612668
@@ -25,11 +25,6 @@
26622669
* SUCH DAMAGE.
26632670
*/
@@ -3131,9 +3138,9 @@ diff -ur libmagic.orig/magic.c libmagic/magic.c
31313138
return NULL;
31323139
}
31333140
return file_getbuffer(ms);
3134-
diff -ur libmagic.orig/magic.h libmagic/magic.h
3135-
--- libmagic.orig/magic.h 2020-06-29 01:13:35.424557511 +0200
3136-
+++ libmagic/magic.h 2020-08-29 02:05:56.212049441 +0200
3141+
diff -u libmagic.orig/magic.h libmagic/magic.h
3142+
--- libmagic.orig/magic.h 2020-11-24 13:45:15.355600300 +0100
3143+
+++ libmagic/magic.h 2020-11-07 14:41:13.559464400 +0100
31373144
@@ -126,6 +126,7 @@
31383145

31393146
const char *magic_getpath(const char *, int);
@@ -3142,9 +3149,9 @@ diff -ur libmagic.orig/magic.h libmagic/magic.h
31423149
const char *magic_descriptor(magic_t, int);
31433150
const char *magic_buffer(magic_t, const void *, size_t);
31443151

3145-
diff -ur libmagic.orig/print.c libmagic/print.c
3152+
diff -u libmagic.orig/print.c libmagic/print.c
31463153
--- libmagic.orig/print.c 2020-05-09 20:57:15.000000000 +0200
3147-
+++ libmagic/print.c 2020-08-29 11:56:12.303522747 +0200
3154+
+++ libmagic/print.c 2020-11-07 14:41:13.559464400 +0100
31483155
@@ -28,6 +28,7 @@
31493156
/*
31503157
* print.c - debugging printout routines
@@ -3207,9 +3214,9 @@ diff -ur libmagic.orig/print.c libmagic/print.c
32073214

32083215
if (pp == NULL)
32093216
goto out;
3210-
diff -ur libmagic.orig/readcdf.c libmagic/readcdf.c
3217+
diff -u libmagic.orig/readcdf.c libmagic/readcdf.c
32113218
--- libmagic.orig/readcdf.c 2019-09-30 17:42:50.000000000 +0200
3212-
+++ libmagic/readcdf.c 2020-08-29 02:05:56.212049441 +0200
3219+
+++ libmagic/readcdf.c 2020-11-07 14:41:13.559464400 +0100
32133220
@@ -31,7 +31,11 @@
32143221

32153222
#include <assert.h>
@@ -3331,9 +3338,9 @@ diff -ur libmagic.orig/readcdf.c libmagic/readcdf.c
33313338
out0:
33323339
/* If we handled it already, return */
33333340
if (i != -1)
3334-
diff -ur libmagic.orig/softmagic.c libmagic/softmagic.c
3341+
diff -u libmagic.orig/softmagic.c libmagic/softmagic.c
33353342
--- libmagic.orig/softmagic.c 2020-06-15 02:01:01.000000000 +0200
3336-
+++ libmagic/softmagic.c 2020-09-02 20:04:00.794667114 +0200
3343+
+++ libmagic/softmagic.c 2020-11-07 14:41:13.559464400 +0100
33373344
@@ -43,6 +43,10 @@
33383345
#include <time.h>
33393346
#include "der.h"
@@ -3682,9 +3689,9 @@ diff -ur libmagic.orig/softmagic.c libmagic/softmagic.c
36823689
break;
36833690
}
36843691
case FILE_INDIRECT:
3685-
diff -ur libmagic.orig/strcasestr.c libmagic/strcasestr.c
3692+
diff -u libmagic.orig/strcasestr.c libmagic/strcasestr.c
36863693
--- libmagic.orig/strcasestr.c 2014-09-11 17:05:33.000000000 +0200
3687-
+++ libmagic/strcasestr.c 2020-07-04 12:40:36.675619260 +0200
3694+
+++ libmagic/strcasestr.c 2020-10-09 14:15:33.499288400 +0200
36883695
@@ -39,6 +39,8 @@
36893696

36903697
#include "file.h"

ext/fileinfo/libmagic/file.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,8 @@
8686
#include <sys/stat.h>
8787
#include <stdarg.h>
8888

89+
#define abort() zend_error_noreturn(E_ERROR, "fatal libmagic error")
90+
8991
#define ENABLE_CONDITIONALS
9092

9193
#ifndef MAGIC

0 commit comments

Comments
 (0)