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