From fcfec068cc344ba0b33e52ac060231dec8d4850e Mon Sep 17 00:00:00 2001
From: David Stainton <dstainton415@gmail.com>
Date: Mon, 19 Oct 2015 16:02:28 +0200
Subject: [PATCH] Teach magic-folder join to use argv_to_abspath

- also we modify argv_to_abspath to through a usage error
if the name starts with a '-'

- add a test
currently the tests fail
---
 src/allmydata/scripts/magic_folder_cli.py   |  2 +-
 src/allmydata/test/test_cli_magic_folder.py | 15 +++++++++++++++
 src/allmydata/util/encodingutil.py          |  2 ++
 3 files changed, 18 insertions(+), 1 deletion(-)

diff --git a/src/allmydata/scripts/magic_folder_cli.py b/src/allmydata/scripts/magic_folder_cli.py
index 5356ce8b..0f45b1ab 100644
--- a/src/allmydata/scripts/magic_folder_cli.py
+++ b/src/allmydata/scripts/magic_folder_cli.py
@@ -22,7 +22,7 @@ class CreateOptions(BasedirOptions):
             raise usage.UsageError("An alias must end with a ':' character.")
         self.alias = alias[:-1]
         self.nickname = nickname
-        self.localdir = localdir
+        self.localdir = argv_to_abspath(str(localdir))
         if self.nickname and not self.localdir:
             raise usage.UsageError("If NICKNAME is specified then LOCALDIR must also be specified.")
         node_url_file = os.path.join(self['node-directory'], "node.url")
diff --git a/src/allmydata/test/test_cli_magic_folder.py b/src/allmydata/test/test_cli_magic_folder.py
index 01fa6c2c..cdd7df9c 100644
--- a/src/allmydata/test/test_cli_magic_folder.py
+++ b/src/allmydata/test/test_cli_magic_folder.py
@@ -215,3 +215,18 @@ class CreateMagicFolder(MagicFolderCLITestMixin, unittest.TestCase):
         d.addCallback(lambda x: self.check_joined_config(0, self.upload_dircap))
         d.addCallback(lambda x: self.check_config(0, self.local_dir))
         return d
+
+    def test_create_invite_join_failure(self):
+        self.basedir = "cli/MagicFolder/create-invite-join-failure"
+        self.set_up_grid()
+        self.local_dir = os.path.join(self.basedir, "magic")
+        self.local_dir = "-" + self.local_dir
+        d = self.do_cli("magic-folder", "create", u"magic:", u"Alice", self.local_dir)
+        def _done((rc,stdout,stderr)):
+            print "rc %s" % (rc,)
+            print "stdout %s" % (stdout,)
+            print "stderr %s" % (stderr,)
+            self.failUnless(rc == 1)
+            return (rc,stdout,stderr)
+        d.addCallback(_done)
+        return d
diff --git a/src/allmydata/util/encodingutil.py b/src/allmydata/util/encodingutil.py
index efd1e218..4eff033a 100644
--- a/src/allmydata/util/encodingutil.py
+++ b/src/allmydata/util/encodingutil.py
@@ -95,6 +95,8 @@ def argv_to_unicode(s):
     except UnicodeDecodeError:
         raise usage.UsageError("Argument %s cannot be decoded as %s." %
                                (quote_output(s), io_encoding))
+    if local_dir.startswith('-'):
+        raise usage.UsageError("Argument %s cannot start with a -." % (quote_output(s),))
 
 def argv_to_abspath(s, **kwargs):
     """
-- 
2.45.2