[sisyphus] i586 rpm setversions regression

Alexey Tourbin at на altlinux.ru
Пн Дек 24 16:05:23 MSK 2012


On Mon, Dec 24, 2012 at 03:28:09PM +0400, Dmitry V. Levin wrote:
> On Mon, Dec 24, 2012 at 11:55:09AM +0200, Michael Shigorin wrote:
> > 	Здравствуйте.
> > Это одного меня так накрыло?
> 
> Похоже на
> http://lists.altlinux.org/pipermail/sisyphus-incominger/2012-December/334059.html
> т.е. set.c в rpm на i586 сломался на ровном месте.

[builder на people ~]$ /usr/lib/rpm/setcmp set:kdSxWgTyZxEcQx104N1sOQPFrBU4hMyJgswBQdypWl99UkQfZ7FfVfLes8xXStDq2ZBO04AhAjro2klgZ3IPusa9PpeHQCT4xiF5vDAsf0PvkfkbHFKHGGYt7lk6gVuQUZg05tAONMVt1 set:jhK9a5Z0
-2
[builder на people ~]$

Похоже на проблему перекодирования в меньшую битность (в данном
случае set:k > set:j).  Кажется, нашел ошибку, только теперь не знаю,
как проверить - хешер не заводится.

--- lib/set.c-
+++ lib/set.c
@@ -1107,8 +1107,8 @@ int rpmsetcmp(const char *str1, const ch
     int c1 = cache_decode_set(str1, Mshift1, &v1);
     if (c1 < 0)
 	return -3;
-    unsigned v1bufA[c1 + 1];
-    unsigned v1bufB[c1 + 1];
+    unsigned v1bufA[c1 + SENTINELS];
+    unsigned v1bufB[c1 + SENTINELS];
     // decode set2 (on the stack)
     int len2 = strlen(str2);
     int c2 = decode_set_size(len2, Mshift2);


Подробная информация о списке рассылки Sisyphus