GDBFeature::num_regs holds the number of registers, but when using the compound literal construction, if the last array entry is not set, the array will be shorter. Prevent array overrun by making the array length explicit,
Signed-off-by: Philippe Mathieu-Daudé <[email protected]> --- scripts/feature_to_c.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/scripts/feature_to_c.py b/scripts/feature_to_c.py index 807af0e685c..3aa62fb895f 100644 --- a/scripts/feature_to_c.py +++ b/scripts/feature_to_c.py @@ -90,13 +90,16 @@ def writeliteral(indent, bytes): writeliteral(8, read) sys.stdout.write(',\n') writeliteral(8, bytes(feature_name, 'utf-8')) - sys.stdout.write(',\n (const char * const []) {\n') + sys.stdout.write(',\n') + sys.stdout.write(f' (const char * const [{num_regs}]) {{\n') for index, regname in enumerate(regnames): sys.stdout.write(f' [{regnums[index] - base_reg}] =\n') writeliteral(16, bytes(regname, 'utf-8')) sys.stdout.write(',\n') - sys.stdout.write(f' }},\n {num_regs},\n }},\n') + sys.stdout.write( ' },\n') + sys.stdout.write(f' {num_regs},\n') + sys.stdout.write( ' },\n') sys.stdout.write(' { NULL }\n};\n') -- 2.52.0
