diff --git a/utils.go b/utils.go index 71b80de7..e3663d74 100644 --- a/utils.go +++ b/utils.go @@ -11,6 +11,7 @@ import ( "path" "reflect" "runtime" + "strconv" "strings" ) @@ -137,7 +138,7 @@ func joinPaths(absolutePath, relativePath string) string { func resolveAddress(addr []string) string { switch len(addr) { case 0: - if port := os.Getenv("PORT"); port != "" { + if port := os.Getenv("PORT"); port != "" && isValidPortEnvVar(port) { debugPrint("Environment variable PORT=\"%s\"", port) return ":" + port } @@ -149,3 +150,10 @@ func resolveAddress(addr []string) string { panic("too many parameters") } } + +// Determine whether the PORT environment variable is valid。 +// If the PORT can be parsed to int(0-65535),return true。 +func isValidPortEnvVar(portString string) bool { + _, err := strconv.ParseUint(portString, 10, 16) + return err == nil +} \ No newline at end of file diff --git a/utils_test.go b/utils_test.go index 9b57c57b..d85a478d 100644 --- a/utils_test.go +++ b/utils_test.go @@ -137,3 +137,14 @@ func TestMarshalXMLforH(t *testing.T) { e := h.MarshalXML(enc, x) assert.Error(t, e) } + +func TestIsValidPortEnvVar(t *testing.T) { + assert.Equal(t, false, isValidPortEnvVar("abc")) + assert.Equal(t, false, isValidPortEnvVar("-1")) + assert.Equal(t, true, isValidPortEnvVar("1")) + assert.Equal(t, true, isValidPortEnvVar("1000")) + assert.Equal(t, true, isValidPortEnvVar("10000")) + assert.Equal(t, true, isValidPortEnvVar("65535")) + assert.Equal(t, false, isValidPortEnvVar("65536")) + assert.Equal(t, false, isValidPortEnvVar("655360")) +} \ No newline at end of file