~ chicken-core (chicken-5) 58b43e9406dea9d0813d916e76dece5ca2498ce5


commit 58b43e9406dea9d0813d916e76dece5ca2498ce5
Author:     Peter Bex <peter@more-magic.net>
AuthorDate: Sat Apr 23 20:43:11 2016 +0200
Commit:     Evan Hanson <evhan@foldling.org>
CommitDate: Mon Apr 25 21:08:17 2016 +1200

    Fix fixnum literal decoding on ARM64 (#1280)
    
    In literal_decode, we relied on sign extension of characters when
    putting them into a C_word.
    
    On ARM64, characters are unsigned by default, which causes fixnum
    literals (but only if embedded in other objects) to be decoded
    incorrectly.
    
    The fix is simple: explicitly cast the first value to a signed character.
    
    Many thanks to Alexander Shendi for reporting the bug and helping to
    come up with and testing this fix.
    
    Signed-off-by: Evan Hanson <evhan@foldling.org>

diff --git a/manual/Acknowledgements b/manual/Acknowledgements
index e10cd087..8169b72c 100644
--- a/manual/Acknowledgements
+++ b/manual/Acknowledgements
@@ -42,12 +42,12 @@ Raikov, Santosh Rajan, Joel Reymont, "rivo", Chris Roberts, Eric
 Rochester, Paul Romanchenko, Andreas Rottman, David Rush, Lars
 Rustemeier, Daniel Sadilek, Otavio Salvador, Burton Samograd,
 "Sandro", "satori", Aleksej Saushev, Oskar Schirmer, Reed Sheridan,
-Ronald Schröder, Spencer Schumann, Ivan Shcheklein, Alex Shinn, Ivan
-Shmakov, "Shmul", Tony Sidaway, Jeffrey B. Siegal, Andrey Sidorenko,
-Michele Simionato, Iruata Souza, Volker Stolz, Jon Strait, Dorai
-Sitaram, Robert Skeels, Jason Songhurst, Clifford Stein, David
-Steiner, Sunnan, Zbigniew Szadkowski, Rick Taube, Nathan Thern, Mike
-Thomas, Minh Thu, Christian Tismer, Andre van Tonder, John Tobey,
+Ronald Schröder, Spencer Schumann, Ivan Shcheklein, Alexander Shendi,
+Alex Shinn, Ivan Shmakov, "Shmul", Tony Sidaway, Jeffrey B. Siegal,
+Andrey Sidorenko, Michele Simionato, Iruata Souza, Volker Stolz, Jon
+Strait, Dorai Sitaram, Robert Skeels, Jason Songhurst, Clifford Stein,
+David Steiner, Sunnan, Zbigniew Szadkowski, Rick Taube, Nathan Thern,
+Mike Thomas, Minh Thu, Christian Tismer, Andre van Tonder, John Tobey,
 Henrik Tramberend, Vladimir Tsichevsky, James Ursetto, Neil van Dyke,
 Sam Varner, Taylor Venable, Sander Vesik, Jaques Vidrine, Panagiotis
 Vossos, Shawn Wagner, Peter Wang, Ed Watkeys, Brad Watson, Thomas
diff --git a/runtime.c b/runtime.c
index 8f1e011f..7f163174 100644
--- a/runtime.c
+++ b/runtime.c
@@ -9236,7 +9236,7 @@ static C_regparm C_word C_fcall decode_literal2(C_word **ptr, C_char **str,
       return (C_word)(*(*str - 1));
 
     case C_FIXNUM_BIT:
-      val = (C_uword)*((*str)++) << 24; /* always big endian */
+      val = (C_uword)(signed char)*((*str)++) << 24; /* always big endian */
       val |= ((C_uword)*((*str)++) & 0xff) << 16;
       val |= ((C_uword)*((*str)++) & 0xff) << 8;
       val |= ((C_uword)*((*str)++) & 0xff);
Trap