static int error_count;
-static void my_error(const char *msg)
+static void my_error(const char *msg UNNEEDED)
{
error_count++;
}
{
void *p;
int *pi, *origpi;
+ char *cp;
- plan_tests(26);
+ plan_tests(30);
tal_set_backend(NULL, NULL, NULL, my_error);
/* Now try overflow cases for tal_dup. */
error_count = 0;
- pi = origpi = tal_arr(NULL, int, 100);
- ok1(pi);
+ origpi = tal_arr(NULL, int, 100);
+ ok1(origpi);
ok1(error_count == 0);
- pi = tal_dup(NULL, int, pi, (size_t)-1, 0);
+ pi = tal_dup_arr(NULL, int, origpi, (size_t)-1, 0);
ok1(!pi);
ok1(error_count == 1);
- pi = tal_dup(NULL, int, pi, 0, (size_t)-1);
+ pi = tal_dup_arr(NULL, int, origpi, 0, (size_t)-1);
ok1(!pi);
ok1(error_count == 2);
- pi = tal_dup(NULL, int, pi, (size_t)-1UL / sizeof(int),
+ pi = tal_dup_arr(NULL, int, origpi, (size_t)-1UL / sizeof(int),
(size_t)-1UL / sizeof(int));
ok1(!pi);
ok1(error_count == 3);
/* This will still overflow when tal_hdr is added. */
- pi = tal_dup(NULL, int, pi, (size_t)-1UL / sizeof(int) / 2,
+ pi = tal_dup_arr(NULL, int, origpi, (size_t)-1UL / sizeof(int) / 2,
(size_t)-1UL / sizeof(int) / 2);
ok1(!pi);
ok1(error_count == 4);
+ ok1(tal_first(NULL) == origpi && !tal_next(origpi) && !tal_first(origpi));
+ tal_free(origpi);
- /* Now, check that with TAL_TAKE we free old one on failure. */
- pi = tal_arr(NULL, int, 100);
+ /* Now, check that with taltk() we free old one on failure. */
+ origpi = tal_arr(NULL, int, 100);
error_count = 0;
- pi = tal_dup(TAL_TAKE, int, pi, (size_t)-1, 0);
+ pi = tal_dup_arr(NULL, int, take(origpi), (size_t)-1, 0);
ok1(!pi);
ok1(error_count == 1);
- ok1(tal_first(NULL) == origpi && !tal_next(NULL, origpi));
- pi = tal_arr(NULL, int, 100);
+ origpi = tal_arr(NULL, int, 100);
error_count = 0;
- pi = tal_dup(TAL_TAKE, int, pi, 0, (size_t)-1);
+ pi = tal_dup_arr(NULL, int, take(origpi), 0, (size_t)-1);
ok1(!pi);
ok1(error_count == 1);
- ok1(tal_first(NULL) == origpi && !tal_next(NULL, origpi));
+ ok1(!tal_first(NULL));
- pi = tal_arr(NULL, int, 100);
+ origpi = tal_arr(NULL, int, 100);
error_count = 0;
- pi = tal_dup(TAL_TAKE, int, pi, (size_t)-1UL / sizeof(int),
+ pi = tal_dup_arr(NULL, int, take(origpi), (size_t)-1UL / sizeof(int),
(size_t)-1UL / sizeof(int));
ok1(!pi);
ok1(error_count == 1);
- ok1(tal_first(NULL) == origpi && !tal_next(NULL, origpi));
+ ok1(!tal_first(NULL));
- pi = tal_arr(NULL, int, 100);
+ origpi = tal_arr(NULL, int, 100);
error_count = 0;
/* This will still overflow when tal_hdr is added. */
- pi = tal_dup(TAL_TAKE, int, pi, (size_t)-1UL / sizeof(int) / 2,
+ pi = tal_dup_arr(NULL, int, take(origpi), (size_t)-1UL / sizeof(int) / 2,
(size_t)-1UL / sizeof(int) / 2);
ok1(!pi);
ok1(error_count == 1);
- ok1(tal_first(NULL) == origpi && !tal_next(NULL, origpi));
+ ok1(!tal_first(NULL));
+ /* Overflow on expand addition. */
+ cp = tal_arr(p, char, 100);
+ ok1(!tal_expand(&cp, NULL, (size_t)-99UL));
+ ok1(error_count == 2);
+ tal_free(cp);
+
+ /* Overflow when multiplied by size */
+ origpi = tal_arr(NULL, int, 100);
+ ok1(!tal_expand(&origpi, NULL, (size_t)-1UL / sizeof(int)));
+ ok1(error_count == 3);
+ tal_free(origpi);
+
+ tal_cleanup();
return exit_status();
}