}
/* Copy the class data */
- NT_ASSERT(Length > Offset);
+ NT_ASSERT(Length >= Offset);
RtlCopyMemory(Info->KeyFullInformation.Class,
ClassData,
min(Node->ClassLength, Length - Offset));
_SEH2_TRY
{
- *ResultLength = NeededLength + FIELD_OFFSET(KEY_NAME_INFORMATION, Name[0]);
- if (Length < *ResultLength)
+ *ResultLength = FIELD_OFFSET(KEY_NAME_INFORMATION, Name) + NeededLength;
+ if (Length < RTL_SIZEOF_THROUGH_FIELD(KEY_NAME_INFORMATION, NameLength))
return STATUS_BUFFER_TOO_SMALL;
+ if (Length < *ResultLength)
+ {
+ KeyNameInfo->NameLength = NeededLength;
+ return STATUS_BUFFER_OVERFLOW;
+ }
}
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
{