From 148ec3e3bc8083ccb9ac9b7050ce540d1e0f0539 Mon Sep 17 00:00:00 2001 From: Kyohei Kadota Date: Thu, 26 Sep 2019 13:39:52 +0900 Subject: [PATCH] net/http/cgi: skip tests if not functional perl TestEnvOverride sets PATH to /wibble before executing a CGI. So customized Perl that is starting with '#!/usr/bin/env bash' will fail because /usr/bin/env can't lookup bash. Fixes #27790 Change-Id: I25e433061a7ff9da8c86429e934418fc15f12f90 Reviewed-on: https://go-review.googlesource.com/c/go/+/196845 Reviewed-by: Brad Fitzpatrick Run-TryBot: Brad Fitzpatrick TryBot-Result: Gobot Gobot --- src/net/http/cgi/host_test.go | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/src/net/http/cgi/host_test.go b/src/net/http/cgi/host_test.go index 1790d5de98..fb869a6728 100644 --- a/src/net/http/cgi/host_test.go +++ b/src/net/http/cgi/host_test.go @@ -455,6 +455,23 @@ func TestDirUnix(t *testing.T) { runCgiTest(t, h, "GET /test.cgi HTTP/1.0\nHost: example.com\n\n", expectedMap) } +func findPerl(t *testing.T) string { + t.Helper() + perl, err := exec.LookPath("perl") + if err != nil { + t.Skip("Skipping test: perl not found.") + } + perl, _ = filepath.Abs(perl) + + cmd := exec.Command(perl, "-e", "print 123") + cmd.Env = []string{"PATH=/garbage"} + out, err := cmd.Output() + if err != nil || string(out) != "123" { + t.Skipf("Skipping test: %s is not functional", perl) + } + return perl +} + func TestDirWindows(t *testing.T) { if runtime.GOOS != "windows" { t.Skip("Skipping windows specific test.") @@ -462,13 +479,7 @@ func TestDirWindows(t *testing.T) { cgifile, _ := filepath.Abs("testdata/test.cgi") - var perl string - var err error - perl, err = exec.LookPath("perl") - if err != nil { - t.Skip("Skipping test: perl not found.") - } - perl, _ = filepath.Abs(perl) + perl := findPerl(t) cwd, _ := os.Getwd() h := &Handler{ @@ -505,13 +516,7 @@ func TestEnvOverride(t *testing.T) { check(t) cgifile, _ := filepath.Abs("testdata/test.cgi") - var perl string - var err error - perl, err = exec.LookPath("perl") - if err != nil { - t.Skipf("Skipping test: perl not found.") - } - perl, _ = filepath.Abs(perl) + perl := findPerl(t) cwd, _ := os.Getwd() h := &Handler{ -- 2.50.0