diff options
author | Dino Radakovic <dinor@google.com> | 2024-02-13 13:04:38 -0800 |
---|---|---|
committer | Copybara-Service <copybara-worker@google.com> | 2024-02-13 13:06:14 -0800 |
commit | 4ea6e47cea43a546307afae982350f0899349c20 (patch) | |
tree | cf76a4ca507289aa1809d811da95b2d476a45013 | |
parent | 34604d5b1f6ae14c65b3992478b59f7108051979 (diff) | |
download | abseil-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.cc | 2 |
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); |