Fix mime type for #!/usr/bin/sh

Related: RHEL-141671
This commit is contained in:
Petr Lautrbach 2026-01-20 08:58:15 +01:00
parent d96380b4a6
commit 021c651db6
2 changed files with 63 additions and 1 deletions

View File

@ -0,0 +1,61 @@
From a2ea4efcae9ff6c7af47058d8b61aa88f269cf66 Mon Sep 17 00:00:00 2001
From: Steve Grubb <ausearch.1@gmail.com>
Date: Mon, 19 Jan 2026 16:27:54 -0500
Subject: [PATCH] If less than 16 chars were read, allow shebang test (corner
case)
Content-type: text/plain
---
src/library/file.c | 16 +++++++++-------
1 file changed, 9 insertions(+), 7 deletions(-)
diff --git a/src/library/file.c b/src/library/file.c
index 30571890071b..6491733c0042 100644
--- a/src/library/file.c
+++ b/src/library/file.c
@@ -1253,12 +1253,9 @@ int get_ima_hash(int fd, file_hash_alg_t *alg, char *sha)
static unsigned char e_ident[EI_NIDENT];
-static int read_preliminary_header(int fd)
+static inline ssize_t read_preliminary_header(int fd)
{
- ssize_t rc = safe_read(fd, (char *)e_ident, EI_NIDENT);
- if (rc == EI_NIDENT)
- return 0;
- return 1;
+ return safe_read(fd, (char *)e_ident, EI_NIDENT);
}
@@ -1356,8 +1353,10 @@ static int looks_like_text_script(int fd)
uint32_t gather_elf(int fd, off_t size)
{
uint32_t info = 0;
+ ssize_t rc;
- if (read_preliminary_header(fd))
+ rc = read_preliminary_header(fd);
+ if (rc < 2)
goto rewind_out;
/* Detect scripts via shebang before ELF check */
@@ -1366,6 +1365,10 @@ uint32_t gather_elf(int fd, off_t size)
goto rewind_out;
}
+ /* Make sure we have the full preliminary header */
+ if (rc < EI_NIDENT)
+ goto rewind_out;
+
/* Check ELF magic */
if (strncmp((char *)e_ident, ELFMAG, 4)) {
// Not ELF - see if it might be text script
@@ -1688,4 +1691,3 @@ rewind_out:
rewind_fd(fd);
return info;
}
-
--
2.52.0

View File

@ -21,8 +21,9 @@ Source20: https://github.com/troydhanson/uthash/archive/refs/tags/v2.3.0.tar.gz#
# $ git format-patch -N v1.4.3
# https://github.com/linux-application-whitelisting/fapolicyd-selinux
# $ git format-patch -N --start-number 100 --src-prefix=a/fapolicyd-selinux-1.1/ --dst-prefix=b/fapolicyd-selinux-1.1/ v1.1
# $ for j in [0-9]*.patch; do printf "Patch%s: %s\n" ${j/-*/} $j; done
# $ for j in [0-9]*.patch; do printf "Patch: %s\n" $j; done
# Patch list start
Patch: 0002-If-less-than-16-chars-were-read-allow-shebang-test-c.patch
# Patch list end
BuildRequires: gcc