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]

Reply via email to