From 3e1c18ad0c6057cd29a699595b73d4ad5d5c0a3a Mon Sep 17 00:00:00 2001 From: Thomas Heller Date: Tue, 30 Jul 2002 11:40:57 +0000 Subject: [PATCH] Fix SF 588452: debug build crashes on marshal.dumps([128] * 1000). See there for a description. Added test case. Bugfix candidate for 2.2.x, not sure about previous versions: probably low priority, because virtually no one runs debug builds. --- Lib/test/test_marshal.py | 3 +++ Python/marshal.c | 12 ++++++------ 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/Lib/test/test_marshal.py b/Lib/test/test_marshal.py index 53772246eb..9237af0b63 100644 --- a/Lib/test/test_marshal.py +++ b/Lib/test/test_marshal.py @@ -39,3 +39,6 @@ for base in maxint64, minint64, -maxint64, -(minint64 >> 1): base = 0 else: base >>= 1 + +# Simple-minded check for SF 588452: Debug build crashes +marshal.dumps([128] * 1000) diff --git a/Python/marshal.c b/Python/marshal.c index 0df46cf163..c00586dc93 100644 --- a/Python/marshal.c +++ b/Python/marshal.c @@ -84,17 +84,17 @@ w_string(char *s, int n, WFILE *p) static void w_short(int x, WFILE *p) { - w_byte( x & 0xff, p); - w_byte((x>> 8) & 0xff, p); + w_byte((char)( x & 0xff), p); + w_byte((char)((x>> 8) & 0xff), p); } static void w_long(long x, WFILE *p) { - w_byte((int)( x & 0xff), p); - w_byte((int)((x>> 8) & 0xff), p); - w_byte((int)((x>>16) & 0xff), p); - w_byte((int)((x>>24) & 0xff), p); + w_byte((char)( x & 0xff), p); + w_byte((char)((x>> 8) & 0xff), p); + w_byte((char)((x>>16) & 0xff), p); + w_byte((char)((x>>24) & 0xff), p); } #if SIZEOF_LONG > 4 -- 2.40.0