summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--dwflpp.cxx7
1 files changed, 7 insertions, 0 deletions
diff --git a/dwflpp.cxx b/dwflpp.cxx
index b1d9a32b..0c45eb7d 100644
--- a/dwflpp.cxx
+++ b/dwflpp.cxx
@@ -2182,8 +2182,15 @@ dwflpp::express_as_string (string prelude,
fprintf(memstream, "{\n");
fprintf(memstream, "%s", prelude.c_str());
+
unsigned int stack_depth;
bool deref = c_emit_location (memstream, head, 1, &stack_depth);
+
+ // Ensure that DWARF keeps loc2c to a "reasonable" stack size
+ // 32 intptr_t leads to max 256 bytes on the stack
+ if (stack_depth > 32)
+ throw semantic_error("oversized DWARF stack");
+
fprintf(memstream, "%s", postlude.c_str());
fprintf(memstream, " goto out;\n");