14 Jun 2012 10:28
nmh 1.5 doesn't work on 64-bit big-endian archs (+patch)
Alexander Zangerl <exmh <at> bin.snafu.priv.at>
2012-06-14 08:28:22 GMT
2012-06-14 08:28:22 GMT
i've run into another gotcha: the base64-decoder doesn't work on 64-bit big-endian architectures: mhstore and co. write files of the correct length but which consist only of \0s. the culprit is uip/mhparse.c, which contains a pretty ugly base64 decoder (in two places). that thing allocates a "long int" as a container for the 24 bits that you get from four base-64 chars. the container is then accessed both as a single entity and as a byte array, which naturally depends on how wide the long int is and in what order things end up in there. the code distinguishes between big- and little-endian systems but wrongly assumes that sizeof(long int) == 4, which isn't universally true (quel surprise...). the attached patch fixes the issue, but in the long run we should insist on posix and use a64l(). regards az
-- -- Alexander Zangerl + GnuPG Keys 0x42BD645D or 0x5B586291 + http://snafu.priv.at/ Perl is like vise grips. You can do anything with it but it is the wrong tool for every job. -- Bruce Eckel
_______________________________________________(Continue reading)


RSS Feed