diff -r f97feb9a67f2 -r 33bfffdb9e63 libpurple/memorypool.c --- a/libpurple/memorypool.c Wed Mar 26 01:48:39 2014 +0100 +++ b/libpurple/memorypool.c Wed Mar 26 13:12:16 2014 +0100 @@ -30,7 +30,7 @@ #define PURPLE_MEMORY_POINTER_SHIFT(pointer, value) \ (gpointer)((guintptr)(pointer) + (value)) #define PURPLE_MEMORY_PADDED(pointer, padding) \ - (gpointer)(((guintptr)(pointer) - 1) % (padding) + 1) + (gpointer)((((guintptr)(pointer) - 1) / (padding) + 1) * padding) #define PURPLE_MEMORY_POOL_DEFAULT_BLOCK_SIZE 1024 @@ -77,8 +77,7 @@ block->available_ptr = PURPLE_MEMORY_POINTER_SHIFT(block_raw, sizeof(PurpleMemoryPoolBlock)); block->end_ptr = PURPLE_MEMORY_POINTER_SHIFT(block_raw, total_size); - - memset(block, 0, sizeof(PurpleMemoryPoolBlock)); + block->next = NULL; return block; } @@ -92,6 +91,7 @@ g_return_val_if_fail(priv != NULL, NULL); + g_return_val_if_fail(alignment <= PURPLE_MEMORY_POOL_BLOCK_PADDING, NULL); g_warn_if_fail(alignment >= 1); if (alignment < 1) alignment = 1;