From: Ralph Corderoy Date: Sun, 14 May 2017 11:53:33 +0000 (+0100) Subject: uip/mhstoresbr.c: Fix single-character nmh-storage bug. X-Git-Url: https://diplodocus.org/git/nmh/commitdiff_plain/5c4ca1ed9df0ec985e53e8c759208d5c65660422?ds=inline uip/mhstoresbr.c: Fix single-character nmh-storage bug. If the profile component nmh-storage was a single character, e.g. the relative directory `d', then it would be dropped from the output path so instead of `d/foo' being written, `/foo' would probably fail. I think this was due to a faulty check for nmh-storage being `/'. Add a test for a non-/ single-character nmh-storage. --- diff --git a/test/mhstore/test-mhstore b/test/mhstore/test-mhstore index 8cb0dff9..7235d6f4 100755 --- a/test/mhstore/test-mhstore +++ b/test/mhstore/test-mhstore @@ -350,9 +350,9 @@ set -e cd .. -# check with relative nmh-storage profile component -start_test 'with relative nmh-storage profile component' -storagedir=storagedir +# check with short relative nmh-storage profile component +start_test 'with short relative nmh-storage profile component' +storagedir=s dir="$MH_TEST_DIR/Mail/inbox/$storagedir" mkdir "$dir" printf '%s\n' "nmh-storage: $storagedir" >>"$MH" @@ -363,6 +363,19 @@ EOF run_test 'mhstore 11 -part 4' \ "storing message 11 part 4 as file $storagedir/11.4.txt" check "$expected" "$dir/11.4.txt" 'keep first' +rmdir "$dir" +sed '$d' "$MH" >"$MH.new" +mv "$MH.new" "$MH" + +# check with relative nmh-storage profile component +start_test 'with relative nmh-storage profile component' +storagedir=storagedir +dir="$MH_TEST_DIR/Mail/inbox/$storagedir" +mkdir "$dir" +printf '%s\n' "nmh-storage: $storagedir" >>"$MH" +run_test 'mhstore 11 -part 4' \ +"storing message 11 part 4 as file $storagedir/11.4.txt" +check "$expected" "$dir/11.4.txt" 'keep first' # check with relative nmh-storage profile component and -auto start_test 'with relative nmh-storage profile component and -auto' diff --git a/uip/mhstoresbr.c b/uip/mhstoresbr.c index a651d01a..b836c07c 100644 --- a/uip/mhstoresbr.c +++ b/uip/mhstoresbr.c @@ -947,7 +947,9 @@ parse_format_string (CT ct, char *cp, char *buffer, int buflen, char *dir) * appropriate directory. */ if (*cp != '/' && *cp != '|' && *cp != '!') { - snprintf (bp, buflen, "%s/", dir[1] ? dir : ""); + if (!strcmp(dir, "/")) + dir = ""; /* Don't start with "//". */ + snprintf (bp, buflen, "%s/", dir); len = strlen (bp); bp += len; buflen -= len;