diff options
author | Alan Coopersmith <alan.coopersmith@oracle.com> | 2023-03-03 14:55:19 -0800 |
---|---|---|
committer | Alan Coopersmith <alan.coopersmith@oracle.com> | 2023-03-07 00:06:24 +0000 |
commit | 4ece1c842a08c11c1f84b95355801d41cd8435b1 (patch) | |
tree | d6f8fb17a745b9635a837c78046ac325b0505413 /include | |
parent | 392eb1cd5f2bdb186f0ff7f51abc4dd05ec13709 (diff) |
Add XtReallocArray() for overflow checking of multiplied args
Uses reallocarray() if available, otherwise checks for overflow itself,
if overflow is possible (i.e. in ILP32 & ILP64 environments, but not LP64
with 32-bit ints).
Includes unit tests and XtMallocArray() helper macro.
Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
Diffstat (limited to 'include')
-rw-r--r-- | include/X11/Intrinsic.h | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/include/X11/Intrinsic.h b/include/X11/Intrinsic.h index 668b7d5..71199e7 100644 --- a/include/X11/Intrinsic.h +++ b/include/X11/Intrinsic.h @@ -1864,6 +1864,12 @@ extern char *XtRealloc( Cardinal /* num */ ); +extern void *XtReallocArray( + void * /* ptr */, + Cardinal /* num */, + Cardinal /* size */ +); + extern void XtFree( char* /* ptr */ ); @@ -1892,6 +1898,14 @@ extern char *_XtRealloc( /* implementation-private */ int /* line */ ); +extern char *_XtReallocArray( /* implementation-private */ + char * /* ptr */, + Cardinal /* num */, + Cardinal /* size */, + const char */* file */, + int /* line */ +); + extern char *_XtCalloc( /* implementation-private */ Cardinal /* num */, Cardinal /* size */, @@ -1911,9 +1925,15 @@ extern void _XtPrintMemory( /* implementation-private */ #define XtMalloc(size) _XtMalloc(size, __FILE__, __LINE__) #define XtRealloc(ptr,size) _XtRealloc(ptr, size, __FILE__, __LINE__) +#define XtMallocArray(num,size) _XtReallocArray(NULL, num, size, __FILE__, __LINE__) +#define XtReallocArray(ptr,num,size) _XtReallocArray(ptr, num, size, __FILE__, __LINE__) #define XtCalloc(num,size) _XtCalloc(num, size, __FILE__, __LINE__) #define XtFree(ptr) _XtFree(ptr) +#else + +#define XtMallocArray(num,size) XtReallocArray(NULL, num, size) + #endif /* ifdef XTTRACEMEMORY */ #define XtNew(type) ((type *) XtMalloc((unsigned) sizeof(type))) |