~ chicken-core (chicken-5) 1c9e888c2daf5c0635b879e9946fe213f7bd8c3d
commit 1c9e888c2daf5c0635b879e9946fe213f7bd8c3d
Author: felix <felix@call-with-current-continuation.org>
AuthorDate: Sat Sep 19 11:30:46 2020 +0200
Commit: Evan Hanson <evhan@foldling.org>
CommitDate: Thu Sep 24 22:11:09 2020 +1200
Ensure lambda-info length in C_lihdr is cast to C_char
As lambda-info strings that exceed 127 cause a signed char overflow, we must
cast the length to C_char, or C++ compilers will reject the generated code.
Signed-off-by: Evan Hanson <evhan@foldling.org>
diff --git a/chicken.h b/chicken.h
index d75fe04f..ad3ba9da 100644
--- a/chicken.h
+++ b/chicken.h
@@ -1487,17 +1487,17 @@ typedef void (C_ccall *C_proc)(C_word, C_word *) C_noret;
#ifdef C_BIG_ENDIAN
# ifdef C_SIXTY_FOUR
# define C_lihdr(x, y, z) ((C_LAMBDA_INFO_TYPE >> 56) & 0xff), \
- 0, 0, 0, 0, (x), (y), (z)
+ 0, 0, 0, 0, (x), (y), ((C_char)(z))
# else
# define C_lihdr(x, y, z) ((C_LAMBDA_INFO_TYPE >> 24) & 0xff), \
- (x), (y), (z)
+ (x), (y), ((C_char)(z))
# endif
#else
# ifdef C_SIXTY_FOUR
-# define C_lihdr(x, y, z) (z), (y), (x), 0, 0, 0, 0, \
+# define C_lihdr(x, y, z) ((C_char)(z)), (y), (x), 0, 0, 0, 0, \
((C_LAMBDA_INFO_TYPE >> 56) & 0xff)
# else
-# define C_lihdr(x, y, z) (z), (y), (x), \
+# define C_lihdr(x, y, z) ((C_char)(z)), (y), (x), \
((C_LAMBDA_INFO_TYPE >> 24) & 0xff)
# endif
#endif
Trap