[NTOSKRNL] Properly copy backtracking buffer content on realloc

CORE-15902
This commit is contained in:
Bartosz Brachaczek 2019-03-31 11:42:56 +02:00 committed by Pierre Schweitzer
parent 21d2c70bb4
commit 8bc9935fcb
No known key found for this signature in database
GPG key ID: 7545556C3D585B0B
2 changed files with 22 additions and 22 deletions

View file

@ -305,21 +305,21 @@ FsRtlIsDbcsInExpression(IN PANSI_STRING Expression,
goto Exit; goto Exit;
} }
/* Backtracking is at the start of the buffer */ /* Copy BackTracking content. Note that it can point to either BackTrackingBuffer or OldBackTrackingBuffer */
BackTracking = AllocatedBuffer; RtlCopyMemory(AllocatedBuffer,
BackTracking,
/* Copy BackTrackingBuffer content */
RtlCopyMemory(BackTracking,
BackTrackingBuffer,
RTL_NUMBER_OF(BackTrackingBuffer) * sizeof(USHORT)); RTL_NUMBER_OF(BackTrackingBuffer) * sizeof(USHORT));
/* OldBackTracking is after BackTracking */ /* Place current Backtracking is at the start of the new buffer */
OldBackTracking = &BackTracking[BackTrackingBufferSize]; BackTracking = AllocatedBuffer;
/* Copy OldBackTrackingBuffer content */ /* Copy OldBackTracking content */
RtlCopyMemory(OldBackTracking, RtlCopyMemory(&BackTracking[BackTrackingBufferSize],
OldBackTrackingBuffer, OldBackTracking,
RTL_NUMBER_OF(OldBackTrackingBuffer) * sizeof(USHORT)); RTL_NUMBER_OF(OldBackTrackingBuffer) * sizeof(USHORT));
/* Place current OldBackTracking after current BackTracking in the buffer */
OldBackTracking = &BackTracking[BackTrackingBufferSize];
} }
/* If lead byte present */ /* If lead byte present */

View file

@ -157,21 +157,21 @@ FsRtlIsNameInExpressionPrivate(IN PUNICODE_STRING Expression,
goto Exit; goto Exit;
} }
/* Backtracking is at the start of the buffer */ /* Copy BackTracking content. Note that it can point to either BackTrackingBuffer or OldBackTrackingBuffer */
BackTracking = AllocatedBuffer; RtlCopyMemory(AllocatedBuffer,
BackTracking,
/* Copy BackTrackingBuffer content */
RtlCopyMemory(BackTracking,
BackTrackingBuffer,
RTL_NUMBER_OF(BackTrackingBuffer) * sizeof(USHORT)); RTL_NUMBER_OF(BackTrackingBuffer) * sizeof(USHORT));
/* OldBackTracking is after BackTracking */ /* Place current Backtracking is at the start of the new buffer */
OldBackTracking = &BackTracking[BackTrackingBufferSize]; BackTracking = AllocatedBuffer;
/* Copy OldBackTrackingBuffer content */ /* Copy OldBackTracking content */
RtlCopyMemory(OldBackTracking, RtlCopyMemory(&BackTracking[BackTrackingBufferSize],
OldBackTrackingBuffer, OldBackTracking,
RTL_NUMBER_OF(OldBackTrackingBuffer) * sizeof(USHORT)); RTL_NUMBER_OF(OldBackTrackingBuffer) * sizeof(USHORT));
/* Place current OldBackTracking after current BackTracking in the buffer */
OldBackTracking = &BackTracking[BackTrackingBufferSize];
} }
/* Basic check to test if chars are equal */ /* Basic check to test if chars are equal */