poldek 0.19 - SEGV przy czytaniu /var/lib/rpm

Jakub Bogusz qboosh w pld-linux.org
Pią, 26 Sie 2005, 10:08:07 CEST


Loading [rpmdb]/var/lib/rpm...

Program received signal SIGSEGV, Segmentation fault.
0x4340ee11 in n_hash_dohash (ht=0x85f46a0, s=0x766e6f43 <Address 0x766e6f43 out of bounds>, slen=0xb2013218) at n_hash_new.c:90
90          while (*s) {
(gdb) p s
$1 = 0x766e6f43 <Address 0x766e6f43 out of bounds>
(gdb) f 1
#1  0x4340e8f9 in n_hash_get (ht=0x85f46a0, key=0x766e6f43 <Address 0x766e6f43 out of bounds>) at n_hash_get.c:79
79          val = n_hash_dohash(ht, key, &klen);
(gdb) p key
$2 = 0x766e6f43 <Address 0x766e6f43 out of bounds>
(gdb) f 2
#2  0x433b0c22 in pkgroup_idx_update_rpmhdr (idx=0x85f4690, rpmhdr=0x87010e8) at pkgroup.c:479
479                 if ((gr = n_hash_get(idx->ht, groups[i])) == NULL) {
(gdb) p groups[i]
$3 = 0x766e6f43 <Address 0x766e6f43 out of bounds>
(gdb) p groups[0]
$4 = 0x766e6f43 <Address 0x766e6f43 out of bounds>
(gdb) p i
$5 = 0
(gdb) x/s groups
0x8747649:       "Converted/Debian"
(gdb) p ngroups
$6 = 1

Okazuje się, że dla ngroups==1 headerGetRawEntry() zwraca łańcuch
bezpośrednio, a nie jako jednoelementową tablicę.
Przynajmniej w rpm-ie 4.4.2.

W ten sposób na pakiecie z grupą bez żadnych tłumaczeń (co może się
zdarzyć w przypadku zainstalowanych pakietów spoza PLD) poldek się
wykłada.


-- 
Jakub Bogusz    http://qboosh.cs.net.pl/



Więcej informacji o liście dyskusyjnej pld-devel-pl