~ 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