From 9d1462a2b7a14474cd9439514ef7cbe261a4b8f2 Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Mon, 9 Aug 2010 20:38:12 +0000 Subject: [PATCH] Pierre Schweitzer - A better fix for CdfsIsNameLegalDOS8Dot3. See issue #2404 for more details. svn path=/trunk/; revision=48494 --- reactos/drivers/filesystems/cdfs/misc.c | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/reactos/drivers/filesystems/cdfs/misc.c b/reactos/drivers/filesystems/cdfs/misc.c index 0288c62c28c..d1f618a7334 100644 --- a/reactos/drivers/filesystems/cdfs/misc.c +++ b/reactos/drivers/filesystems/cdfs/misc.c @@ -96,31 +96,37 @@ CdfsFileFlagsToAttributes(PFCB Fcb, } BOOLEAN -CdfsIsNameLegalDOS8Dot3(IN PUNICODE_STRING FileName +CdfsIsNameLegalDOS8Dot3(IN UNICODE_STRING FileName ) { ULONG i; STRING DbcsName; CHAR DbcsNameBuffer[12]; - for (i = 0; i < FileName->Length / sizeof(WCHAR) ; i++) + /* 8dot3 filename is max 12 length */ + if (FileName.Length / sizeof(WCHAR) > 12) + { + return FALSE; + } + + for (i = 0; i < FileName.Length / sizeof(WCHAR) ; i++) { /* Don't allow spaces in FileName */ - if (FileName->Buffer[i] == L' ') + if (FileName.Buffer[i] == L' ') return FALSE; } -#if 0 + /* If FileName is finishing with a dot, remove it */ - if (FileName->Buffer[FileName->Length / sizeof(WCHAR) - 1] == '.') + if (FileName.Buffer[FileName.Length / sizeof(WCHAR) - 1] == '.') { - FileName->Length -= sizeof(WCHAR); + FileName.Length -= sizeof(WCHAR); } -#endif + /* Finally, convert the string to call the FsRtl function */ DbcsName.MaximumLength = 12; DbcsName.Buffer = DbcsNameBuffer; if (!NT_SUCCESS(RtlUnicodeStringToCountedOemString(&DbcsName, - FileName, + &FileName, FALSE ))) { @@ -165,7 +171,7 @@ CdfsShortNameCacheGet } /* Cache miss */ - if (!CdfsIsNameLegalDOS8Dot3(LongName)) + if (!CdfsIsNameLegalDOS8Dot3(*LongName)) { RtlGenerate8dot3Name(LongName, FALSE, &Context, ShortName); }