1
0
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:
Florian Weimer
2017-08-30 20:10:56 +02:00
parent a9da0bb266
commit 5898f4548e
4 changed files with 49 additions and 3 deletions

View File

@@ -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;
}