#!/usr/bin/env bash # Copyright 2021 The Kubernetes Authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # This script checks if the "net" stdlib IP and CIDR parsers are used # instead of the ones forked in k8s.io/utils/net to parse IP addresses # because of the compatibility break introduced in golang 1.17 # Reference: #100895 # Usage: `hack/verify-netparse-cve.sh`. set -o errexit set -o nounset set -o pipefail KUBE_ROOT=$(dirname "${BASH_SOURCE[0]}")/.. source "${KUBE_ROOT}/hack/lib/init.sh" cd "${KUBE_ROOT}" rc=0 find_files() { find . -not \( \ \( \ -wholename './.git' \ -o -wholename './_output' \ -o -wholename './release' \ -o -wholename './target' \ -o -wholename '*/third_party/*' \ -o -wholename '*/vendor/*' \ \) -prune \ \) -name '*.go' } # find files using net.ParseIP() netparseip_matches=$(find_files | xargs grep -nE "net.ParseIP\(.*\)" 2>/dev/null) || true if [[ -n "${netparseip_matches}" ]]; then echo "net.ParseIP reject leading zeros in the dot-decimal notation of IPv4 addresses since golang 1.17:" >&2 echo "${netparseip_matches}" >&2 echo >&2 echo "Use k8s.io/utils/net ParseIPSloppy() to parse IP addresses. Kubernetes #100895" >&2 echo >&2 echo "Run ./hack/update-netparse-cve.sh" >&2 echo >&2 rc=1 fi # find files using net.ParseCIDR() netparsecidrs_matches=$(find_files | xargs grep -nE "net.ParseCIDR\(.*\)" 2>/dev/null) || true if [[ -n "${netparsecidrs_matches}" ]]; then echo "net.ParseCIDR reject leading zeros in the dot-decimal notation of IPv4 addresses since golang 1.17:" >&2 echo "${netparsecidrs_matches}" >&2 echo >&2 echo "Use k8s.io/utils/net ParseCIDRSloppy() to parse network CIDRs. Kubernetes #100895" >&2 echo >&2 echo "Run ./hack/update-netparse-cve.sh" >&2 echo >&2 rc=1 fi exit $rc