diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog index ea30c778e8ae1c79c9320461ee064a384437b12a..13c7625e522ea48b5365b7822ee6f999d9266334 100644 --- a/gcc/java/ChangeLog +++ b/gcc/java/ChangeLog @@ -1,3 +1,9 @@ +2003-11-19 Jeff Sturm <jsturm@one-point.com> + + Fix PR java/13024. + * except.c (prepare_eh_table_type): Allocate variable-sized + buffer `buf' with alloca. + 2003-11-17 Jeff Sturm <jsturm@one-point.com> Fix PR java/12857. diff --git a/gcc/java/except.c b/gcc/java/except.c index dc97b42fabff5003d509e780ffa06b4f2fd502ae..c0fa800c26205de5792d34838aefdd54a7bab669 100644 --- a/gcc/java/except.c +++ b/gcc/java/except.c @@ -312,6 +312,10 @@ tree prepare_eh_table_type (tree type) { tree exp; + const char *name; + char *buf; + tree decl; + tree utf8_ref; /* The "type" (match_info) in a (Java) exception table is a pointer to: * a) NULL - meaning match any type in a try-finally. @@ -323,10 +327,9 @@ prepare_eh_table_type (tree type) exp = NULL_TREE; else if (is_compiled_class (type) && !flag_indirect_dispatch) { - char buf[64]; - tree decl; - sprintf (buf, "%s_ref", - IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)))); + name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type))); + buf = alloca (strlen (name) + 5); + sprintf (buf, "%s_ref", name); decl = build_decl (VAR_DECL, get_identifier (buf), ptr_type_node); TREE_STATIC (decl) = 1; DECL_ARTIFICIAL (decl) = 1; @@ -342,11 +345,10 @@ prepare_eh_table_type (tree type) } else { - tree decl; - tree utf8_ref = build_utf8_ref (DECL_NAME (TYPE_NAME (type))); - char buf[64]; - sprintf (buf, "%s_ref", - IDENTIFIER_POINTER (DECL_NAME (TREE_OPERAND (utf8_ref, 0)))); + utf8_ref = build_utf8_ref (DECL_NAME (TYPE_NAME (type))); + name = IDENTIFIER_POINTER (DECL_NAME (TREE_OPERAND (utf8_ref, 0))); + buf = alloca (strlen (name) + 5); + sprintf (buf, "%s_ref", name); decl = build_decl (VAR_DECL, get_identifier (buf), utf8const_ptr_type); TREE_STATIC (decl) = 1; DECL_ARTIFICIAL (decl) = 1;