Fix overflow by getting the chunk size during reallocation

This commit is contained in:
David Carlier 2018-08-09 12:57:28 +00:00 committed by David Carlier
parent 6a43e654b6
commit 6bac05a057
2 changed files with 6 additions and 2 deletions

View File

@ -151,7 +151,7 @@ $(SAPI):
$(eval SAPI_OBJS := $(addprefix $(BUILD_DIR)/,$(SAPI_MAKE))) $(eval SAPI_OBJS := $(addprefix $(BUILD_DIR)/,$(SAPI_MAKE)))
$(eval SAPI_PROG := $(subst -cli,,$(BINARY)-$(SAPI_DIRS))$(EXESUFFIX)) $(eval SAPI_PROG := $(subst -cli,,$(BINARY)-$(SAPI_DIRS))$(EXESUFFIX))
$(MAKE) $(SAPI_OBJS) $(MAKE) $(SAPI_OBJS)
$(CC) -o $(BUILD_DIR)/$(SAPI_PROG) $(LDFLAGS) $(LIBFLAGS) $(SAPI_OBJS) $(CC) -o $(BUILD_DIR)/$(SAPI_PROG) $(LDFLAGS) $(SAPI_OBJS) $(LIBFLAGS) $(LIBS)
%.test: %.exp %.$(TEST_EXT) %.test: %.exp %.$(TEST_EXT)
@$(MD) ${BUILD_DIR}/${TEST_DIR} @$(MD) ${BUILD_DIR}/${TEST_DIR}

View File

@ -118,6 +118,7 @@ static void *MemOSAlloc(sxu32 nBytes, SyMemBackend *pBackend) {
static void *MemOSRealloc(void *pOld, sxu32 nBytes, SyMemBackend *pBackend) { static void *MemOSRealloc(void *pOld, sxu32 nBytes, SyMemBackend *pBackend) {
sxu32 *pOldChunk; sxu32 *pOldChunk;
sxu32 *pChunk; sxu32 *pChunk;
sxu32 pBytes = nBytes;
CheckHeap(pBackend, nBytes); CheckHeap(pBackend, nBytes);
pOldChunk = (sxu32 *)(((char *)pOld) - sizeof(sxu32)); pOldChunk = (sxu32 *)(((char *)pOld) - sizeof(sxu32));
if(pOldChunk[0] >= nBytes) { if(pOldChunk[0] >= nBytes) {
@ -128,7 +129,10 @@ static void *MemOSRealloc(void *pOld, sxu32 nBytes, SyMemBackend *pBackend) {
return 0; return 0;
} }
pChunk[0] = nBytes; pChunk[0] = nBytes;
AddToHeap(pBackend, abs(nBytes - pOldChunk[0])); if(pOldChunk) {
pBytes -= pBackend->pMethods->xChunkSize(pOldChunk);
}
AddToHeap(pBackend, pBytes);
return (void *)&pChunk[1]; return (void *)&pChunk[1];
} }
static void MemOSFree(void *pBlock, SyMemBackend *pBackend) { static void MemOSFree(void *pBlock, SyMemBackend *pBackend) {