From da153b468e362f89a0bfd296a1f733f345aecad3 Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Thu, 15 Jul 2010 18:10:47 +0930 Subject: [PATCH 1/1] alloc: fix bug in tiny allocator We can have a 0 byte in the *middle* of an encoding. --- ccan/alloc/tiny.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/ccan/alloc/tiny.c b/ccan/alloc/tiny.c index b965eb47..feffa618 100755 --- a/ccan/alloc/tiny.c +++ b/ccan/alloc/tiny.c @@ -152,13 +152,13 @@ static bool long_enough(unsigned long offset, unsigned long len, static unsigned long find_free_end(unsigned char *arr, unsigned long arrsize) { - unsigned long end; + long i; - for (end = 0; end < arrsize; end++) { - if (!arr[end]) - break; + for (i = arrsize-1; i >= 0; i--) { + if (arr[i]) + return i + 1; } - return end; + return 0; } void *tiny_alloc_get(void *pool, unsigned long poolsize, -- 2.39.2