mirror of
https://sourceware.org/git/glibc.git
synced 2025-08-07 06:43:00 +03:00
dynarray: Set errno on overflow-induced allocation failure
This allows the caller to return directly on such an error, with an appropriate errno value.
This commit is contained in:
@@ -18,6 +18,9 @@
|
||||
|
||||
#include "tst-dynarray-shared.h"
|
||||
|
||||
#include <errno.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#define DYNARRAY_STRUCT dynarray_long
|
||||
#define DYNARRAY_ELEMENT long
|
||||
#define DYNARRAY_PREFIX dynarray_long_
|
||||
@@ -463,6 +466,31 @@ test_long_init (void)
|
||||
}
|
||||
}
|
||||
|
||||
/* Test overflow in resize. */
|
||||
static void
|
||||
test_long_overflow (void)
|
||||
{
|
||||
{
|
||||
struct dynarray_long dyn;
|
||||
dynarray_long_init (&dyn);
|
||||
errno = EINVAL;
|
||||
TEST_VERIFY (!dynarray_long_resize
|
||||
(&dyn, (SIZE_MAX / sizeof (long)) + 1));
|
||||
TEST_VERIFY (errno == ENOMEM);
|
||||
TEST_VERIFY (dynarray_long_has_failed (&dyn));
|
||||
}
|
||||
|
||||
{
|
||||
struct dynarray_long_noscratch dyn;
|
||||
dynarray_long_noscratch_init (&dyn);
|
||||
errno = EINVAL;
|
||||
TEST_VERIFY (!dynarray_long_noscratch_resize
|
||||
(&dyn, (SIZE_MAX / sizeof (long)) + 1));
|
||||
TEST_VERIFY (errno == ENOMEM);
|
||||
TEST_VERIFY (dynarray_long_noscratch_has_failed (&dyn));
|
||||
}
|
||||
}
|
||||
|
||||
/* Test NUL-terminated string construction with the add function and
|
||||
the simple finalize function. */
|
||||
static void
|
||||
@@ -538,6 +566,7 @@ do_test (void)
|
||||
test_int ();
|
||||
test_str ();
|
||||
test_long_init ();
|
||||
test_long_overflow ();
|
||||
test_zstr ();
|
||||
return 0;
|
||||
}
|
||||
|
Reference in New Issue
Block a user