X-Git-Url: https://git.phdru.name/?a=blobdiff_plain;f=mimedecode.py;h=50f8a18675a5265700f2f4928208e169dc116f8d;hb=072db3ce04e61686152044eb4644072c1b69219e;hp=392e70774e5f1cb2537c5b94fa87906a71470f22;hpb=b92e86cc18ad38cd2c8db1a3217ca2fed1c50c2f;p=mimedecode.git diff --git a/mimedecode.py b/mimedecode.py index 392e707..50f8a18 100755 --- a/mimedecode.py +++ b/mimedecode.py @@ -270,6 +270,14 @@ def _save_message(msg, outstring, save_headers=False, save_body=False): ): fname = msg.get_param(param, header=header) if fname: + if isinstance(fname, tuple): + fname = fname[2] # Do not recode if it isn't recoded yet + try: + for forbidden in chr(0), '/', '\\': + if forbidden in fname: + raise ValueError + except ValueError: + continue fname = '-' + fname break else: @@ -396,7 +404,16 @@ def decode_message(msg): def open_output_file(filename): - return open(os.path.join(g.destination_dir, filename), 'w') + fullpath = os.path.abspath(os.path.join(g.destination_dir, filename)) + full_dir = os.path.dirname(fullpath) + create = not os.path.isdir(full_dir) + if create: + os.makedirs(full_dir) + try: + return open(fullpath, 'w') + except: + if create: + os.removedirs(full_dir) class GlobalOptions: