mirror of
				https://github.com/jrcutler/threadless.io.git
				synced 2024-07-07 10:35:49 +00:00 
			
		
		
		
	Check size after allocation_realloc_array test calls.
This commit is contained in:
		| @@ -11,6 +11,8 @@ | |||||||
| /* HAVE_* */ | /* HAVE_* */ | ||||||
| #include "config.h" | #include "config.h" | ||||||
|  |  | ||||||
|  | /* errno, EINVAL */ | ||||||
|  | #include <errno.h> | ||||||
| /* printf, perror */ | /* printf, perror */ | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
| /* EXIT_SUCCESS, EXIT_FAILURE */ | /* EXIT_SUCCESS, EXIT_FAILURE */ | ||||||
| @@ -26,6 +28,18 @@ | |||||||
| #include <threadless/allocation.h> | #include <threadless/allocation.h> | ||||||
|  |  | ||||||
|  |  | ||||||
|  | static int test_allocation(allocation_t *allocation, size_t size) | ||||||
|  | { | ||||||
|  |     int error = allocation_realloc_array(allocation, 1, size); | ||||||
|  |     if (!error && allocation->size != size) { | ||||||
|  |         /* bad size */ | ||||||
|  |         errno = EINVAL; | ||||||
|  |         error = -1; | ||||||
|  |     } | ||||||
|  |     return error; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
| static int run(allocator_t *allocator) | static int run(allocator_t *allocator) | ||||||
| { | { | ||||||
|     int error = 0; |     int error = 0; | ||||||
| @@ -35,16 +49,23 @@ static int run(allocator_t *allocator) | |||||||
|     allocation_init(&allocation, allocator); |     allocation_init(&allocation, allocator); | ||||||
|  |  | ||||||
|     for (size = 1; !error && size < (1 << 22); size = size << 1) { |     for (size = 1; !error && size < (1 << 22); size = size << 1) { | ||||||
|         error = allocation_realloc_array(&allocation, 1, size); |         error = test_allocation(&allocation, size); | ||||||
|  |          | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     if (!error) { |     if (!error) { | ||||||
|         size_t big = 1UL << (sizeof(size_t) * 4); |         size_t big = 1UL << (sizeof(size_t) * 4); | ||||||
|  |         size = allocation.size; | ||||||
|         error = !allocation_realloc_array(&allocation, big, big); |         error = !allocation_realloc_array(&allocation, big, big); | ||||||
|  |         if (!error && allocation.size != size) { | ||||||
|  |             /* bad size */ | ||||||
|  |             errno = EINVAL; | ||||||
|  |             error = -1; | ||||||
|  |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     for (size = 1 << 22; !error && size; size = size >> 1) { |     for (size = 1 << 22; !error && size; size = size >> 1) { | ||||||
|         error = allocation_realloc_array(&allocation, 1, size); |         error = test_allocation(&allocation, size); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     if (!error) { |     if (!error) { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user