1 << 31 is invalid for signed integers, fix it by making 1 unsigned.
Found by Clang trunk's Undefined-Behavior Sanitizer. [more to come]
diff --git a/Modules/_sre.c b/Modules/_sre.c
index baf5f6a..a5a6b1e 100644
--- a/Modules/_sre.c
+++ b/Modules/_sre.c
@@ -459,7 +459,7 @@
}
else {
/* <CHARSET> <bitmap> (32 bits per code word) */
- if (ch < 256 && (set[ch >> 5] & (1 << (ch & 31))))
+ if (ch < 256 && (set[ch >> 5] & (1u << (ch & 31))))
return ok;
set += 8;
}
@@ -498,7 +498,7 @@
block = -1;
set += 64;
if (block >=0 &&
- (set[block*8 + ((ch & 255)>>5)] & (1 << (ch & 31))))
+ (set[block*8 + ((ch & 255)>>5)] & (1u << (ch & 31))))
return ok;
set += count*8;
}