cmd/asm: fix another infinite loop in register list parser
The code parsing register lists involves an inner loop on each range defined by the lo,hi bounds. The condition on this loop (for lo<=hi) is fragile, because the bounds are unsigned 16 bits numbers. In some corner cases, the calculated upper bound is 2^16-1 leading to an infinite loop. Parsing operand `[):[o-FP` results in: - an infinite loop for non ARM architectures - the generation of almost 2^16 errors for the ARM architecture (which are then ignored) This CL improves the code in 3 ways: - bail out early when parsing non R prefixed registers - make sure the register index is never negative - make sure the number of iterations is limited by the maximum size of the range (as a defensive measure). Fixes #12469 Change-Id: Ib1e7e36fb8ad5a3a52c50fc6219d3cfe2b39cc34 Reviewed-on: https://go-review.googlesource.com/14314Reviewed-by: Rob Pike <r@golang.org>
Showing
Please
register
or
sign in
to comment