From 0554775340a18e833be1dfb5e140111a2efbd68d Mon Sep 17 00:00:00 2001 From: Bartosz Brachaczek Date: Mon, 1 Apr 2019 01:58:21 +0200 Subject: [PATCH] [NTOSKRNL] Unify buffer size calculation in FsRtlIs{Name,Dbcs}InExpression It better captures the intent now in FsRtlIsNameInExpressionPrivate and fixes a slight overallotion by 4 bytes in FsRtlIsDbcsInExpression. While at it, use the ANSI_DOS_DOT macro in the Dbcs version. CORE-15902 --- ntoskrnl/fsrtl/dbcsname.c | 4 ++-- ntoskrnl/fsrtl/name.c | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/ntoskrnl/fsrtl/dbcsname.c b/ntoskrnl/fsrtl/dbcsname.c index 2c7300f388d..3b1afd801ec 100644 --- a/ntoskrnl/fsrtl/dbcsname.c +++ b/ntoskrnl/fsrtl/dbcsname.c @@ -291,7 +291,7 @@ FsRtlIsDbcsInExpression(IN PANSI_STRING Expression, ASSERT((OldBackTracking == BackTrackingBuffer) || (OldBackTracking == OldBackTrackingBuffer)); /* Calculate buffer size */ - BackTrackingBufferSize = (Expression->Length + 1) * 2; + BackTrackingBufferSize = Expression->Length * 2 + 1; /* Allocate memory for both back-tracking buffers */ AllocatedBuffer = ExAllocatePoolWithTag(PagedPool | POOL_RAISE_IF_ALLOCATION_FAILURE, @@ -386,7 +386,7 @@ FsRtlIsDbcsInExpression(IN PANSI_STRING Expression, continue; } /* Check DOS_DOT */ - else if (ExpressionChar == DOS_DOT) + else if (ExpressionChar == ANSI_DOS_DOT) { if (EndOfName) continue; diff --git a/ntoskrnl/fsrtl/name.c b/ntoskrnl/fsrtl/name.c index ef760c3bf58..3d2b33ea831 100644 --- a/ntoskrnl/fsrtl/name.c +++ b/ntoskrnl/fsrtl/name.c @@ -143,7 +143,7 @@ FsRtlIsNameInExpressionPrivate(IN PUNICODE_STRING Expression, ASSERT((OldBackTracking == BackTrackingBuffer) || (OldBackTracking == OldBackTrackingBuffer)); /* Calculate buffer size */ - BackTrackingBufferSize = Expression->Length + 1; + BackTrackingBufferSize = Expression->Length / sizeof(WCHAR) * 2 + 1; /* Allocate memory for both back-tracking buffers */ AllocatedBuffer = ExAllocatePoolWithTag(PagedPool | POOL_RAISE_IF_ALLOCATION_FAILURE, -- 2.20.1.windows.1