improve bad CLI argument handling of crypto.py
authorPhilipp Gesang <philipp.gesang@intra2net.com>
Tue, 23 May 2017 12:55:10 +0000 (14:55 +0200)
committerThomas Jarosch <thomas.jarosch@intra2net.com>
Mon, 2 Apr 2018 11:34:09 +0000 (13:34 +0200)
deltatar/crypto.py

index f8573db..bd87763 100755 (executable)
@@ -1560,6 +1560,13 @@ def parse_argv (argv):
     except KeyError:
         bail ("ERROR: invalid subcommand ā€œ%sā€ specified" % rawsubcmd)
 
+    def checked_arg ():
+        nonlocal argvi
+        try:
+            return next (argvi)
+        except StopIteration:
+            bail ("ERROR: argument list incomplete")
+
     def checked_secret (t, arg):
         nonlocal secret
         if secret is None:
@@ -1575,13 +1582,13 @@ def parse_argv (argv):
             global PDTCRYPT_VERBOSE
             PDTCRYPT_VERBOSE = True
         elif arg in [ "-i", "--in", "--source" ]:
-            insspec = next (argvi)
+            insspec = checked_arg ()
             if PDTCRYPT_VERBOSE is True: noise ("PDT: decrypt from %s" % insspec)
         elif arg in [ "-o", "--out", "--dest", "--sink" ]:
-            outsspec = next (argvi)
+            outsspec = checked_arg ()
             if PDTCRYPT_VERBOSE is True: noise ("PDT: decrypt to %s" % outsspec)
         elif arg in [ "-p", "--password" ]:
-            arg = next (argvi)
+            arg = checked_arg ()
             checked_secret (PDTCRYPT_SECRET_PW, arg)
             if PDTCRYPT_VERBOSE is True: noise ("PDT: decrypting with password")
         else:
@@ -1600,7 +1607,7 @@ def parse_argv (argv):
                     mode &= ~PDTCRYPT_DECRYPT
                     if PDTCRYPT_VERBOSE is True: noise ("PDT: not decrypting")
                 elif arg in [ "-k", "--key" ]:
-                    arg = next (argvi)
+                    arg = checked_arg ()
                     checked_secret (PDTCRYPT_SECRET_KEY, arg)
                     if PDTCRYPT_VERBOSE is True: noise ("PDT: decrypting with key")
                 else: