The GitHub Actions job "Tests" on airflow.git has succeeded.
Run started by GitHub user Usiel (triggered by Usiel).

Head commit for run:
fdd568a7db4f07431fea26c6d16b4a427665c887 / Usiel Riedl 
<[email protected]>
Fix for infinite recursion due to secrets_masker

We can get into trouble for types that cannot be initiated with re2's 
`type(obj)()` call. The `secrets_masker` thus fails, which triggers a warning 
log, which also fails because we pass the object to the logger, which is then 
masked again, and so forth.

We can break the recursion by emitting a log without trying to redact the value 
again (this ensures no new bug will cause a stack overflow). This issue has 
occured previously: 
https://github.com/apache/airflow/issues/19816#issuecomment-983311373
Additionally, we fix this particular bug by ensuring whatever re2 receives is a 
simple `str`.

I noticed this issue while working with a DAG that calls Airflow's DB cleanup 
function.

Example DAG:
```
from datetime import datetime

from airflow import DAG
from airflow.models import Variable
from airflow.operators.python import PythonOperator

class MyStringClass(str):
    def __init__(self, required_arg):
        pass

def fail(task_instance):
    # make sure the `SecretsMasker` has a replacer
    Variable.set(key="secret", value="secret_value")
    Variable.get("secret")
    # trigger the infinite recursion
    task_instance.log.info("%s", MyStringClass("secret_value"))

with DAG(
    dag_id="secrets_masker_recursion",
    start_date=datetime(2023, 9, 26),
):
    PythonOperator(task_id="fail", python_callable=fail)

```

Report URL: https://github.com/apache/airflow/actions/runs/6954914388

With regards,
GitHub Actions via GitBox


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to