diff --git a/reactos/lib/inflib/infcore.c b/reactos/lib/inflib/infcore.c index 18ad68dba98..e58383685c0 100644 --- a/reactos/lib/inflib/infcore.c +++ b/reactos/lib/inflib/infcore.c @@ -181,7 +181,8 @@ InfpAddSection(PINFCACHE Cache, } /* Allocate and initialize the new section */ - Size = sizeof(INFCACHESECTION) + (_tcslen (Name) * sizeof(TCHAR)); + Size = FIELD_OFFSET(INFCACHESECTION, + Name[_tcslen (Name) + 1]); Section = (PINFCACHESECTION)MALLOC (Size); if (Section == NULL) { @@ -285,7 +286,8 @@ InfpAddFieldToLine(PINFCACHELINE Line, PINFCACHEFIELD Field; ULONG Size; - Size = sizeof(INFCACHEFIELD) + (_tcslen(Data) * sizeof(TCHAR)); + Size = FIELD_OFFSET(INFCACHEFIELD, + Data[_tcslen(Data) + 1]); Field = (PINFCACHEFIELD)MALLOC(Size); if (Field == NULL) { diff --git a/reactos/lib/inflib/infpriv.h b/reactos/lib/inflib/infpriv.h index df13c04b02c..2619b1ca77a 100644 --- a/reactos/lib/inflib/infpriv.h +++ b/reactos/lib/inflib/infpriv.h @@ -9,6 +9,9 @@ #ifndef INFPRIV_H_INCLUDED #define INFPRIV_H_INCLUDED +#ifndef FIELD_OFFSET +#define FIELD_OFFSET(t,f) ((ptrdiff_t)&(((t*)0)->f)) +#endif #define INF_STATUS_INSUFFICIENT_RESOURCES (0xC000009A) #define INF_STATUS_BAD_SECTION_NAME_LINE (0xC0700001)