diff options
| author | Scott Shawcroft <scott@tannewt.org> | 2019-02-04 21:23:27 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-02-04 21:23:27 -0800 |
| commit | 041a84e8f962e3591d1aa565cd6cea5a73d6d882 (patch) | |
| tree | 1f62a987e90a7cad559af2c207cc6ada778fba98 /py/sequence.c | |
| parent | 9bcc38e995648493fe35ad63a18bd65d63f64c21 (diff) | |
| parent | 844c20106bee7639f5fa83535806932bae354a71 (diff) | |
Merge pull request #1520 from tannewt/check_seq_multiply_for_overflow
Check sequence multiply for length overflow
Diffstat (limited to 'py/sequence.c')
| -rw-r--r-- | py/sequence.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/py/sequence.c b/py/sequence.c index cc31be983..a750e5bac 100644 --- a/py/sequence.c +++ b/py/sequence.c @@ -34,6 +34,15 @@ #define SWAP(type, var1, var2) { type t = var2; var2 = var1; var1 = t; } +// Detect when a multiply causes an overflow. +size_t mp_seq_multiply_len(size_t item_sz, size_t len) { + size_t new_len; + if (__builtin_mul_overflow(item_sz, len, &new_len)) { + mp_raise_msg(&mp_type_OverflowError, translate("small int overflow")); + } + return new_len; +} + // Implements backend of sequence * integer operation. Assumes elements are // memory-adjacent in sequence. void mp_seq_multiply(const void *items, size_t item_sz, size_t len, size_t times, void *dest) { |
