From 790e6efd08ba99882a390c06f31ea66db0c24378 Mon Sep 17 00:00:00 2001 From: Naga Nandyala Date: Fri, 24 Jul 2026 08:57:36 +1000 Subject: [PATCH 1/2] {az} harden launcher against cwd module loading Replace python -m re-exec with runpy invocation and explicitly prepend the launcher src path to sys.path before module execution. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 08ab13f2-06ce-4fb7-bc01-ad4510b2f6bb --- src/azure-cli/az | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/azure-cli/az b/src/azure-cli/az index 96ee4dc639f..076f1d89571 100644 --- a/src/azure-cli/az +++ b/src/azure-cli/az @@ -1,5 +1,6 @@ #!/usr/bin/env python +import runpy import sys import os @@ -16,4 +17,7 @@ else: if os.environ.get('AZ_INSTALLER') is None: os.environ['AZ_INSTALLER'] = 'PIP' -os.execl(sys.executable, sys.executable, '-m', 'azure.cli', *sys.argv[1:]) +if dir not in sys.path: + sys.path.insert(0, dir) + +runpy.run_module('azure.cli', run_name='__main__', alter_sys=True) From 3146d82e307bbc5c596f58a0c12f4664e1324845 Mon Sep 17 00:00:00 2001 From: Naga Nandyala Date: Fri, 24 Jul 2026 09:10:24 +1000 Subject: [PATCH 2/2] {az} address review feedback on runpy launcher Use azure.cli.__main__ as runpy target and resolve launcher path robustly by falling back to launcher directory when ./src is absent. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 08ab13f2-06ce-4fb7-bc01-ad4510b2f6bb --- src/azure-cli/az | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/azure-cli/az b/src/azure-cli/az index 076f1d89571..a458573f803 100644 --- a/src/azure-cli/az +++ b/src/azure-cli/az @@ -4,20 +4,22 @@ import runpy import sys import os -dir = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'src') +launcher_dir = os.path.dirname(os.path.realpath(__file__)) +launcher_src_dir = os.path.join(launcher_dir, 'src') +module_search_path = launcher_src_dir if os.path.isdir(launcher_src_dir) else launcher_dir if os.environ.get('PYTHONPATH') is None: - os.environ['PYTHONPATH'] = dir + os.environ['PYTHONPATH'] = module_search_path else: os.environ['PYTHONPATH'] = os.pathsep.join([ - dir, + module_search_path, os.environ.get('PYTHONPATH'), ]) if os.environ.get('AZ_INSTALLER') is None: os.environ['AZ_INSTALLER'] = 'PIP' -if dir not in sys.path: - sys.path.insert(0, dir) +if module_search_path not in sys.path: + sys.path.insert(0, module_search_path) -runpy.run_module('azure.cli', run_name='__main__', alter_sys=True) +runpy.run_module('azure.cli.__main__', run_name='__main__', alter_sys=True)