diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2017-01-11 17:59:56 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2017-01-11 17:59:56 +0900 |
| commit | db1bd078bedcc33bfd3ca4c45f46bc553786bfd8 (patch) | |
| tree | 0c30b4ed08d042069a96f727dc9caadf3b3c3f7e /src | |
| parent | e1ff71029f95e3274136263adbdc51c662ec52de (diff) | |
| download | mruby-db1bd078bedcc33bfd3ca4c45f46bc553786bfd8.tar.gz mruby-db1bd078bedcc33bfd3ca4c45f46bc553786bfd8.zip | |
Use temporary variable to avoid potential crash; fix #3387
This issue was original reported by https://hackerone.com/icanthack
https://hackerone.com/titanous suggested the solution.
`regs` may be reallocated in the function call.
Diffstat (limited to 'src')
| -rw-r--r-- | src/vm.c | 3 |
1 files changed, 2 insertions, 1 deletions
@@ -2411,7 +2411,8 @@ RETRY_TRY_BLOCK: CASE(OP_RANGE) { /* A B C R(A) := range_new(R(B),R(B+1),C) */ int b = GETARG_B(i); - regs[GETARG_A(i)] = mrb_range_new(mrb, regs[b], regs[b+1], GETARG_C(i)); + mrb_value val = mrb_range_new(mrb, regs[b], regs[b+1], GETARG_C(i)); + regs[GETARG_A(i)] = val; ARENA_RESTORE(mrb, ai); NEXT; } |
