File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -87,7 +87,22 @@ func (m *manifest) validate(w walker) error {
8787 return nil
8888}
8989
90- func (m * manifest ) unpack (w walker , dest string ) error {
90+ func (m * manifest ) unpack (w walker , dest string ) (retErr error ) {
91+ // error out if the dest directory is not empty
92+ if s , err := ioutil .ReadDir (dest ); err != nil && err != os .IsNotExist (err ) || len (s ) > 0 {
93+ if err != nil {
94+ return fmt .Errorf ("failed to open %s: %v" , dest , err )
95+ }
96+ return fmt .Errorf ("%s is not empty" , dest )
97+ }
98+ defer func () {
99+ // if we encounter error during unpacking
100+ // clean up partially-unpacked destination
101+ if retErr != nil {
102+ os .RemoveAll (dest )
103+ }
104+ }()
105+
91106 for _ , d := range m .Layers {
92107 if d .MediaType != string (schema .MediaTypeImageConfig ) {
93108 continue
You can’t perform that action at this time.
0 commit comments