Merge 7f2796464f61123a3c36804fdf8431ca2a6d7de6 into 7927a45143da95dc4151519ceda2de78a7cd55c3

This commit is contained in:
bestgopher 2022-03-17 02:00:37 +09:00 committed by GitHub
commit 98d84d6c24
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 28 additions and 3 deletions

View File

@ -11,6 +11,7 @@ import (
"path" "path"
"reflect" "reflect"
"runtime" "runtime"
"strconv"
"strings" "strings"
) )
@ -140,10 +141,12 @@ func resolveAddress(addr []string) string {
switch len(addr) { switch len(addr) {
case 0: case 0:
if port := os.Getenv("PORT"); port != "" { if port := os.Getenv("PORT"); port != "" {
if isValidPORTEnvVar(port) {
debugPrint("Environment variable PORT=\"%s\"", port) debugPrint("Environment variable PORT=\"%s\"", port)
return ":" + port return ":" + port
} }
debugPrint("Environment variable PORT is undefined. Using port :8080 by default") }
debugPrint("Environment variable PORT is undefined or invalid. Using port :8080 by default")
return ":8080" return ":8080"
case 1: case 1:
return addr[0] return addr[0]
@ -151,3 +154,10 @@ func resolveAddress(addr []string) string {
panic("too many parameters") panic("too many parameters")
} }
} }
// Determine the PORT environment variable whether is valid。
// If the PORT can be parsed to uint(0-65535)return true。
func isValidPORTEnvVar(portString string) bool {
_, err := strconv.ParseUint(portString, 10, 16)
return err == nil
}

View File

@ -143,3 +143,18 @@ func TestMarshalXMLforH(t *testing.T) {
e := h.MarshalXML(enc, x) e := h.MarshalXML(enc, x)
assert.Error(t, e) assert.Error(t, e)
} }
func TestIsValidPPORTEnvVar(t *testing.T) {
assert.Equal(t, false, isValidPORTEnvVar("abc"))
assert.Equal(t, false, isValidPORTEnvVar("-1"))
assert.Equal(t, false, isValidPORTEnvVar("-100"))
assert.Equal(t, true, isValidPORTEnvVar("1"))
assert.Equal(t, true, isValidPORTEnvVar("1000"))
assert.Equal(t, true, isValidPORTEnvVar("10000"))
assert.Equal(t, false, isValidPORTEnvVar(" 10000"))
assert.Equal(t, false, isValidPORTEnvVar("10000 "))
assert.Equal(t, false, isValidPORTEnvVar("10000."))
assert.Equal(t, true, isValidPORTEnvVar("65535"))
assert.Equal(t, false, isValidPORTEnvVar("65536"))
assert.Equal(t, false, isValidPORTEnvVar("655360"))
}