diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2021-03-12 16:21:32 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2021-03-12 16:21:32 +0900 |
| commit | 4ae5ae353564291cdb28108c26382c32242966a8 (patch) | |
| tree | 6cb495e5c3c59a0c9f46b8e4548f17e7082443d2 /src/load.c | |
| parent | 84e27d3b519d8fba87c6ffdf318ccadf67d5318f (diff) | |
| download | mruby-4ae5ae353564291cdb28108c26382c32242966a8.tar.gz mruby-4ae5ae353564291cdb28108c26382c32242966a8.zip | |
codegen.c: no integer overflow error in `codegen`; close #5376
Add new pool value type `IREP_TT_BIGINT` and generate integer overflow
error in the VM. In the future, `mruby` will support `Bignum` for
integers bigger than `mrb_int` (probably using `mpz`).
Diffstat (limited to 'src/load.c')
| -rw-r--r-- | src/load.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/load.c b/src/load.c index 68be23546..f370dc67e 100644 --- a/src/load.c +++ b/src/load.c @@ -161,6 +161,19 @@ read_irep_record_1(mrb_state *mrb, const uint8_t *bin, size_t *len, uint8_t flag return FALSE; /* INT64 not supported on MRB_32BIT */ #endif + case IREP_TT_BIGINT: + pool_data_len = bin_to_uint8(src); /* pool data length */ + src += sizeof(uint8_t); + { + char *p; + pool[i].tt = IREP_TT_BIGINT; + p = (char*)mrb_malloc(mrb, pool_data_len+2); + memcpy(p, src, pool_data_len+2); + pool[i].u.str = (const char*)p; + } + src += pool_data_len + 2; + break; + case IREP_TT_FLOAT: #ifndef MRB_NO_FLOAT pool[i].tt = tt; |
