Fix overflow by getting the chunk size during reallocation
This commit is contained in:
parent
6a43e654b6
commit
6bac05a057
2
Makefile
2
Makefile
|
@ -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}
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
Loading…
Reference in New Issue