From b48a27c49fb608004ef69db9c0b3f30cc73f35c5 Mon Sep 17 00:00:00 2001 From: Jakub Bogusz Date: Sat, 9 Mar 2019 21:24:59 +0100 Subject: [PATCH] - added forgotten elf-entsize patch (don't die on ELF .go files from guile 2.2) - fixed warnings in rpmdb_reset - release 0.15 --- rpm-elf-entsize.patch | 44 +++++++++++++++++++++++++++++++++++++++++++ rpm.spec | 6 +++--- rpmdb_reset.c | 7 ++----- 3 files changed, 49 insertions(+), 8 deletions(-) create mode 100644 rpm-elf-entsize.patch diff --git a/rpm-elf-entsize.patch b/rpm-elf-entsize.patch new file mode 100644 index 0000000..1956260 --- /dev/null +++ b/rpm-elf-entsize.patch @@ -0,0 +1,44 @@ +Avoid SIGFPE on semi-ELF files, like guile cache (*.go). +--- rpm-5.4.17/rpmdb/legacy.c.orig 2019-02-14 18:13:07.961620012 +0100 ++++ rpm-5.4.17/rpmdb/legacy.c 2019-02-14 19:54:24.235368679 +0100 +@@ -116,7 +116,7 @@ + if (shdr.sh_type != SHT_DYNAMIC) + continue; + while (!bingo && (data = elf_getdata (scn, data)) != NULL) { +- unsigned maxndx = (unsigned) (data->d_size / shdr.sh_entsize); ++ unsigned maxndx = (shdr.sh_entsize == 0) ? 0 : (unsigned) (data->d_size / shdr.sh_entsize); + unsigned ndx; + + for (ndx = 0; ndx < maxndx; ++ndx) { +--- rpm-5.4.17/lib/rpmds.c.orig 2019-02-14 21:51:17.514041154 +0100 ++++ rpm-5.4.17/lib/rpmds.c 2019-02-14 21:51:20.570691261 +0100 +@@ -2933,6 +2933,11 @@ + * @param isX32 is this an X32 symbol? + */ + #if defined(HAVE_GELF_H) && defined(HAVE_LIBELF) && !defined(__FreeBSD__) ++static int getShdrEntries(GElf_Shdr *shdr) ++{ ++ return shdr->sh_entsize == 0 ? 0 : ((int)(shdr->sh_size / shdr->sh_entsize)); ++} ++ + static char * sonameDep(/*@returned@*/ char * t, const char * s, int isElf64, int isX32) + /*@modifies t @*/ + { +@@ -3195,7 +3200,7 @@ + case SHT_DYNAMIC: + data = NULL; + while ((data = elf_getdata (scn, data)) != NULL) { +- for (cnt = 0; cnt < (int)(shdr->sh_size / shdr->sh_entsize); ++cnt) { ++ for (cnt = 0; cnt < getShdrEntries(shdr); ++cnt) { + dyn = gelf_getdyn (data, cnt, &dyn_mem); + if (dyn == NULL) + /*@innerbreak@*/ break; +@@ -3436,7 +3441,7 @@ + case SHT_DYNAMIC: + data = NULL; + while ((data = elf_getdata (scn, data)) != NULL) { +- for (cnt = 0; cnt < (int)(shdr->sh_size / shdr->sh_entsize); ++cnt) { ++ for (cnt = 0; cnt < getShdrEntries(shdr); ++cnt) { + dyn = gelf_getdyn (data, cnt, &dyn_mem); + if (dyn == NULL) + /*@innerbreak@*/ break; diff --git a/rpm.spec b/rpm.spec index 813910d..5ab0ccc 100644 --- a/rpm.spec +++ b/rpm.spec @@ -58,7 +58,7 @@ Summary(ru.UTF-8): Менеджер пакетов от RPM Summary(uk.UTF-8): Менеджер пакетів від RPM Name: rpm Version: 5.4.17 -Release: 0.14 +Release: 0.15 License: LGPL v2.1 Group: Base # http://rpm5.org/files/rpm/rpm-5.4/rpm-5.4.17-0.20160512.src.rpm @@ -173,7 +173,7 @@ Patch75: %{name}-double_check_file_deps.patch Patch77: %{name}-lua-expat.patch Patch78: %{name}-double_check_unpackaged_subdirs.patch Patch79: %{name}-rpmspec.patch - +Patch80: %{name}-elf-entsize.patch Patch81: %{name}-perl-magic.patch Patch82: %{name}-5.4.15-use-DSA-sig.patch Patch83: %{name}-ignore-missing-macro-files.patch @@ -958,7 +958,6 @@ cd - %patch77 -p1 %patch78 -p1 %patch79 -p1 - %patch81 -p0 %patch82 -p1 %patch84 -p1 @@ -969,6 +968,7 @@ cd - %patch89 -p1 %patch90 -p1 %patch91 -p1 +%patch80 -p1 %patch1000 -p1 %patch1001 -p1 diff --git a/rpmdb_reset.c b/rpmdb_reset.c index efa1707..6d18bef 100644 --- a/rpmdb_reset.c +++ b/rpmdb_reset.c @@ -2,6 +2,7 @@ #include #include #include +#include #include #include #include @@ -36,10 +37,8 @@ main(argc, argv) enum { NOTSET, FILEID_RESET, LSN_RESET, STANDARD_LOAD } mode; extern char *optarg; extern int optind; - DBTYPE dbtype; DB_ENV *dbenv; LDG ldg; - u_int ldf; int ch, exitval, ret; if ((exitval = version_check()) != 0) @@ -55,9 +54,7 @@ main(argc, argv) ldg.passwd = NULL; mode = NOTSET; - ldf = 0; exitval = 0; - dbtype = DB_UNKNOWN; /* * There are two modes for db_load: -r and everything else. The -r @@ -112,7 +109,7 @@ main(argc, argv) case LSN_RESET: exitval = dbenv->lsn_reset(dbenv, argv[0], 0); break; - case NOTSET: + default: break; } -- 2.44.0