From c793cac124dd2eb34042f2e43abb099a26e34cb0 Mon Sep 17 00:00:00 2001 From: Nick Clifton Date: Mon, 13 Mar 2017 17:49:32 +0000 Subject: Sync libiberty sources with GCC. PR demangler/70909 PR demangler/67264 * cp-demangle.c: Fix endless recursion. Pass struct demangle_component as non const. (d_make_empty): Initialize variable. (d_print_comp_inner): Limit recursion. (d_print_comp): Decrement variable. * cp-demint.c (cplus_demangle_fill_component): Initialize variable. (cplus_demangle_fill_builtin_type): Likewise. (cplus_demangle_fill_operator): Likewise. * testsuite/demangle-expected: Add tests. --- include/ChangeLog | 9 +++++++++ include/demangle.h | 9 +++++++-- 2 files changed, 16 insertions(+), 2 deletions(-) (limited to 'include') diff --git a/include/ChangeLog b/include/ChangeLog index bc68f3b..a484f1a 100644 --- a/include/ChangeLog +++ b/include/ChangeLog @@ -1,3 +1,12 @@ +2017-03-13 Markus Trippelsdorf + + PR demangler/70909 + PR demangler/67264 + * demangle.h (struct demangle_component): Add d_printing field. + (cplus_demangle_print): Remove const qualifier from tree + parameter. + (cplus_demangle_print_callback): Likewise. + 2017-03-13 Nick Clifton PR binutils/21202 diff --git a/include/demangle.h b/include/demangle.h index 7cc955d..996203b 100644 --- a/include/demangle.h +++ b/include/demangle.h @@ -494,6 +494,11 @@ struct demangle_component /* The type of this component. */ enum demangle_component_type type; + /* Guard against recursive component printing. + Initialize to zero. Private to d_print_comp. + All other fields are final after initialization. */ + int d_printing; + union { /* For DEMANGLE_COMPONENT_NAME. */ @@ -688,7 +693,7 @@ cplus_demangle_v3_components (const char *mangled, int options, void **mem); extern char * cplus_demangle_print (int options, - const struct demangle_component *tree, + struct demangle_component *tree, int estimated_length, size_t *p_allocated_size); @@ -708,7 +713,7 @@ cplus_demangle_print (int options, extern int cplus_demangle_print_callback (int options, - const struct demangle_component *tree, + struct demangle_component *tree, demangle_callbackref callback, void *opaque); #ifdef __cplusplus -- cgit v1.1