aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDino Radakovic <dinor@google.com>2024-02-13 13:04:38 -0800
committerCopybara-Service <copybara-worker@google.com>2024-02-13 13:06:14 -0800
commit4ea6e47cea43a546307afae982350f0899349c20 (patch)
treecf76a4ca507289aa1809d811da95b2d476a45013
parent34604d5b1f6ae14c65b3992478b59f7108051979 (diff)
downloadabseil-4ea6e47cea43a546307afae982350f0899349c20.tar.gz
abseil-4ea6e47cea43a546307afae982350f0899349c20.tar.bz2
abseil-4ea6e47cea43a546307afae982350f0899349c20.zip
`demangle`: Add complexity guard to `ParseQRequiresExpr`
This function copies the parser's state onto the stack in order to perform backtracking. Adding a complexity guard will ensure that it fails gracefully, instead of contributing to excessive consumption of stack space. PiperOrigin-RevId: 606720511 Change-Id: I2f6f03e5f8bc4cc571a4159ecfc2af6f3e00fa68
-rw-r--r--absl/debugging/internal/demangle.cc2
1 files changed, 2 insertions, 0 deletions
diff --git a/absl/debugging/internal/demangle.cc b/absl/debugging/internal/demangle.cc
index f86421bf..3859e44f 100644
--- a/absl/debugging/internal/demangle.cc
+++ b/absl/debugging/internal/demangle.cc
@@ -1942,6 +1942,8 @@ static bool ParseExprCastValue(State *state) {
// template <typename T>
// int foo(T);
static bool ParseQRequiresClauseExpr(State *state) {
+ ComplexityGuard guard(state);
+ if (guard.IsTooComplex()) return false;
ParseState copy = state->parse_state;
DisableAppend(state);