Skip to content

Commit 4d60741

Browse files
authored
Merge pull request #32 from sysdiglabs/strict-pod-yaml-parsing
Parse yamls strictly, disallowing unknown fields
2 parents e9d5679 + 3174b87 commit 4d60741

File tree

1 file changed

+12
-8
lines changed

1 file changed

+12
-8
lines changed

generator/generator.go

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package generator
22

33
import (
4+
"bytes"
45
"fmt"
56
"encoding/json"
67

@@ -587,52 +588,55 @@ func (pg *Generator) FromPodObjString(podObjString string) (string, error) {
587588
return "", fmt.Errorf("Could not unmarshal json document: %v", err)
588589
}
589590

591+
decoder := json.NewDecoder(bytes.NewReader(podObjJson))
592+
decoder.DisallowUnknownFields()
593+
590594
switch kind := anyJson["kind"]; kind {
591595
case "DaemonSet":
592596
var ds appsv1.DaemonSet
593-
if err = json.Unmarshal(podObjJson, &ds); err != nil {
597+
if err = decoder.Decode(&ds); err != nil {
594598
return "", fmt.Errorf("Could not unmarshal json document as DaemonSet: %v", err)
595599
}
596600
return pg.fromDaemonSet(&ds)
597601
case "Deployment":
598602
var dep appsv1.Deployment
599-
if err = json.Unmarshal(podObjJson, &dep); err != nil {
603+
if err = decoder.Decode(&dep); err != nil {
600604
return "", fmt.Errorf("Could not unmarshal json document as Deployment: %v", err)
601605
}
602606
return pg.fromDeployment(&dep)
603607
case "ReplicaSet":
604608
var rs appsv1.ReplicaSet
605-
if err = json.Unmarshal(podObjJson, &rs); err != nil {
609+
if err = decoder.Decode(&rs); err != nil {
606610
return "", fmt.Errorf("Could not unmarshal json document as ReplicaSet: %v", err)
607611
}
608612
return pg.fromReplicaSet(&rs)
609613
case "StatefulSet":
610614
var ss appsv1.StatefulSet
611-
if err = json.Unmarshal(podObjJson, &ss); err != nil {
615+
if err = decoder.Decode(&ss); err != nil {
612616
return "", fmt.Errorf("Could not unmarshal json document as StatefulSet: %v", err)
613617
}
614618
return pg.fromStatefulSet(&ss)
615619
case "ReplicationController":
616620
var rc v1.ReplicationController
617-
if err = json.Unmarshal(podObjJson, &rc); err != nil {
621+
if err = decoder.Decode(&rc); err != nil {
618622
return "", fmt.Errorf("Could not unmarshal json document as ReplicationController: %v", err)
619623
}
620624
return pg.fromReplicationController(&rc)
621625
case "CronJob":
622626
var cj batchv1beta1.CronJob
623-
if err = json.Unmarshal(podObjJson, &cj); err != nil {
627+
if err = decoder.Decode(&cj); err != nil {
624628
return "", fmt.Errorf("Could not unmarshal json document as CronJob: %v", err)
625629
}
626630
return pg.fromCronJob(&cj)
627631
case "Job":
628632
var job batch.Job
629-
if err = json.Unmarshal(podObjJson, &job); err != nil {
633+
if err = decoder.Decode(&job); err != nil {
630634
return "", fmt.Errorf("Could not unmarshal json document as Job: %v", err)
631635
}
632636
return pg.fromJob(&job)
633637
case "Pod":
634638
var pod v1.Pod
635-
if err = json.Unmarshal(podObjJson, &pod); err != nil {
639+
if err = decoder.Decode(&pod); err != nil {
636640
return "", fmt.Errorf("Could not unmarshal json document as Pod: %v", err)
637641
}
638642
return pg.fromPod(&pod)

0 commit comments

Comments
 (0)