On Apr 14, 2016, at 12:15 PM, Jeff Johnson wrote: > >> >>>> rpm files are generated on x86_64 machines but querying it on ppc >> >>>> machines (arch within rpm is ppc). Inbuilt metadata can be queried >> >>>> using --qf but not custom metadata. I guessed that endianness should >> >>>> not have impact rpm metadata content. But, even if it has, then it >> >>>> should give garbled values and not "(none)" as its result. However, >> >>>> querying custom metadata works fine in 5.4.14. >> > > Yes arbitrary tags in metadata should be platform independent as a goal. But > not in rpm-5.1.9 == a bug. >
I should state the problem more carefully: The meatadata and the tags assigned to the arbitrary metadata ARE independent of platform in the sense that that are marked with 0xc0000000. What is/was broken is that the truncated SHA1 for the remaining 30bits of the tag assignment is little endian. The fix on PPC and big-endian machines is to swab the 30bits before generating the tag assignment. > The tag itself, not its content, is what is not platform independent. Hence > not "garbled". > The fix on PPC and big-endian machines is to swab the 30bits before generating the tag assignment. So its a fairly simple one line patch in rpmio/tagname in _tagGenerate() in rpm-5.1.9 that end up looking should look like this: if (digest && digestlen > 4) { /* The tag is stored in a uniform byte order for cross-endian compatib ility. Swap to the host uses. */ memcpy(&tag, digest + (digestlen - 4), 4); tag = le32toh(tag); tag = (rpmTag) (tag & 0x3fffffff); tag = (rpmTag) (tag | 0x40000000); } 73 de Jeff