Absolutely: the problem is two-fold...
1)
in lib/md5/global.h, line 20:
/* UINT4 defines a four byte word */
typedef unsigned long int UINT4;
That's not a four byte word on amd64.
Proper thing would be to either use stdint's uint32_t or to do
a check in configure for a 4-byte word. "unsigned int" is also
32 bits on amd64.
configure would be more portable for non-GNU systems, as not
all compilers support C99.
2)
in lib/md5/md5c.c, line 71:
#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n))))
That assumes math is done at 32-bits, so it doesn't bother to truncate
the extra bits generated from the left shift.
either mask the left shift with 0xffffffff, or cast the result to UINT4
I have verified that making these changes fixes it, but my changes are not as
portable as they may seem. I'm including them here for reference; they won't
break any arches that aren't already broken, but if 'unsigned int' happens to
be a different size on some platform, it won't work there.
in global.h, line 20:
typedef unsigned int UINT4;
in md5c.c, line 71:
#define ROTATE_LEFT(x, n) ((((x) << (n)) & 0xffffffffU) | ((x) >> (32-(n))))
On Sat, Jan 28, 2006 at 08:19:06PM +0100, Volker Christian wrote:
> Hi,
>
> thanks for this report. Would it be possible for you do track down the
> problem
> as i didn't own a amd64-based machine?
>
> regards
> voc
>
>
> On Saturday 28 January 2006 00:15, Zinx Verituse wrote:
> > Package: unshield
> > Version: 0.5-3
> > Severity: important
> >
> > Extracting any cab on amd64 with the amd64 binary with -D 3 yields:
> > [unshield_file_save:710] MD5 checksum failure for file 66 (W83627THF.ini)
> > Failed to extract file 'W83627THF.ini'.
> >
> > Extracting with the 32-bit debian version, still on amd64, works fine
> > (extracts files, does not have a checksum error)
> >
> > -- System Information:
> > Debian Release: testing/unstable
> > APT prefers unstable
> > APT policy: (500, 'unstable')
> > Architecture: amd64 (x86_64)
> > Shell: /bin/sh linked to /bin/bash
> > Kernel: Linux 2.6.15-1-amd64-k8-smp
> > Locale: LANG=en_US, LC_CTYPE=en_US (charmap=ISO-8859-1)
> >
> > Versions of packages unshield depends on:
> > ii libc6 2.3.5-12 GNU C Library: Shared
> > libraries an ii libunshield0 0.5-3 library to
> > extracts CAB files from ii zlib1g 1:1.2.3-9
> > compression library - runtime
> >
> > unshield recommends no packages.
> >
> > -- no debconf information
--
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]