From 14d34fec0c067c36d339fc87a5bd1aaa7d16cc6b Mon Sep 17 00:00:00 2001 From: abhishekmadan30 Date: Thu, 17 Jul 2025 15:46:18 -0400 Subject: [PATCH 1/4] Check for slash in route --- src/taskgraph/util/verify.py | 8 ++++++++ test/test_util_verify.py | 11 +++++++++++ 2 files changed, 19 insertions(+) diff --git a/src/taskgraph/util/verify.py b/src/taskgraph/util/verify.py index e4b9a530d..e03692700 100644 --- a/src/taskgraph/util/verify.py +++ b/src/taskgraph/util/verify.py @@ -206,9 +206,17 @@ def verify_routes_notification_filters( ) task_dict = task.task routes = task_dict.get("routes", []) + print(f"DEBUG: Task {task.label} routes: {routes}") for route in routes: + print(f"DEBUG: Checking route: {route}") if route.startswith(route_prefix): + # Check for invalid characters in the route + if "/" in route: + print(f"DEBUG: Found slash in route: {route}") + raise Exception( + f"{task.label} has invalid route with forward slash: {route}" + ) # Get the filter of the route route_filter = route.split(".")[-1] if route_filter not in valid_filters: diff --git a/test/test_util_verify.py b/test/test_util_verify.py index 682179505..7e516fe6e 100644 --- a/test/test_util_verify.py +++ b/test/test_util_verify.py @@ -199,6 +199,17 @@ def make_task_treeherder(label, symbol, platform="linux/opt"): DeprecationWarning, id="routes_notfication_filter: deprecated", ), + pytest.param( + "verify_routes_notification_filters", + make_graph( + make_task( + "invalid_slash", + task_def={"routes": ["notify.email.default@email/address.on-completed"]}, + ), + ), + Exception, + id="routes_notification_filter: invalid slash in route", + ), ), ) @pytest.mark.filterwarnings("error") From 24c097d08cf3b88d8f5ec1d943de5f251f835556 Mon Sep 17 00:00:00 2001 From: abhishekmadan30 Date: Thu, 17 Jul 2025 16:33:37 -0400 Subject: [PATCH 2/4] Clean up the patch of all debugs --- src/taskgraph/util/verify.py | 10 ++++++---- test/test_util_verify.py | 6 +++++- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/taskgraph/util/verify.py b/src/taskgraph/util/verify.py index e03692700..db0362fd6 100644 --- a/src/taskgraph/util/verify.py +++ b/src/taskgraph/util/verify.py @@ -172,6 +172,11 @@ def verify_trust_domain_v2_routes( for route in routes: if route.startswith(route_prefix): + # Check for invalid / in the route + if "/" in route: + raise Exception( + f"{task.label} has invalid route with forward slash: {route}" + ) if route in scratch_pad: raise Exception( f"conflict between {task.label}:{scratch_pad[route]} for route: {route}" @@ -206,14 +211,11 @@ def verify_routes_notification_filters( ) task_dict = task.task routes = task_dict.get("routes", []) - print(f"DEBUG: Task {task.label} routes: {routes}") for route in routes: - print(f"DEBUG: Checking route: {route}") if route.startswith(route_prefix): - # Check for invalid characters in the route + # Check for invalid / in the route if "/" in route: - print(f"DEBUG: Found slash in route: {route}") raise Exception( f"{task.label} has invalid route with forward slash: {route}" ) diff --git a/test/test_util_verify.py b/test/test_util_verify.py index 7e516fe6e..d6a7583bd 100644 --- a/test/test_util_verify.py +++ b/test/test_util_verify.py @@ -204,7 +204,11 @@ def make_task_treeherder(label, symbol, platform="linux/opt"): make_graph( make_task( "invalid_slash", - task_def={"routes": ["notify.email.default@email/address.on-completed"]}, + task_def={ + "routes": [ + "notify.email.default@email.address1/address2.on-completed" + ] + }, ), ), Exception, From 43d9aa13e62a76bf119ee22d35a60153c87fc30a Mon Sep 17 00:00:00 2001 From: abhishekmadan30 Date: Thu, 17 Jul 2025 22:35:55 -0400 Subject: [PATCH 3/4] updated verification --- src/taskgraph/util/verify.py | 29 +++++++++++++++++++---------- test/test_util_verify.py | 4 ++-- 2 files changed, 21 insertions(+), 12 deletions(-) diff --git a/src/taskgraph/util/verify.py b/src/taskgraph/util/verify.py index db0362fd6..852ed0ee0 100644 --- a/src/taskgraph/util/verify.py +++ b/src/taskgraph/util/verify.py @@ -172,11 +172,6 @@ def verify_trust_domain_v2_routes( for route in routes: if route.startswith(route_prefix): - # Check for invalid / in the route - if "/" in route: - raise Exception( - f"{task.label} has invalid route with forward slash: {route}" - ) if route in scratch_pad: raise Exception( f"conflict between {task.label}:{scratch_pad[route]} for route: {route}" @@ -214,11 +209,6 @@ def verify_routes_notification_filters( for route in routes: if route.startswith(route_prefix): - # Check for invalid / in the route - if "/" in route: - raise Exception( - f"{task.label} has invalid route with forward slash: {route}" - ) # Get the filter of the route route_filter = route.split(".")[-1] if route_filter not in valid_filters: @@ -233,6 +223,25 @@ def verify_routes_notification_filters( ) ) +@verifications.add("full_task_graph") +def verify_routes_invalid_slash( + task, taskgraph, scratch_pad, graph_config, parameters +): + """ + This function ensures that routes do not contain forward slashes. + """ + if task is None: + return + task_dict = task.task + routes = task_dict.get("routes", []) + + for route in routes: + # Check for invalid / in the route + if "/" in route: + raise Exception( + f"{task.label} has invalid route with forward slash: {route}" + ) + @verifications.add("full_task_graph") def verify_dependency_tiers(task, taskgraph, scratch_pad, graph_config, parameters): diff --git a/test/test_util_verify.py b/test/test_util_verify.py index d6a7583bd..cb54b1dd2 100644 --- a/test/test_util_verify.py +++ b/test/test_util_verify.py @@ -200,7 +200,7 @@ def make_task_treeherder(label, symbol, platform="linux/opt"): id="routes_notfication_filter: deprecated", ), pytest.param( - "verify_routes_notification_filters", + "verify_routes_invalid_slash", make_graph( make_task( "invalid_slash", @@ -212,7 +212,7 @@ def make_task_treeherder(label, symbol, platform="linux/opt"): ), ), Exception, - id="routes_notification_filter: invalid slash in route", + id="routes_invalid_slash: invalid slash in route", ), ), ) From e449dae1ed48712f700850303d9aeff45af29a5a Mon Sep 17 00:00:00 2001 From: abhishekmadan30 Date: Fri, 18 Jul 2025 11:45:36 -0400 Subject: [PATCH 4/4] Updated it to only impact index routes --- src/taskgraph/util/verify.py | 10 +++++----- test/test_util_verify.py | 6 +++--- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/taskgraph/util/verify.py b/src/taskgraph/util/verify.py index 852ed0ee0..d7d60bacd 100644 --- a/src/taskgraph/util/verify.py +++ b/src/taskgraph/util/verify.py @@ -223,10 +223,9 @@ def verify_routes_notification_filters( ) ) + @verifications.add("full_task_graph") -def verify_routes_invalid_slash( - task, taskgraph, scratch_pad, graph_config, parameters -): +def verify_index_route(task, taskgraph, scratch_pad, graph_config, parameters): """ This function ensures that routes do not contain forward slashes. """ @@ -234,10 +233,11 @@ def verify_routes_invalid_slash( return task_dict = task.task routes = task_dict.get("routes", []) + route_prefix = "index." for route in routes: - # Check for invalid / in the route - if "/" in route: + # Check for invalid / in the index route + if route.startswith(route_prefix) and "/" in route: raise Exception( f"{task.label} has invalid route with forward slash: {route}" ) diff --git a/test/test_util_verify.py b/test/test_util_verify.py index cb54b1dd2..83cca3899 100644 --- a/test/test_util_verify.py +++ b/test/test_util_verify.py @@ -200,19 +200,19 @@ def make_task_treeherder(label, symbol, platform="linux/opt"): id="routes_notfication_filter: deprecated", ), pytest.param( - "verify_routes_invalid_slash", + "verify_index_route", make_graph( make_task( "invalid_slash", task_def={ "routes": [ - "notify.email.default@email.address1/address2.on-completed" + "index.example.com/foobar.v2.latest.taskgraph.decision" ] }, ), ), Exception, - id="routes_invalid_slash: invalid slash in route", + id="verify_index_route: invalid slash in route", ), ), )