[Bug 6191] New: Mercurial fails to clone on big-endian arches

mercurial-bugs at mercurial-scm.org mercurial-bugs at mercurial-scm.org
Mon Aug 26 14:07:52 EDT 2019


            Bug ID: 6191
           Summary: Mercurial fails to clone on big-endian arches
           Product: Mercurial
           Version: default branch
          Hardware: Other
                OS: All
            Status: UNCONFIRMED
          Severity: bug
          Priority: wish
         Component: Mercurial
          Assignee: bugzilla at mercurial-scm.org
          Reporter: mplch at redhat.com
                CC: mercurial-devel at mercurial-scm.org

safeadd in mercurial/mpatch.c casts its arguments to int.
On big endian arches, if safeadd is called with a 64-bit type (e.g. a pointer)
the compiler passes wrong end of the pointer to the function.

This means decode() in mercurial/mpatch.c has no way to work properly.

Binary visualisation from a specific case on an s390x system:

(gdb) p /t bin
# note that I have added a leading zero for better readability
$4 = 0111111111111110110101101000010101100010000
(gdb) p /t lt->len
$5 = 101001
(gdb) n 
303                     if (!safeadd(lt->len, &bin)) {
(gdb) p /t bin
$6 = 1000010100011110110101101000010101100010000

You are receiving this mail because:
You are on the CC list for the bug.

More information about the Mercurial-devel mailing list