aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEvgeny Grin (Karlson2k) <k2k@narod.ru>2019-06-16 17:49:35 +0300
committerEvgeny Grin (Karlson2k) <k2k@narod.ru>2019-06-16 17:52:03 +0300
commitc98aa3d33472f82014e9cd80d1a3bf0ee9fe80c1 (patch)
tree09577526f60e36a7531147e9547ef67644376dc9
parentd12ed49fd33d991639512ee7637bfc644da3f123 (diff)
downloadlibmicrohttpd-c98aa3d33472f82014e9cd80d1a3bf0ee9fe80c1.tar.gz
libmicrohttpd-c98aa3d33472f82014e9cd80d1a3bf0ee9fe80c1.zip
memorypool: fixed MHD_pool_reset()
-rw-r--r--src/microhttpd/memorypool.c9
1 files changed, 4 insertions, 5 deletions
diff --git a/src/microhttpd/memorypool.c b/src/microhttpd/memorypool.c
index 3770b8c3..a6053fb2 100644
--- a/src/microhttpd/memorypool.c
+++ b/src/microhttpd/memorypool.c
@@ -331,6 +331,7 @@ MHD_pool_reset (struct MemoryPool *pool,
331{ 331{
332 mhd_assert (pool->end >= pool->pos); 332 mhd_assert (pool->end >= pool->pos);
333 mhd_assert (pool->size >= pool->end - pool->pos); 333 mhd_assert (pool->size >= pool->end - pool->pos);
334 mhd_assert (copy_bytes < new_size);
334 mhd_assert (keep != NULL || copy_bytes == 0); 335 mhd_assert (keep != NULL || copy_bytes == 0);
335 mhd_assert (keep == NULL || pool->memory <= (uint8_t*)keep); 336 mhd_assert (keep == NULL || pool->memory <= (uint8_t*)keep);
336 mhd_assert (keep == NULL || pool->memory + pool->size >= (uint8_t*)keep + copy_bytes); 337 mhd_assert (keep == NULL || pool->memory + pool->size >= (uint8_t*)keep + copy_bytes);
@@ -341,17 +342,15 @@ MHD_pool_reset (struct MemoryPool *pool,
341 memmove (pool->memory, 342 memmove (pool->memory,
342 keep, 343 keep,
343 copy_bytes); 344 copy_bytes);
344 keep = pool->memory;
345 } 345 }
346 pool->end = pool->size;
347 /* technically not needed, but safer to zero out */ 346 /* technically not needed, but safer to zero out */
348 if (pool->size > copy_bytes) 347 if (pool->size > copy_bytes)
349 memset (&pool->memory[copy_bytes], 348 memset (&pool->memory[copy_bytes],
350 0, 349 0,
351 pool->size - copy_bytes); 350 pool->size - copy_bytes);
352 if (NULL != keep) 351 pool->pos = ROUND_TO_ALIGN (new_size);
353 pool->pos = ROUND_TO_ALIGN (new_size); 352 pool->end = pool->size;
354 return keep; 353 return pool->memory;
355} 354}
356 355
357 356