diff --git a/tcsh-6.18.01-elf-interpreter.patch b/tcsh-6.18.01-elf-interpreter.patch deleted file mode 100644 index a583f13..0000000 --- a/tcsh-6.18.01-elf-interpreter.patch +++ /dev/null @@ -1,198 +0,0 @@ -From b913dff5f7c123691b9aea3cee4bf270bc56659b Mon Sep 17 00:00:00 2001 -From: rpm-build -Date: Wed, 27 Aug 2014 13:55:10 +0200 -Subject: [PATCH 12/14] report missing ELF interpreter - -Resolves: #711066 - -Adjusted for tcsh-6.19.00 by Fridolin Pokorny - ---- - configure.in | 5 ++- - sh.err.c | 4 +- - sh.exec.c | 140 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - 4 files changed, 152 insertions(+), 3 deletions(-) - -diff --git a/sh.err.c b/sh.err.c -index 29d41c3..262f9bf 100644 ---- a/sh.err.c -+++ b/sh.err.c -@@ -189,7 +189,8 @@ char *seterr = NULL; /* Holds last error if there was one */ - #define ERR_INVALID 133 - #define ERR_BADCOLORVAR 134 - #define ERR_EOF 135 --#define NO_ERRORS 136 -+#define ERR_ELFINTERP 136 -+#define NO_ERRORS 137 - - static const char *elst[NO_ERRORS] INIT_ZERO_STRUCT; - -@@ -367,6 +368,7 @@ errinit(void) - elst[ERR_BADJOB] = CSAVS(1, 136, "No such job (badjob)"); - elst[ERR_BADCOLORVAR] = CSAVS(1, 137, "Unknown colorls variable `%c%c'"); - elst[ERR_EOF] = CSAVS(1, 138, "Unexpected end of file"); -+ elst[ERR_ELFINTERP] = CSAVS(1, 139, "No such ELF interpreter"); - } - - /* Cleanup data. */ -diff --git a/sh.exec.c b/sh.exec.c -index 2b41a53..c1f4b7e 100644 ---- a/sh.exec.c -+++ b/sh.exec.c -@@ -40,6 +40,10 @@ RCSID("$tcsh: sh.exec.c,v 3.79 2011/02/25 23:58:34 christos Exp $") - #include - #endif /*WINNT_NATIVE*/ - -+#ifdef HAVE_ELF_H -+#include -+#endif /*HAVE_ELF_H*/ -+ - /* - * C shell - */ -@@ -509,6 +513,142 @@ texec(Char *sf, Char **st) - case 0: /* execv fails and returns 0! */ - #endif /* _IBMR2 */ - case ENOENT: -+#ifdef HAVE_ELF_H -+ /* -+ * If dynamically linked ELF binary is not executed and exists, -+ * the real reason ENOENT is that ELF interpreter is missing. -+ * -+ * Written by Ulrich Drepper for bash -+ * adopted by Fridolin Pokorny -+ */ -+ if ((fd = xopen(f, O_RDONLY|O_LARGEFILE)) != -1) { -+ int nread; -+ char *sample; -+ int offset = -1; -+ int sample_size; -+ -+ /* Inspect 32 and 64 ELF */ -+ if (sizeof(Elf64_Ehdr) > sizeof(Elf32_Ehdr)) -+ sample_size = sizeof(Elf64_Ehdr); -+ else -+ sample_size = sizeof(Elf32_Ehdr); -+ -+ sample = xmalloc(sample_size); -+ -+ if (sample != 0 && -+ (nread = xread(fd, sample, sample_size)) == sample_size) { -+ if (memcmp(sample, ELFMAG, SELFMAG) == 0) { -+ if (sample[EI_CLASS] == ELFCLASS32 && -+ sample_size >= sizeof(Elf32_Ehdr)) { -+ Elf32_Ehdr ehdr; -+ Elf32_Phdr *phdr; -+ int nphdr; -+ -+ /* -+ * We have to copy the data since the sample buffer -+ * might not be aligned correctly to be accessed as -+ * an Elf32_Ehdr struct. -+ */ -+ memcpy(&ehdr, sample, sizeof(Elf32_Ehdr)); -+ -+ nphdr = ehdr.e_phnum; -+ phdr = xmalloc(nphdr * ehdr.e_phentsize); -+ if(phdr != NULL) { -+#ifdef HAVE_PREAD -+ nread = pread(fd, phdr, nphdr * ehdr.e_phentsize, -+ ehdr.e_phoff); -+#else /* !HAVE_PREAD */ -+ if (lseek(fd, ehdr.e_phoff, SEEK_SET) != -1) -+ nread = read(fd, phdr, -+ nphdr * ehdr.e_phentsize); -+ else -+ nread = -1; -+#endif /* HAVE_PREAD */ -+ if (nread == nphdr * ehdr.e_phentsize) { -+ while (nphdr-- > 0) { -+ if (phdr[nphdr].p_type == PT_INTERP) { -+ offset = phdr[nphdr].p_offset; -+ break; -+ } -+ } -+ } -+ xfree(phdr); -+ } -+ } else if (sample[EI_CLASS] == ELFCLASS64 && -+ sample_size >= sizeof(Elf64_Ehdr)) { -+ Elf64_Ehdr ehdr; -+ Elf64_Phdr *phdr; -+ int nphdr; -+ -+ /* -+ * We have to copy the data since the sample buffer -+ * might not be aligned correctly to be accessed as -+ * an Elf64_Ehdr struct. -+ */ -+ memcpy(&ehdr, sample, sizeof(Elf64_Ehdr)); -+ -+ nphdr = ehdr.e_phnum; -+ phdr = xmalloc(nphdr * ehdr.e_phentsize); -+ if (phdr != NULL) { -+#ifdef HAVE_PREAD -+ nread = pread (fd, phdr, nphdr * ehdr.e_phentsize, -+ ehdr.e_phoff); -+#else /* !HAVE_PREAD */ -+ if (lseek(fd, ehdr.e_phoff, SEEK_SET) != -1) -+ nread = read (fd, phdr, -+ nphdr * ehdr.e_phentsize); -+ else -+ nread = -1; -+#endif /* HAVE_PREAD */ -+ if (nread == nphdr * ehdr.e_phentsize) { -+ while (nphdr-- > 0) { -+ if (phdr[nphdr].p_type == PT_INTERP) { -+ offset = phdr[nphdr].p_offset; -+ break; -+ } -+ } -+ } -+ xfree (phdr); -+ } -+ } -+ -+ if (offset != -1) { -+ size_t maxlen = 0; -+ size_t actlen = 0; -+ char *interp = NULL; -+ -+ do { -+ if (actlen == maxlen) { -+ char *newinterp = xrealloc(interp, maxlen += 200); -+ if (newinterp == NULL) { -+ actlen = 0; -+ break; -+ } -+ interp = newinterp; -+#ifdef HAVE_PREAD -+ actlen = pread (fd, interp, maxlen, offset); -+#else /* !HAVE_PREAD */ -+ if (lseek (fd, offset, SEEK_SET) != -1) -+ actlen = read (fd, interp, maxlen); -+ else -+ actlen = -1; -+#endif /* HAVE_PREAD */ -+ } -+ } while (actlen > 0 && -+ memchr (interp, '\0', actlen) == NULL); -+ -+ if (actlen > 0) { -+ xclose (fd); -+ xfree (interp); -+ setname(f); -+ stderror(ERR_NAME | ERR_ELFINTERP); -+ } -+ } -+ } -+ } -+ xfree(sample); -+ } -+#endif /* HAVE_ELF_H */ - break; - - default: --- -1.9.3 - diff --git a/tcsh.spec b/tcsh.spec index e16599d..e4e9306 100644 --- a/tcsh.spec +++ b/tcsh.spec @@ -35,8 +35,6 @@ Source: ftp://ftp.astron.com/pub/tcsh/%{name}-%{version}.tar.gz Patch4: tcsh-6.15.00-hist-sub.patch Patch9: tcsh-6.13.00-memoryuse.patch Patch11: tcsh-6.14.00-order.patch -# Proposed upstream - http://mx.gw.com/pipermail/tcsh-bugs/2013-April/000833.html -Patch35: tcsh-6.18.01-elf-interpreter.patch Patch36: tcsh-6.18.01-introduce-tcsh_posix_status.patch # Proposed upstream - http://mx.gw.com/pipermail/tcsh-bugs/2015-May/000944.html Patch39: tcsh-6.19.00-gcc5-calloc.patch @@ -150,6 +148,7 @@ fi - Drop tcsh-6.14.00-unprintable.patch - issue not reproducible with 6.19.00 upstream version - Drop tcsh-6.14.00-syntax.patch - patch not accepted by upstream, breaks other things - Drop tcsh-6.18.01-skip-tty-tests.patch - has been fixed in 6.18.05 upstream version +- Drop tcsh-6.18.01-elf-interpreter.patch - patch not working anymore, not accepted by upstream * Fri Feb 05 2016 Fedora Release Engineering - 6.19.00-5 - Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild