diff options
author | Alan Modra <amodra@gmail.com> | 2021-05-15 15:09:20 +0930 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2021-05-15 15:10:29 +0930 |
commit | b0d461ec373e35fd380a060e6027d781f8a3f752 (patch) | |
tree | fbf0f60e6978a47eca883c621b84dce51e5e0960 /binutils | |
parent | 46d1214d887cdd2979fec2344cda1720abbbd33f (diff) | |
download | fsf-binutils-gdb-b0d461ec373e35fd380a060e6027d781f8a3f752.zip fsf-binutils-gdb-b0d461ec373e35fd380a060e6027d781f8a3f752.tar.gz fsf-binutils-gdb-b0d461ec373e35fd380a060e6027d781f8a3f752.tar.bz2 |
display_debug_macro
* dwarf.c (display_debug_macro): Print strings that might not
be zero terminated with %*s. Don't bump curr if unterminated.
Diffstat (limited to 'binutils')
-rw-r--r-- | binutils/ChangeLog | 5 | ||||
-rw-r--r-- | binutils/dwarf.c | 16 |
2 files changed, 15 insertions, 6 deletions
diff --git a/binutils/ChangeLog b/binutils/ChangeLog index ecf389a..1926afb 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,5 +1,10 @@ 2021-05-15 Alan Modra <amodra@gmail.com> + * dwarf.c (display_debug_macro): Print strings that might not + be zero terminated with %*s. Don't bump curr if unterminated. + +2021-05-15 Alan Modra <amodra@gmail.com> + * dwarf.c (get_line_filename_and_dirname): Delete initial_length_size. Simplify length sanity check, and check for too small lengths. Constrain data reads to header length. Avoid pointer UB. diff --git a/binutils/dwarf.c b/binutils/dwarf.c index 9d78291..68732cf 100644 --- a/binutils/dwarf.c +++ b/binutils/dwarf.c @@ -6042,17 +6042,21 @@ display_debug_macro (struct dwarf_section *section, case DW_MACRO_define: READ_ULEB (lineno, curr, end); string = curr; - curr += strnlen ((char *) string, end - string) + 1; - printf (_(" DW_MACRO_define - lineno : %d macro : %s\n"), - lineno, string); + curr += strnlen ((char *) string, end - string); + printf (_(" DW_MACRO_define - lineno : %d macro : %*s\n"), + lineno, (int) (curr - string), string); + if (curr < end) + curr++; break; case DW_MACRO_undef: READ_ULEB (lineno, curr, end); string = curr; - curr += strnlen ((char *) string, end - string) + 1; - printf (_(" DW_MACRO_undef - lineno : %d macro : %s\n"), - lineno, string); + curr += strnlen ((char *) string, end - string); + printf (_(" DW_MACRO_undef - lineno : %d macro : %*s\n"), + lineno, (int) (curr - string), string); + if (curr < end) + curr++; break; case DW_MACRO_start_file: |