[packages/poldek] fix for crashes on subpackages with inherited group

draenog draenog at pld-linux.org
Tue May 7 09:59:02 CEST 2013


commit 1e0595d6832f4b3d1c11a5f040fcd9cfbcddbd94
Author: Kacper Kornet <draenog at pld-linux.org>
Date:   Tue May 7 08:57:35 2013 +0100

    fix for crashes on subpackages with inherited group
    
    Together with rpm-5.4.10-52 fixes
    https://bugs.launchpad.net/poldek/+bug/1077603

 poldek-inherited-group.patch | 72 ++++++++++++++++++++++++++++++++++++++++++++
 poldek.spec                  |  4 ++-
 2 files changed, 75 insertions(+), 1 deletion(-)
---
diff --git a/poldek.spec b/poldek.spec
index c8fcf48..16f3017 100644
--- a/poldek.spec
+++ b/poldek.spec
@@ -15,7 +15,7 @@
 %define		ver_rpm		5.4.10
 
 %define		snap	rc7
-%define		rel	2%{?with_snap:.%{SNAP}}
+%define		rel	3%{?with_snap:.%{SNAP}}
 Summary:	RPM packages management helper tool
 Summary(hu.UTF-8):	RPM csomagkezelést segítő eszköz
 Summary(pl.UTF-8):	Pomocnicze narzędzie do zarządzania pakietami RPM
@@ -44,6 +44,7 @@ Patch1:		%{name}-config.patch
 Patch2:		%{name}-size-type.patch
 Patch3:		%{name}-Os-fail-workaround.patch
 Patch4:		%{name}-git.patch
+Patch5:		%{name}-inherited-group.patch
 URL:		http://poldek.pld-linux.org/
 BuildRequires:	autoconf
 BuildRequires:	automake
@@ -207,6 +208,7 @@ Moduły języka Python dla poldka.
 %patch2 -p1
 %patch3 -p1
 %patch4 -p1
+%patch5 -p1
 
 %{__rm} m4/libtool.m4 m4/lt*.m4
 
diff --git a/poldek-inherited-group.patch b/poldek-inherited-group.patch
new file mode 100644
index 0000000..9d3ec75
--- /dev/null
+++ b/poldek-inherited-group.patch
@@ -0,0 +1,72 @@
+commit 84563d90b30b05d1705d84344f75aec5f7fd6f58
+Author: Kacper Kornet <draenog at pld-linux.org>
+Date:   Tue May 7 08:45:51 2013 +0100
+
+    Fix for crashes on subpackages with inherited group
+    
+    In normal case RPMTAG_GROUP is RPM_I18NSTRING_TYPE. However when group
+    is inherited from main package in some versions of rpm5 it is
+    RPM_STRING_TYPE. What's worse some versions of rpm5 returns
+    RPM_STRING_TYPE but report RPM_I18NSTRING_TYPE. However the last
+    behaviour is so buggy that we don't care about it.
+    
+    Reverts 810280a1e3be737bf074b536c414eadbb0f38596 and adds proper
+    fix for https://bugs.launchpad.net/poldek/+bug/966972 by reusing
+    existing code.
+
+diff --git a/pkgroup.c b/pkgroup.c
+index 9fdeaf9..cd8bf4d 100644
+--- a/pkgroup.c
++++ b/pkgroup.c
+@@ -470,21 +470,17 @@ int pkgroup_idx_update_rpmhdr(struct pkgroup_idx *idx, void *rpmhdr)
+ 
+     DBGF("ngroups %d, %d\n", ngroups, n_array_size(langs));
+     for (i=0; i < ngroups; i++) {
+-      const char *lang = n_array_nth(langs, i);
+-      
+-      const char *grp = groups;
+-      if (ngroups > 1) grp = groups[i];
+-      
+-      DBGF("   gr[%d of %d] %s\n", i, ngroups, grp);
+-      
+-      if (n_str_eq(lang, "C")) {
+-        if ((gr = n_hash_get(idx->ht, grp)) == NULL) {
+-          gr = pkgroup_new(n_array_size(idx->arr) + 1, grp);
+-          n_array_push(idx->arr, gr);
+-          n_hash_insert(idx->ht, gr->name, gr);
++        const char *lang = n_array_nth(langs, i);
++        DBGF("   gr[%d of %d] %s\n", i, ngroups, groups[i]);
++        
++        if (n_str_eq(lang, "C")) {
++            if ((gr = n_hash_get(idx->ht, groups[i])) == NULL) {
++                gr = pkgroup_new(n_array_size(idx->arr) + 1, groups[i]);
++                n_array_push(idx->arr, gr);
++                n_hash_insert(idx->ht, gr->name, gr);
++            }
++            break;
+         }
+-        break;
+-      }
+     }
+ 
+     if (gr != NULL) {
+diff --git a/pm/rpm/rpmhdr.c b/pm/rpm/rpmhdr.c
+index 817803c..dd24be5 100644
+--- a/pm/rpm/rpmhdr.c
++++ b/pm/rpm/rpmhdr.c
+@@ -121,7 +121,6 @@ int pm_rpmhdr_get_raw_entry(Header h, int32_t tag, void *buf, int32_t *cnt)
+     }
+ #endif
+ 
+-#ifndef HAVE_RPM_5
+     if (tag == RPMTAG_GROUP && type == RPM_STRING_TYPE) { // build by old rpm
+         char **g;
+ 	
+@@ -132,7 +131,6 @@ int pm_rpmhdr_get_raw_entry(Header h, int32_t tag, void *buf, int32_t *cnt)
+         g[1] = NULL;
+         *(char ***)buf = g;
+     }
+-#endif
+ 
+     DBGF("%d type=%d, cnt=%d\n", tag, type, *cnt);
+     return 1;
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/packages/poldek.git/commitdiff/1e0595d6832f4b3d1c11a5f040fcd9cfbcddbd94



More information about the pld-cvs-commit mailing list