SMB2: CreateContext: Bugfix: Read and Write name as ANSI instead of UTF16

This commit is contained in:
Tal Aloni 2024-07-06 17:25:45 +03:00
parent 019015ebb5
commit 3247f0365e

View file

@ -1,4 +1,4 @@
/* Copyright (C) 2017 Tal Aloni <tal.aloni.il@gmail.com>. All rights reserved.
/* Copyright (C) 2017-2024 Tal Aloni <tal.aloni.il@gmail.com>. All rights reserved.
*
* You can redistribute this program and/or modify it under the terms of
* the GNU Lesser Public License as published by the Free Software Foundation,
@ -44,7 +44,7 @@ namespace SMBLibrary.SMB2
DataLength = LittleEndianConverter.ToUInt32(buffer, offset + 12);
if (NameLength > 0)
{
Name = ByteReader.ReadUTF16String(buffer, offset + NameOffset, NameLength / 2);
Name = ByteReader.ReadAnsiString(buffer, offset + NameOffset, NameLength);
}
if (DataLength > 0)
{
@ -56,7 +56,7 @@ namespace SMBLibrary.SMB2
{
LittleEndianWriter.WriteUInt32(buffer, offset + 0, Next);
NameOffset = 0;
NameLength = (ushort)(Name.Length * 2);
NameLength = (ushort)Name.Length;
if (Name.Length > 0)
{
NameOffset = (ushort)FixedLength;
@ -68,11 +68,11 @@ namespace SMBLibrary.SMB2
DataLength = (uint)Data.Length;
if (Data.Length > 0)
{
int paddedNameLength = (int)Math.Ceiling((double)(Name.Length * 2) / 8) * 8;
int paddedNameLength = (int)Math.Ceiling((double)Name.Length / 8) * 8;
DataOffset = (ushort)(FixedLength + paddedNameLength);
}
LittleEndianWriter.WriteUInt16(buffer, offset + 10, DataOffset);
ByteWriter.WriteUTF16String(buffer, NameOffset, Name);
ByteWriter.WriteAnsiString(buffer, NameOffset, Name);
ByteWriter.WriteBytes(buffer, DataOffset, Data);
}