From 25d76bb5799d17d09a8f5d0b9018e0e1bfa9cf09 Mon Sep 17 00:00:00 2001 From: paladin-t Date: Tue, 26 Jan 2016 11:39:56 +0800 Subject: [PATCH] +added friendly error promption when memory overflow. --- HISTORY | 1 + core/my_basic.c | 5 +++-- shell/main.c | 12 ++++++++++-- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/HISTORY b/HISTORY index 5a2a501..0249769 100755 --- a/HISTORY +++ b/HISTORY @@ -1,4 +1,5 @@ Jan. 26 2016 +Added friendly error promption when memory overflow Added source file information to stepped handler Optimized cached list accessing diff --git a/core/my_basic.c b/core/my_basic.c index a2b054e..50233b2 100755 --- a/core/my_basic.c +++ b/core/my_basic.c @@ -1078,7 +1078,7 @@ static int _ht_remove_exist(void* data, void* extra, _ht_node_t* ht); } while(0) /** Memory manipulations */ -#define _MB_CHECK_MEM_TAG_SIZE(y, s) do { mb_mem_tag_t _tmp = (mb_mem_tag_t)s; if((y)_tmp != s) { mb_assert(0 && "\"mb_mem_tag_t\" is too small."); printf("The type \"mb_mem_tag_t\" is not precise enough to hold the given data, please redefine it!"); } } while(0) +#define _MB_CHECK_MEM_TAG_SIZE(y, s) ((mb_mem_tag_t)(s) == (s)) #define _MB_WRITE_MEM_TAG_SIZE(t, s) (*((mb_mem_tag_t*)((char*)(t) - _MB_MEM_TAG_SIZE)) = (mb_mem_tag_t)s) #define _MB_READ_MEM_TAG_SIZE(t) (*((mb_mem_tag_t*)((char*)(t) - _MB_MEM_TAG_SIZE))) @@ -2625,7 +2625,8 @@ void* mb_malloc(size_t s) { char* ret = NULL; size_t rs = s; #ifdef MB_ENABLE_ALLOC_STAT - _MB_CHECK_MEM_TAG_SIZE(size_t, s); + if(!_MB_CHECK_MEM_TAG_SIZE(size_t, s)) + return 0; rs += _MB_MEM_TAG_SIZE; #endif /* MB_ENABLE_ALLOC_STAT */ if(_mb_allocate_func) diff --git a/shell/main.c b/shell/main.c index 8eb1883..5a14f6d 100755 --- a/shell/main.c +++ b/shell/main.c @@ -317,7 +317,11 @@ static char* _pop_mem(unsigned s) { } else { /* Create a new node */ result = _POOL_NODE_ALLOC(pl->size); - _POOL_NODE_SIZE(result) = (_pool_chunk_size_t)s; + if((intptr_t)result == sizeof(_pool_tag_t)) { + result = 0; + } else { + _POOL_NODE_SIZE(result) = (_pool_chunk_size_t)s; + } return result; } @@ -327,7 +331,11 @@ static char* _pop_mem(unsigned s) { /* Allocate directly */ result = _POOL_NODE_ALLOC(s); - _POOL_NODE_SIZE(result) = (_pool_chunk_size_t)s; + if((intptr_t)result == sizeof(_pool_tag_t)) { + result = 0; + } else { + _POOL_NODE_SIZE(result) = (_pool_chunk_size_t)s; + } return result; }