From Bugzilla Helper: User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:0.8.1+) Gecko/20010418 You can't use a va_list in a loop like it is done in rpmio/rpmlog.c:vrpmlog(), that's non-portable C and breaks on platforms that pass a va_list by reference, eg. PPC. va_list needs to be copied for every use using __va_copy. Reproducible: Always Steps to Reproduce: 1. rpm -q --changelog rpm 2. 3. --- rpm-4.0.2/rpmio/rpmlog.c.~1~ Tue Feb 13 10:23:33 2001 +++ rpm-4.0.2/rpmio/rpmlog.c Thu Mar 15 14:18:07 2001 @@ -105,6 +105,7 @@ static void vrpmlog (unsigned code, cons /*@unused@*/ int fac = RPMLOG_FAC(code); char *msgbuf, *msg; int msgnb = BUFSIZ, nb; + va_list apc; FILE * msgout = stderr; rpmlogRec rec; @@ -117,7 +118,8 @@ static void vrpmlog (unsigned code, cons /* Allocate a sufficently large buffer for output. */ while (1) { /*@-unrecog@*/ - nb = vsnprintf(msgbuf, msgnb, fmt, ap); + __va_copy(apc, ap); + nb = vsnprintf(msgbuf, msgnb, fmt, apc); /*@=unrecog@*/ if (nb > -1 && nb < msgnb) break;
Fixed in rpm CVS, should be in rpm-4.0.3-0.8. Thanks for the patch.