This is an automated email from the ASF dual-hosted git repository. ephraimanierobi pushed a commit to branch v2-6-test in repository https://gitbox.apache.org/repos/asf/airflow.git
commit fd7f63f1963b1b5f64d6e44a052f7a62d716e667 Author: Pierre Jeambrun <[email protected]> AuthorDate: Fri Jun 23 09:55:19 2023 +0200 Use re2 for matching untrusted regex (#32060) (cherry picked from commit 116e607ddcb32480e57c342f48226545ac6fc315) --- airflow/models/dag.py | 7 ++++--- setup.cfg | 1 + 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/airflow/models/dag.py b/airflow/models/dag.py index 97c973f785..331feae28e 100644 --- a/airflow/models/dag.py +++ b/airflow/models/dag.py @@ -26,7 +26,6 @@ import logging import os import pathlib import pickle -import re import sys import traceback import warnings @@ -43,6 +42,7 @@ from typing import ( Iterable, Iterator, List, + Pattern, Sequence, Union, cast, @@ -52,6 +52,7 @@ from urllib.parse import urlsplit import jinja2 import pendulum +import re2 as re from dateutil.relativedelta import relativedelta from pendulum.tz.timezone import Timezone from sqlalchemy import Boolean, Column, ForeignKey, Index, Integer, String, Text, and_, case, func, not_, or_ @@ -2169,7 +2170,7 @@ class DAG(LoggingMixin): def partial_subset( self, - task_ids_or_regex: str | re.Pattern | Iterable[str], + task_ids_or_regex: str | Pattern | Iterable[str], include_downstream=False, include_upstream=True, include_direct_upstream=False, @@ -2196,7 +2197,7 @@ class DAG(LoggingMixin): memo = {id(self.task_dict): None, id(self._task_group): None} dag = copy.deepcopy(self, memo) # type: ignore - if isinstance(task_ids_or_regex, (str, re.Pattern)): + if isinstance(task_ids_or_regex, (str, Pattern)): matched_tasks = [t for t in self.tasks if re.findall(task_ids_or_regex, t.task_id)] else: matched_tasks = [t for t in self.tasks if t.task_id in task_ids_or_regex] diff --git a/setup.cfg b/setup.cfg index 4f73a4aa4a..6e09495c9b 100644 --- a/setup.cfg +++ b/setup.cfg @@ -100,6 +100,7 @@ install_requires = flask-login>=0.6.2 flask-session>=0.4.0 flask-wtf>=0.15 + google-re2>=1.0 graphviz>=0.12 gunicorn>=20.1.0 httpx
