Commit c51223ba authored by Mitchell Hashimoto's avatar Mitchell Hashimoto

packer: Template parsing error if name/type is not string

parent f9c59c71
......@@ -52,7 +52,7 @@ func ParseTemplate(data []byte) (t *Template, err error) {
for i, v := range rawTpl.Builders {
rawType, ok := v["type"]
if !ok {
errors = append(errors, fmt.Errorf("missing 'type' for builder %d", i + 1))
errors = append(errors, fmt.Errorf("builder %d: missing 'type'", i + 1))
continue
}
......@@ -64,9 +64,18 @@ func ParseTemplate(data []byte) (t *Template, err error) {
rawName = v["type"]
}
// TODO: Error checking if we can't convert
name := rawName.(string)
typeName := rawType.(string)
// Attempt to convert the name/type to strings, but error if we can't
name, ok := rawName.(string)
if !ok {
errors = append(errors, fmt.Errorf("builder %d: name must be a string", i + 1))
continue
}
typeName, ok := rawType.(string)
if !ok {
errors = append(errors, fmt.Errorf("builder %d: type must be a string", i + 1))
continue
}
// Check if we already have a builder with this name and error if so
if _, ok := t.Builders[name]; ok {
......
......@@ -54,6 +54,22 @@ func TestParseTemplate_BuilderWithoutType(t *testing.T) {
assert.NotNil(err, "should have error")
}
func TestParseTemplate_BuilderWithNonStringType(t *testing.T) {
assert := asserts.NewTestingAsserts(t, true)
data := `
{
"name": "my-image",
"builders": [{
"type": 42
}]
}
`
_, err := ParseTemplate([]byte(data))
assert.NotNil(err, "should have error")
}
func TestParseTemplate_BuilderWithoutName(t *testing.T) {
assert := asserts.NewTestingAsserts(t, true)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment