Skip to content

Commit

Permalink
Merge pull request #17073 from rhatdan/regexp
Browse files Browse the repository at this point in the history
Compile regex on demand not in init
  • Loading branch information
openshift-merge-robot authored Jan 11, 2023
2 parents 1e45103 + 758f20e commit b0be367
Show file tree
Hide file tree
Showing 5 changed files with 99 additions and 73 deletions.
10 changes: 8 additions & 2 deletions cmd/podman/parse/net.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import (
"os"
"regexp"
"strings"
"sync"
)

const (
Expand All @@ -22,8 +23,9 @@ const (

var (
whiteSpaces = " \t"
alphaRegexp = regexp.MustCompile(`[a-zA-Z]`)
domainRegexp = regexp.MustCompile(`^(:?(:?[a-zA-Z0-9]|(:?[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9]))(:?\.(:?[a-zA-Z0-9]|(:?[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])))*)\.?\s*$`)
alphaRegexp *regexp.Regexp
domainRegexp *regexp.Regexp
onceRegex sync.Once
)

// validateExtraHost validates that the specified string is a valid extrahost and returns it.
Expand Down Expand Up @@ -52,6 +54,10 @@ func validateIPAddress(val string) (string, error) {
}

func ValidateDomain(val string) (string, error) {
onceRegex.Do(func() {
alphaRegexp = regexp.MustCompile(`[a-zA-Z]`)
domainRegexp = regexp.MustCompile(`^(:?(:?[a-zA-Z0-9]|(:?[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9]))(:?\.(:?[a-zA-Z0-9]|(:?[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])))*)\.?\s*$`)
})
if alphaRegexp.FindString(val) == "" {
return "", fmt.Errorf("%s is not a valid domain", val)
}
Expand Down
3 changes: 0 additions & 3 deletions libpod/define/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package define
import (
"bufio"
"io"
"regexp"

"github.com/containers/common/libnetwork/types"
)
Expand All @@ -20,8 +19,6 @@ var (
NameRegex = types.NameRegex
// RegexError is thrown in presence of an invalid container/pod name.
RegexError = types.RegexError
// UmaskRegex is a regular expression to validate Umask.
UmaskRegex = regexp.MustCompile(`^[0-7]{1,4}$`)
)

const (
Expand Down
12 changes: 11 additions & 1 deletion libpod/options.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@ import (
"net"
"os"
"path/filepath"
"regexp"
"strings"
"sync"
"syscall"

"github.com/containers/buildah/pkg/parse"
Expand All @@ -28,6 +30,11 @@ import (
"github.com/sirupsen/logrus"
)

var (
umaskRegex *regexp.Regexp
onceRegex sync.Once
)

// WithStorageConfig uses the given configuration to set up container storage.
// If this is not specified, the system default configuration will be used
// instead.
Expand Down Expand Up @@ -1790,11 +1797,14 @@ func WithTimezone(path string) CtrCreateOption {

// WithUmask sets the umask in the container
func WithUmask(umask string) CtrCreateOption {
onceRegex.Do(func() {
umaskRegex = regexp.MustCompile(`^[0-7]{1,4}$`)
})
return func(ctr *Container) error {
if ctr.valid {
return define.ErrCtrFinalized
}
if !define.UmaskRegex.MatchString(umask) {
if !umaskRegex.MatchString(umask) {
return fmt.Errorf("invalid umask string %s: %w", umask, define.ErrInvalidArg)
}
ctr.config.Umask = umask
Expand Down
8 changes: 7 additions & 1 deletion pkg/bindings/images/build.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import (
"runtime"
"strconv"
"strings"
"sync"

"github.com/containers/buildah/define"
"github.com/containers/image/v5/types"
Expand All @@ -37,11 +38,16 @@ type devino struct {
}

var (
iidRegex = regexp.MustCompile(`^[0-9a-f]{12}`)
iidRegex *regexp.Regexp
onceRegex sync.Once
)

// Build creates an image using a containerfile reference
func Build(ctx context.Context, containerFiles []string, options entities.BuildOptions) (*entities.BuildReport, error) {
onceRegex.Do(func() {
iidRegex = regexp.MustCompile(`^[0-9a-f]{12}`)
})

if options.CommonBuildOpts == nil {
options.CommonBuildOpts = new(define.CommonBuildOptions)
}
Expand Down
139 changes: 73 additions & 66 deletions pkg/systemd/quadlet/quadlet.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (
"path/filepath"
"regexp"
"strings"
"sync"

"github.com/containers/podman/v4/pkg/systemd/parser"
)
Expand All @@ -29,8 +30,6 @@ const (
XNetworkGroup = "X-Network"
)

var validPortRange = regexp.MustCompile(`\d+(-\d+)?(/udp|/tcp)?$`)

// All the supported quadlet keys
const (
KeyContainerName = "ContainerName"
Expand Down Expand Up @@ -75,70 +74,75 @@ const (
KeyConfigMap = "ConfigMap"
)

// Supported keys in "Container" group
var supportedContainerKeys = map[string]bool{
KeyContainerName: true,
KeyImage: true,
KeyEnvironment: true,
KeyEnvironmentFile: true,
KeyEnvironmentHost: true,
KeyExec: true,
KeyNoNewPrivileges: true,
KeyDropCapability: true,
KeyAddCapability: true,
KeyReadOnly: true,
KeyRemapUsers: true,
KeyRemapUID: true,
KeyRemapGID: true,
KeyRemapUIDSize: true,
KeyNotify: true,
KeyExposeHostPort: true,
KeyPublishPort: true,
KeyUser: true,
KeyGroup: true,
KeyVolume: true,
KeyPodmanArgs: true,
KeyLabel: true,
KeyAnnotation: true,
KeyRunInit: true,
KeyVolatileTmp: true,
KeyTimezone: true,
KeySeccompProfile: true,
KeyAddDevice: true,
KeyNetwork: true,
}

// Supported keys in "Volume" group
var supportedVolumeKeys = map[string]bool{
KeyUser: true,
KeyGroup: true,
KeyLabel: true,
}

// Supported keys in "Volume" group
var supportedNetworkKeys = map[string]bool{
KeyNetworkDisableDNS: true,
KeyNetworkDriver: true,
KeyNetworkGateway: true,
KeyNetworkInternal: true,
KeyNetworkIPRange: true,
KeyNetworkIPAMDriver: true,
KeyNetworkIPv6: true,
KeyNetworkOptions: true,
KeyNetworkSubnet: true,
KeyLabel: true,
}

// Supported keys in "Kube" group
var supportedKubeKeys = map[string]bool{
KeyYaml: true,
KeyRemapUID: true,
KeyRemapGID: true,
KeyRemapUsers: true,
KeyRemapUIDSize: true,
KeyNetwork: true,
KeyConfigMap: true,
}
var (
onceRegex sync.Once
validPortRange *regexp.Regexp

// Supported keys in "Container" group
supportedContainerKeys = map[string]bool{
KeyContainerName: true,
KeyImage: true,
KeyEnvironment: true,
KeyEnvironmentFile: true,
KeyEnvironmentHost: true,
KeyExec: true,
KeyNoNewPrivileges: true,
KeyDropCapability: true,
KeyAddCapability: true,
KeyReadOnly: true,
KeyRemapUsers: true,
KeyRemapUID: true,
KeyRemapGID: true,
KeyRemapUIDSize: true,
KeyNotify: true,
KeyExposeHostPort: true,
KeyPublishPort: true,
KeyUser: true,
KeyGroup: true,
KeyVolume: true,
KeyPodmanArgs: true,
KeyLabel: true,
KeyAnnotation: true,
KeyRunInit: true,
KeyVolatileTmp: true,
KeyTimezone: true,
KeySeccompProfile: true,
KeyAddDevice: true,
KeyNetwork: true,
}

// Supported keys in "Volume" group
supportedVolumeKeys = map[string]bool{
KeyUser: true,
KeyGroup: true,
KeyLabel: true,
}

// Supported keys in "Volume" group
supportedNetworkKeys = map[string]bool{
KeyNetworkDisableDNS: true,
KeyNetworkDriver: true,
KeyNetworkGateway: true,
KeyNetworkInternal: true,
KeyNetworkIPRange: true,
KeyNetworkIPAMDriver: true,
KeyNetworkIPv6: true,
KeyNetworkOptions: true,
KeyNetworkSubnet: true,
KeyLabel: true,
}

// Supported keys in "Kube" group
supportedKubeKeys = map[string]bool{
KeyYaml: true,
KeyRemapUID: true,
KeyRemapGID: true,
KeyRemapUsers: true,
KeyRemapUIDSize: true,
KeyNetwork: true,
KeyConfigMap: true,
}
)

func replaceExtension(name string, extension string, extraPrefix string, extraSuffix string) string {
baseName := name
Expand All @@ -152,6 +156,9 @@ func replaceExtension(name string, extension string, extraPrefix string, extraSu
}

func isPortRange(port string) bool {
onceRegex.Do(func() {
validPortRange = regexp.MustCompile(`\d+(-\d+)?(/udp|/tcp)?$`)
})
return validPortRange.MatchString(port)
}

Expand Down

0 comments on commit b0be367

Please sign in to comment.