aboutsummaryrefslogtreecommitdiffstats
path: root/debian/patches/bypass_bigrecy_32bit.patch
diff options
context:
space:
mode:
Diffstat (limited to 'debian/patches/bypass_bigrecy_32bit.patch')
-rw-r--r--debian/patches/bypass_bigrecy_32bit.patch26
1 files changed, 26 insertions, 0 deletions
diff --git a/debian/patches/bypass_bigrecy_32bit.patch b/debian/patches/bypass_bigrecy_32bit.patch
new file mode 100644
index 0000000..276bc8c
--- /dev/null
+++ b/debian/patches/bypass_bigrecy_32bit.patch
@@ -0,0 +1,26 @@
+Description: Bypass bigrecy() optimization on 32-bit to fix test failure
+Author: Bryan Newbold <bnewbold@robocracy.org>
+Forwarded: yes
+--- a/scl.c
++++ b/scl.c
+@@ -132,12 +132,20 @@ void strrecy(str)
+ void bigrecy(bgnm)
+ SCM bgnm;
+ {
++/* As an emergency patch, only implement this GC optimization on specific
++ * 64-bit platforms.
++ * There is a "use-after-free" bug on 32-bit platforms, introduced as a
++ * regression between 5f1 and 5f2. --bnewbold (2017-09-30)
++ */
++#if defined(__ia64__) || defined(__powerpc64__) || defined(__x86_64__) \
++ || defined(__aarch64__)
+ if (IMP(bgnm) || !BIGP(bgnm)) return;
+ DEFER_INTS;
+ must_free(CHARS(bgnm), (sizet)NUMDIGS(bgnm)*sizeof(BIGDIG));
+ CAR(bgnm) = INUM0;
+ CDR(bgnm) = INUM0;
+ ALLOW_INTS;
++#endif
+ }
+
+ /* can convert to string accurately with bignums */