Change:
<!-- Please use this template while reporting a bug and provide as much info as possible. Not doing so may result in your bug not being addressed in a timely manner. Thanks! If the matter is security related, please disclose it privately via --My controller had a bug where it was setting , and the client I was using () returned an internal server error when I tried to create it. In the API server logs, there was a panic at this line: apimachinery validation logic should handle this case gracefully, and the API server should return a helpful error to the client. Create a resource with the GenerateName field set to "-". This happened on Kind running locally & AKS, both v1.20.2 Kubernetes version (use ): v1.20.2 Cloud provider or hardware configuration: Kind/laptop, AKS OS (e.g: ): Darwin/LinuxKit (i.e. docker for macOS), AKS Install tools: Kind
The label(s) cannot be applied, because the repository doesn't have them. <detailsIn response to : /sig apimachinery Instructions for interacting with me using PR comments are available . If you have questions or suggestions related to my behavior, please file an issue against the repository. </details
/sig api-machinery
/assign
/assign /triage accepted

Discussion:
var ValidateServiceAccountName = NameIsDNSSubdomain // maskTrailingDash replaces the final character of a string with a subdomain safe <del> // value if is a dash. </del> <ins> // value if it is a dash and if the length of this string is greater than 1. Note that // this is used when a value could be appended to the string, see ValidateNameFunc // for more info. </ins> func maskTrailingDash(name string) string { <del> if strings.HasSuffix(name, "-") { </del> <ins> if len(name) > 1 && strings.HasSuffix(name, "-") { </ins> return name[:len(name)-2] + "a" } return name

<ins> /* 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. */ package validation import "testing" func TestMaskTrailingDash(t *testing.T) { testCases := []struct { beforeMasking        string expectedAfterMasking string description          string }{ { beforeMasking:        "", expectedAfterMasking: "", description:          "empty string", }, { beforeMasking:        "-", expectedAfterMasking: "-", description:          "only a single dash", }, { beforeMasking:        "-foo", expectedAfterMasking: "-foo", description:          "has leading dash", }, { beforeMasking:        "-foo-", expectedAfterMasking: "-foa", description:          "has both leading and trailing dashes", }, { beforeMasking:        "b-", expectedAfterMasking: "a", description:          "has trailing dash", }, { beforeMasking:        "ab", expectedAfterMasking: "ab", description:          "has neither leading nor trailing dashes", }, } for _, tc := range testCases { afterMasking := maskTrailingDash(tc.beforeMasking) if afterMasking != tc.expectedAfterMasking { t.Errorf("error in test case: %s. expected: %s, actual: %s", tc.description, tc.expectedAfterMasking, afterMasking) } } } </ins>