@@ -577,23 +577,31 @@ def add_payload(self, src, dest=None, processes=1):
577577 self .update_payload (processes = processes )
578578
579579
580- def remove_payload (self , path , processes = 1 ):
580+ def remove_payload (self , path , processes = 1 , recursive = False ):
581581 """
582582 Remove a payload file and rebuild manifests.
583583 """
584- payload_path = os .path .join ( self . path , path )
584+ payload_path = os .path .normpath ( path )
585585
586- if not path .startswith ("data" + os .sep ):
586+ if self ._path_is_dangerous (payload_path ):
587+ raise ValueError ("Payload path is unsafe: %s" % path )
588+
589+ if not payload_path .startswith ("data" + os .sep ):
587590 raise ValueError ("Payload path must start with data/: %s" % path )
588591
589- if not os .path .isfile (payload_path ):
590- raise ValueError ("Payload path must be a file: %s" % path )
592+ full_path = os .path .join (self .path , payload_path )
591593
592- os .remove (payload_path )
594+ if os .path .isfile (full_path ):
595+ os .remove (full_path )
596+ elif os .path .isdir (full_path ):
597+ if not recursive :
598+ raise ValueError ("Payload path is a directory: %s" % path )
599+ shutil .rmtree (full_path )
600+ else :
601+ raise ValueError ("Payload path does not exist: %s" % path )
593602
594603 self .update_payload (processes = processes )
595604
596-
597605 def tagfile_entries (self ):
598606 return dict (
599607 (key , value )
0 commit comments