apiextensions: npe panic in structural schema unfold
This commit is contained in:
		| @@ -48,6 +48,7 @@ go_test( | ||||
|     srcs = [ | ||||
|         "convert_test.go", | ||||
|         "goopenapi_test.go", | ||||
|         "unfold_test.go", | ||||
|         "validation_test.go", | ||||
|     ], | ||||
|     embed = [":go_default_library"], | ||||
|   | ||||
| @@ -30,7 +30,7 @@ type Structural struct { | ||||
| 	Generic | ||||
| 	Extensions | ||||
|  | ||||
| 	*ValueValidation | ||||
| 	ValueValidation *ValueValidation | ||||
| } | ||||
|  | ||||
| // +k8s:deepcopy-gen=true | ||||
|   | ||||
| @@ -35,13 +35,16 @@ func (s *Structural) Unfold() *Structural { | ||||
| 				return false | ||||
| 			} | ||||
|  | ||||
| 			if s.AnyOf == nil { | ||||
| 				s.AnyOf = []NestedValueValidation{ | ||||
| 			if s.ValueValidation == nil { | ||||
| 				s.ValueValidation = &ValueValidation{} | ||||
| 			} | ||||
| 			if s.ValueValidation.AnyOf == nil { | ||||
| 				s.ValueValidation.AnyOf = []NestedValueValidation{ | ||||
| 					{ForbiddenGenerics: Generic{Type: "integer"}}, | ||||
| 					{ForbiddenGenerics: Generic{Type: "string"}}, | ||||
| 				} | ||||
| 			} else { | ||||
| 				s.AllOf = append([]NestedValueValidation{ | ||||
| 				s.ValueValidation.AllOf = append([]NestedValueValidation{ | ||||
| 					{ | ||||
| 						ValueValidation: ValueValidation{ | ||||
| 							AnyOf: []NestedValueValidation{ | ||||
| @@ -50,7 +53,7 @@ func (s *Structural) Unfold() *Structural { | ||||
| 							}, | ||||
| 						}, | ||||
| 					}, | ||||
| 				}, s.AllOf...) | ||||
| 				}, s.ValueValidation.AllOf...) | ||||
| 			} | ||||
|  | ||||
| 			return true | ||||
|   | ||||
| @@ -0,0 +1,32 @@ | ||||
| /* | ||||
| Copyright 2019 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 schema | ||||
|  | ||||
| import ( | ||||
| 	"testing" | ||||
| ) | ||||
|  | ||||
| // TestStructuralUnfoldNilValueValidation tests that Unfold() does not crash | ||||
| // on a IntOrString pattern with nil ValueValidation. | ||||
| func TestStructuralUnfoldIntOrString(t *testing.T) { | ||||
| 	schema := Structural{ | ||||
| 		Extensions: Extensions{ | ||||
| 			XIntOrString: true, | ||||
| 		}, | ||||
| 	} | ||||
| 	schema.Unfold() | ||||
| } | ||||
		Reference in New Issue
	
	Block a user
	 Dr. Stefan Schimanski
					Dr. Stefan Schimanski