From 5ca6243eeb0df43ba0387029c2d8eceffa3172e2 Mon Sep 17 00:00:00 2001
From: Jakob Unterwurzacher
Date: Tue, 18 Sep 2018 19:35:31 +0200
Subject: main: sanitize commas from fsname

The cipherdir path is used as the fsname, as displayed
in "df -T". Now, having a comma in fsname triggers a sanity check
in go-fuse, aborting the mount with:

  /bin/fusermount: mount failed: Invalid argument
  fuse.NewServer failed: fusermount exited with code 256

Sanitize fsname by replacing any commas with underscores.

https://github.com/rfjakob/gocryptfs/issues/262
---
 mount.go              |  5 +++++
 tests/cli/cli_test.go | 17 +++++++++++++++++
 2 files changed, 22 insertions(+)

diff --git a/mount.go b/mount.go
index d050c60..f473e1e 100644
--- a/mount.go
+++ b/mount.go
@@ -309,6 +309,11 @@ func initGoFuse(fs pathfs.FileSystem, args *argContainer) *fuse.Server {
 	if args.fsname != "" {
 		fsname = args.fsname
 	}
+	fsname2 := strings.Replace(fsname, ",", "_", -1)
+	if fsname2 != fsname {
+		tlog.Warn.Printf("Warning: %q will be displayed as %q in \"df -T\"", fsname, fsname2)
+		fsname = fsname2
+	}
 	mOpts.Options = append(mOpts.Options, "fsname="+fsname)
 	// Second column, "Type", will be shown as "fuse." + Name
 	mOpts.Name = "gocryptfs"
diff --git a/tests/cli/cli_test.go b/tests/cli/cli_test.go
index bd22a43..51b52c6 100644
--- a/tests/cli/cli_test.go
+++ b/tests/cli/cli_test.go
@@ -518,3 +518,20 @@ func TestConfigPipe(t *testing.T) {
 	}
 	test_helpers.UnmountPanic(mnt)
 }
+
+// Ciphertext dir and mountpoint contains a comma
+// https://github.com/rfjakob/gocryptfs/issues/262
+func TestComma(t *testing.T) {
+	dir0 := test_helpers.InitFS(t)
+	dir := dir0 + ",foo,bar"
+	err := os.Rename(dir0, dir)
+	if err != nil {
+		t.Fatal(err)
+	}
+	mnt := dir + ".mnt"
+	err = test_helpers.Mount(dir, mnt, false, "-extpass", "echo test", "-wpanic=0")
+	if err != nil {
+		t.Fatalf("Failed to mount %q on %q: %v", dir, mnt, err)
+	}
+	test_helpers.UnmountPanic(mnt)
+}
-- 
cgit v1.2.3