potiuk commented on code in PR #61776:
URL: https://github.com/apache/airflow/pull/61776#discussion_r2795313706


##########
shared/secrets_masker/src/airflow_shared/secrets_masker/secrets_masker.py:
##########
@@ -260,15 +260,38 @@ def _record_attrs_to_ignore(self) -> Iterable[str]:
         )
         return frozenset(record.__dict__).difference({"msg", "args"})
 
-    def _redact_exception_with_context(self, exception):
+    def _redact_exception_with_context_or_cause(self, exception, visited=None):
         # Exception class may not be modifiable (e.g. declared by an
         # extension module such as JDBC).
         with contextlib.suppress(AttributeError):
+            if visited is None:
+                visited = set()
+
+            if id(exception) in visited:
+                # already visited - it was redacted earlier
+                return exception
+
+            # Check depth before adding to visited to ensure we skip 
exceptions beyond the limit
+            if len(visited) >= self.MAX_RECURSION_DEPTH:
+                return RuntimeError(
+                    f"Stack trace redaction hit recursion limit of 
{self.MAX_RECURSION_DEPTH} "
+                    f"when processing exception of type 
{type(exception).__name__}. "
+                    f"Redaction of this exception will be skipped to avoid "
+                    f"infinite recursion."
+                )
+
+            visited.add(id(exception))
+
             exception.args = (self.redact(v) for v in exception.args)

Review Comment:
   Oh. Absolutely. Thanks for pointing it out :) 



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to