summaryrefslogtreecommitdiffstats
path: root/sys/fs/msdosfs
diff options
context:
space:
mode:
authorsemenu <semenu@FreeBSD.org>2002-10-29 01:03:44 +0000
committersemenu <semenu@FreeBSD.org>2002-10-29 01:03:44 +0000
commit8f7162cbd9ef4339bec21fd7c82645a5919191a3 (patch)
tree8f7d393eb5387ef5855a7b5e8fd9840997ca5c31 /sys/fs/msdosfs
parent2b43d680125d53d8ed3e0fc07192a1b8bd58c9e4 (diff)
downloadFreeBSD-src-8f7162cbd9ef4339bec21fd7c82645a5919191a3.zip
FreeBSD-src-8f7162cbd9ef4339bec21fd7c82645a5919191a3.tar.gz
Fix winChkName() to match when the last slot contains nothing but the
terminating zero (it was treated as length missmatch). The mtools create such slots if the name len is the product of 13 (max number of unicode chars fitting in directory slot). MFC after: 1 week
Diffstat (limited to 'sys/fs/msdosfs')
-rw-r--r--sys/fs/msdosfs/msdosfs_conv.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/sys/fs/msdosfs/msdosfs_conv.c b/sys/fs/msdosfs/msdosfs_conv.c
index 32138c5..7b3591e 100644
--- a/sys/fs/msdosfs/msdosfs_conv.c
+++ b/sys/fs/msdosfs/msdosfs_conv.c
@@ -780,7 +780,14 @@ winChkName(un, unlen, wep, chksum, u2w_loaded, u2w, ul_loaded, ul)
*/
i = ((wep->weCnt&WIN_CNT) - 1) * WIN_CHARS;
un += i;
- if ((unlen -= i) <= 0)
+ unlen -= i;
+
+ /*
+ * unlen being zero must not be treated as length missmatch. It is
+ * possible if the entry is WIN_LAST and contains nothing but the
+ * terminating 0.
+ */
+ if (unlen < 0)
return -1;
if ((wep->weCnt&WIN_LAST) && unlen > WIN_CHARS)
return -1;
OpenPOWER on IntegriCloud