@@ -250,3 +250,42 @@ def run(arguments: list[str], **_kwargs: object) -> object:
250250 self .assertEqual (len (self .recovery .CLI_ASSETS ), len (attestations ))
251251 self .assertEqual ("php" , calls [- 1 ][0 ])
252252
253+ def test_phar_execution_receives_no_workflow_credentials_or_other_secrets (self ) -> None :
254+ version = "0.1.94"
255+ commit = "36bde75882980e834854a145c9ad0f61ceec4659"
256+ phar_environment : dict [object , object ] | None = None
257+
258+ def run (arguments : list [str ], ** kwargs : object ) -> object :
259+ nonlocal phar_environment
260+ if Path (arguments [0 ]).name == "php" :
261+ environment = kwargs .get ("env" )
262+ if isinstance (environment , dict ):
263+ phar_environment = environment
264+ return mock .Mock (
265+ returncode = 0 ,
266+ stdout = f"dw { version } (commit { commit [:12 ]} , built 2026-07-20)" ,
267+ stderr = "" ,
268+ )
269+ return mock .Mock (returncode = 0 , stdout = "verified" , stderr = "" )
270+
271+ inherited_secrets = {
272+ "GITHUB_TOKEN" : "github-token" ,
273+ "GH_TOKEN" : "gh-token" ,
274+ "AWS_SECRET_ACCESS_KEY" : "cloud-secret" ,
275+ "DATABASE_URL" : "postgres://user:password@example.invalid/database" ,
276+ }
277+ allowed_path = "/opt/php/bin:/usr/bin"
278+ with (
279+ mock .patch .dict (self .recovery .os .environ , {** inherited_secrets , "PATH" : allowed_path }, clear = False ),
280+ mock .patch .object (self .recovery .shutil , "which" , return_value = "/usr/bin/tool" ),
281+ mock .patch .object (self .recovery .subprocess , "run" , side_effect = run ),
282+ ):
283+ self .recovery .verify_cli (
284+ self .release_client (version ),
285+ self .recovery .COMPONENTS ["cli" ],
286+ version ,
287+ commit ,
288+ )
289+
290+ self .assertEqual ({"PATH" : allowed_path }, phar_environment )
291+ self .assertTrue (inherited_secrets .keys ().isdisjoint (phar_environment or {}))
0 commit comments