Skip to content

Commit 87abd50

Browse files
authored
Fix 32-bit fileinfo (#13404)
libmagic 5.45 has a regression on 32-bit that is fixed in current HEAD, but that's not released yet. Pull in the upstream fix [1]. [1] file/file@218fdf8
1 parent 9588796 commit 87abd50

File tree

2 files changed

+53
-30
lines changed

2 files changed

+53
-30
lines changed

ext/fileinfo/libmagic.patch

Lines changed: 48 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
diff -u libmagic.orig/apprentice.c libmagic/apprentice.c
22
--- libmagic.orig/apprentice.c 2023-07-17 16:38:35.000000000 +0200
3-
+++ libmagic/apprentice.c 2024-02-11 00:54:48.511542819 +0100
3+
+++ libmagic/apprentice.c 2024-02-15 19:28:46.036308654 +0100
44
@@ -48,7 +48,9 @@
55
#ifdef QUICK
66
#include <sys/mman.h>
@@ -870,7 +870,7 @@ diff -u libmagic.orig/apprentice.c libmagic/apprentice.c
870870
break;
871871
diff -u libmagic.orig/ascmagic.c libmagic/ascmagic.c
872872
--- libmagic.orig/ascmagic.c 2023-05-30 22:17:50.000000000 +0200
873-
+++ libmagic/ascmagic.c 2024-02-10 23:01:22.791282552 +0100
873+
+++ libmagic/ascmagic.c 2024-02-15 19:28:46.036308654 +0100
874874
@@ -96,7 +96,7 @@
875875
rv = file_ascmagic_with_encoding(ms, &bb,
876876
ubuf, ulen, code, type, text);
@@ -912,7 +912,7 @@ diff -u libmagic.orig/ascmagic.c libmagic/ascmagic.c
912912
}
913913
diff -u libmagic.orig/buffer.c libmagic/buffer.c
914914
--- libmagic.orig/buffer.c 2023-07-02 14:48:39.000000000 +0200
915-
+++ libmagic/buffer.c 2024-02-10 23:26:52.469607961 +0100
915+
+++ libmagic/buffer.c 2024-02-15 19:28:46.036308654 +0100
916916
@@ -31,19 +31,21 @@
917917
#endif /* lint */
918918

@@ -971,7 +971,7 @@ diff -u libmagic.orig/buffer.c libmagic/buffer.c
971971
}
972972
diff -u libmagic.orig/cdf.c libmagic/cdf.c
973973
--- libmagic.orig/cdf.c 2022-09-24 22:56:49.000000000 +0200
974-
+++ libmagic/cdf.c 2024-02-10 23:01:22.791282552 +0100
974+
+++ libmagic/cdf.c 2024-02-15 19:28:46.036308654 +0100
975975
@@ -43,7 +43,9 @@
976976
#include <err.h>
977977
#endif
@@ -1202,7 +1202,7 @@ diff -u libmagic.orig/cdf.c libmagic/cdf.c
12021202
#endif
12031203
diff -u libmagic.orig/cdf.h libmagic/cdf.h
12041204
--- libmagic.orig/cdf.h 2022-09-24 22:56:49.000000000 +0200
1205-
+++ libmagic/cdf.h 2024-02-10 23:01:22.791282552 +0100
1205+
+++ libmagic/cdf.h 2024-02-07 10:04:46.577977135 +0100
12061206
@@ -37,8 +37,6 @@
12071207

12081208
#ifdef WIN32
@@ -1214,7 +1214,7 @@ diff -u libmagic.orig/cdf.h libmagic/cdf.h
12141214
#define timespec timeval
12151215
diff -u libmagic.orig/compress.c libmagic/compress.c
12161216
--- libmagic.orig/compress.c 2023-05-21 17:59:58.000000000 +0200
1217-
+++ libmagic/compress.c 2024-02-10 23:07:05.404871255 +0100
1217+
+++ libmagic/compress.c 2024-02-15 19:28:46.036308654 +0100
12181218
@@ -63,13 +63,14 @@
12191219
#if defined(HAVE_SYS_TIME_H)
12201220
#include <sys/time.h>
@@ -1333,7 +1333,7 @@ diff -u libmagic.orig/compress.c libmagic/compress.c
13331333
+#endif
13341334
diff -u libmagic.orig/der.c libmagic/der.c
13351335
--- libmagic.orig/der.c 2022-09-24 22:56:49.000000000 +0200
1336-
+++ libmagic/der.c 2024-02-10 23:01:22.791282552 +0100
1336+
+++ libmagic/der.c 2024-02-15 19:28:46.036308654 +0100
13371337
@@ -54,7 +54,9 @@
13381338
#include "magic.h"
13391339
#include "der.h"
@@ -1346,7 +1346,7 @@ diff -u libmagic.orig/der.c libmagic/der.c
13461346
#endif
13471347
diff -u libmagic.orig/elfclass.h libmagic/elfclass.h
13481348
--- libmagic.orig/elfclass.h 2022-09-24 22:56:49.000000000 +0200
1349-
+++ libmagic/elfclass.h 2024-02-10 23:01:22.791282552 +0100
1349+
+++ libmagic/elfclass.h 2023-11-27 19:47:19.275556073 +0100
13501350
@@ -41,7 +41,7 @@
13511351
return toomany(ms, "program headers", phnum);
13521352
flags |= FLAGS_IS_CORE;
@@ -1376,7 +1376,7 @@ diff -u libmagic.orig/elfclass.h libmagic/elfclass.h
13761376
CAST(int, elf_getu16(swap, elfhdr.e_shstrndx)),
13771377
diff -u libmagic.orig/encoding.c libmagic/encoding.c
13781378
--- libmagic.orig/encoding.c 2022-12-26 18:31:56.000000000 +0100
1379-
+++ libmagic/encoding.c 2024-02-10 23:01:22.791282552 +0100
1379+
+++ libmagic/encoding.c 2024-02-15 19:28:46.036308654 +0100
13801380
@@ -97,7 +97,7 @@
13811381
nbytes = ms->encoding_max;
13821382

@@ -1412,8 +1412,15 @@ diff -u libmagic.orig/encoding.c libmagic/encoding.c
14121412
}
14131413
diff -u libmagic.orig/file.h libmagic/file.h
14141414
--- libmagic.orig/file.h 2023-07-27 21:40:22.000000000 +0200
1415-
+++ libmagic/file.h 2024-02-10 23:30:59.362464737 +0100
1416-
@@ -33,9 +33,7 @@
1415+
+++ libmagic/file.h 2024-02-15 19:50:18.840553550 +0100
1416+
@@ -27,15 +27,13 @@
1417+
*/
1418+
/*
1419+
* file.h - definitions for file(1) program
1420+
- * @(#)$File: file.h,v 1.247 2023/07/27 19:40:22 christos Exp $
1421+
+ * @(#)$File: file.h,v 1.248 2023/07/28 14:38:25 christos Exp $
1422+
*/
1423+
14171424
#ifndef __file_h__
14181425
#define __file_h__
14191426

@@ -1445,7 +1452,21 @@ diff -u libmagic.orig/file.h libmagic/file.h
14451452

14461453
#define ENABLE_CONDITIONALS
14471454

1448-
@@ -179,14 +172,12 @@
1455+
@@ -159,9 +152,11 @@
1456+
/*
1457+
* Dec 31, 23:59:59 9999
1458+
* we need to make sure that we don't exceed 9999 because some libc
1459+
- * implementations like muslc crash otherwise
1460+
+ * implementations like muslc crash otherwise. If you are unlucky
1461+
+ * to be running on a system with a 32 bit time_t, then it is even less.
1462+
*/
1463+
-#define MAX_CTIME CAST(time_t, 0x3afff487cfULL)
1464+
+#define MAX_CTIME \
1465+
+ CAST(time_t, sizeof(time_t) > 4 ? 0x3afff487cfULL : 0x7fffffffULL)
1466+
1467+
#define FILE_BADSIZE CAST(size_t, ~0ul)
1468+
#define MAXDESC 64 /* max len of text description/MIME type */
1469+
@@ -179,14 +174,12 @@
14491470
#define FILE_COMPILE 2
14501471
#define FILE_LIST 3
14511472

@@ -1462,7 +1483,7 @@ diff -u libmagic.orig/file.h libmagic/file.h
14621483
void *ebuf;
14631484
size_t elen;
14641485
};
1465-
@@ -289,7 +280,7 @@
1486+
@@ -289,7 +282,7 @@
14661487
#define FILE_OCTAL 59
14671488
#define FILE_NAMES_SIZE 60 /* size of array to contain all names */
14681489

@@ -1471,15 +1492,15 @@ diff -u libmagic.orig/file.h libmagic/file.h
14711492
((t) == FILE_STRING || \
14721493
(t) == FILE_PSTRING || \
14731494
(t) == FILE_BESTRING16 || \
1474-
@@ -420,7 +411,6 @@
1495+
@@ -420,7 +413,6 @@
14751496
/* list of magic entries */
14761497
struct mlist {
14771498
struct magic *magic; /* array of magic entries */
14781499
- file_regex_t **magic_rxcomp; /* array of compiled regexps */
14791500
size_t nmagic; /* number of entries in array */
14801501
void *map; /* internal resources used by entry */
14811502
struct mlist *next, *prev;
1482-
@@ -525,11 +515,9 @@
1503+
@@ -525,11 +517,9 @@
14831504
file_protected const char *file_fmtnum(char *, size_t, const char *, int);
14841505
file_protected struct magic_set *file_ms_alloc(int);
14851506
file_protected void file_ms_free(struct magic_set *);
@@ -1494,7 +1515,7 @@ diff -u libmagic.orig/file.h libmagic/file.h
14941515
file_protected int file_pipe2file(struct magic_set *, int, const void *,
14951516
size_t);
14961517
file_protected int file_vprintf(struct magic_set *, const char *, va_list)
1497-
@@ -546,7 +534,7 @@
1518+
@@ -546,7 +536,7 @@
14981519
file_protected int file_reset(struct magic_set *, int);
14991520
file_protected int file_tryelf(struct magic_set *, const struct buffer *);
15001521
file_protected int file_trycdf(struct magic_set *, const struct buffer *);
@@ -1503,7 +1524,7 @@ diff -u libmagic.orig/file.h libmagic/file.h
15031524
file_protected int file_zmagic(struct magic_set *, const struct buffer *,
15041525
const char *);
15051526
#endif
1506-
@@ -605,19 +593,13 @@
1527+
@@ -605,19 +595,13 @@
15071528
file_protected int file_clear_closexec(int);
15081529
file_protected char *file_strtrim(char *);
15091530

@@ -1524,7 +1545,7 @@ diff -u libmagic.orig/file.h libmagic/file.h
15241545
typedef struct {
15251546
char *buf;
15261547
size_t blen;
1527-
@@ -632,23 +614,10 @@
1548+
@@ -632,23 +616,10 @@
15281549
extern const size_t file_nnames;
15291550
#endif
15301551

@@ -1550,7 +1571,7 @@ diff -u libmagic.orig/file.h libmagic/file.h
15501571
size_t strlcat(char *, const char *, size_t);
15511572
#endif
15521573
#ifndef HAVE_STRCASESTR
1553-
@@ -664,39 +633,6 @@
1574+
@@ -664,39 +635,6 @@
15541575
#ifndef HAVE_ASCTIME_R
15551576
char *asctime_r(const struct tm *, char *);
15561577
#endif
@@ -1592,7 +1613,7 @@ diff -u libmagic.orig/file.h libmagic/file.h
15921613
#define QUICK
15931614
diff -u libmagic.orig/fsmagic.c libmagic/fsmagic.c
15941615
--- libmagic.orig/fsmagic.c 2023-07-27 21:33:24.000000000 +0200
1595-
+++ libmagic/fsmagic.c 2024-02-10 23:19:14.230852851 +0100
1616+
+++ libmagic/fsmagic.c 2024-02-15 19:28:46.036308654 +0100
15961617
@@ -66,26 +66,10 @@
15971618
# define minor(dev) ((dev) & 0xff)
15981619
#endif
@@ -1885,7 +1906,7 @@ diff -u libmagic.orig/fsmagic.c libmagic/fsmagic.c
18851906
case S_IFSOCK:
18861907
diff -u libmagic.orig/funcs.c libmagic/funcs.c
18871908
--- libmagic.orig/funcs.c 2023-07-27 21:40:12.000000000 +0200
1888-
+++ libmagic/funcs.c 2024-02-10 23:45:22.266825978 +0100
1909+
+++ libmagic/funcs.c 2024-02-15 19:28:46.036308654 +0100
18891910
@@ -66,7 +66,7 @@
18901911
file_private void
18911912
file_clearbuf(struct magic_set *ms)
@@ -2231,7 +2252,7 @@ diff -u libmagic.orig/funcs.c libmagic/funcs.c
22312252
file_clear_closexec(int fd) {
22322253
diff -u libmagic.orig/magic.c libmagic/magic.c
22332254
--- libmagic.orig/magic.c 2023-07-27 21:33:24.000000000 +0200
2234-
+++ libmagic/magic.c 2024-02-10 23:29:24.378035842 +0100
2255+
+++ libmagic/magic.c 2024-02-15 19:28:46.036308654 +0100
22352256
@@ -25,11 +25,6 @@
22362257
* SUCH DAMAGE.
22372258
*/
@@ -2704,8 +2725,8 @@ diff -u libmagic.orig/magic.c libmagic/magic.c
27042725
}
27052726
return file_getbuffer(ms);
27062727
diff -u libmagic.orig/magic.h libmagic/magic.h
2707-
--- libmagic.orig/magic.h 2024-02-11 00:55:48.825467891 +0100
2708-
+++ libmagic/magic.h 2024-02-10 23:32:58.640502441 +0100
2728+
--- libmagic.orig/magic.h 2024-02-15 19:52:41.323552388 +0100
2729+
+++ libmagic/magic.h 2024-02-15 19:28:46.036308654 +0100
27092730
@@ -47,8 +47,6 @@
27102731
* extensions */
27112732
#define MAGIC_COMPRESS_TRANSP 0x2000000 /* Check inside compressed files
@@ -2758,7 +2779,7 @@ diff -u libmagic.orig/magic.h libmagic/magic.h
27582779
int magic_getparam(magic_t, int, void *);
27592780
diff -u libmagic.orig/print.c libmagic/print.c
27602781
--- libmagic.orig/print.c 2023-07-27 20:04:45.000000000 +0200
2761-
+++ libmagic/print.c 2024-02-10 23:03:50.289485733 +0100
2782+
+++ libmagic/print.c 2024-02-15 19:28:46.036308654 +0100
27622783
@@ -73,7 +73,7 @@
27632784
if (m->mask_op & FILE_OPINVERSE)
27642785
(void) fputc('~', stderr);
@@ -2815,7 +2836,7 @@ diff -u libmagic.orig/print.c libmagic/print.c
28152836
goto out;
28162837
diff -u libmagic.orig/readcdf.c libmagic/readcdf.c
28172838
--- libmagic.orig/readcdf.c 2023-02-09 18:43:53.000000000 +0100
2818-
+++ libmagic/readcdf.c 2024-02-10 23:01:22.794615920 +0100
2839+
+++ libmagic/readcdf.c 2024-02-15 19:28:46.036308654 +0100
28192840
@@ -31,7 +31,9 @@
28202841

28212842
#include <assert.h>
@@ -2935,7 +2956,7 @@ diff -u libmagic.orig/readcdf.c libmagic/readcdf.c
29352956
if (i != -1)
29362957
diff -u libmagic.orig/softmagic.c libmagic/softmagic.c
29372958
--- libmagic.orig/softmagic.c 2023-07-27 21:40:12.000000000 +0200
2938-
+++ libmagic/softmagic.c 2024-02-10 23:34:02.164564132 +0100
2959+
+++ libmagic/softmagic.c 2024-02-15 19:28:46.036308654 +0100
29392960
@@ -45,7 +45,7 @@
29402961
#include <time.h>
29412962
#include "der.h"

ext/fileinfo/libmagic/file.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
*/
2828
/*
2929
* file.h - definitions for file(1) program
30-
* @(#)$File: file.h,v 1.247 2023/07/27 19:40:22 christos Exp $
30+
* @(#)$File: file.h,v 1.248 2023/07/28 14:38:25 christos Exp $
3131
*/
3232

3333
#ifndef __file_h__
@@ -152,9 +152,11 @@
152152
/*
153153
* Dec 31, 23:59:59 9999
154154
* we need to make sure that we don't exceed 9999 because some libc
155-
* implementations like muslc crash otherwise
155+
* implementations like muslc crash otherwise. If you are unlucky
156+
* to be running on a system with a 32 bit time_t, then it is even less.
156157
*/
157-
#define MAX_CTIME CAST(time_t, 0x3afff487cfULL)
158+
#define MAX_CTIME \
159+
CAST(time_t, sizeof(time_t) > 4 ? 0x3afff487cfULL : 0x7fffffffULL)
158160

159161
#define FILE_BADSIZE CAST(size_t, ~0ul)
160162
#define MAXDESC 64 /* max len of text description/MIME type */

0 commit comments

Comments
 (0)