]> git.pld-linux.org Git - packages/rpm.git/commitdiff
- added forgotten elf-entsize patch (don't die on ELF .go files from guile 2.2)
authorJakub Bogusz <qboosh@pld-linux.org>
Sat, 9 Mar 2019 20:24:59 +0000 (21:24 +0100)
committerJakub Bogusz <qboosh@pld-linux.org>
Sat, 9 Mar 2019 20:24:59 +0000 (21:24 +0100)
- fixed warnings in rpmdb_reset
- release 0.15

rpm-elf-entsize.patch [new file with mode: 0644]
rpm.spec
rpmdb_reset.c

diff --git a/rpm-elf-entsize.patch b/rpm-elf-entsize.patch
new file mode 100644 (file)
index 0000000..1956260
--- /dev/null
@@ -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;
index 813910de9aa4bb14881dd9026ff701ef1108add0..5ab0ccc69bcc67efba5a1879b06078ae7dd45e0f 100644 (file)
--- 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
index efa17071aff9fef299eb9f978e808cb5dbc81a12..6d18bef70bcace18c8bfd4b1dce0662974a9249d 100644 (file)
@@ -2,6 +2,7 @@
 #include <stddef.h>
 #include <stdio.h>
 #include <stdlib.h>
+#include <string.h>
 #include <unistd.h>
 #include <errno.h>
 #include <db.h>
@@ -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;
        }
 
This page took 0.108159 seconds and 4 git commands to generate.