when a source rpm somehow contains a non-portable uid (instead of root), getUname is invoked repeatedly, each time increments uid_used, but then getpwuid returns a NULL pointer. The code correctly checks for the NULL pointer, but does not redecrement uid_used in that case. Thus, if there are more than 1024 calls to getUname with this same non-portable uid, the unames cache overflows eventhough none of its entries are used. I have no idea how the non-portable uid gets into the src rpm in the first place, perhaps this is an issue of login vs non-login root shell when creating the src rpm.
Ah yes, that was borken. Thanks for the analysis. Fixed in CVS, will be in rpm-4.3 when built.