Fix memory leak and undefined behavior in stb_alloc.cpp

This commit is contained in:
rexy712 2022-01-26 17:46:14 -08:00
parent 6f670b6cd9
commit 7622aa74a6
4 changed files with 12 additions and 6 deletions

View File

@ -79,7 +79,7 @@ namespace util{
constexpr deferred<T,Args...>::deferred(FArgs&&... args):
m_args{std::forward<FArgs>(args)...}{}
template<class T, class... Args>
constexpr auto deferred<T,Args...>::value(void) -> deferred<T,Args...>::value_type{
constexpr auto deferred<T,Args...>::value(void) -> value_type{
return get_value_(std::make_index_sequence<sizeof...(Args)>());
}
template<class T, class... Args>
@ -88,7 +88,7 @@ namespace util{
}
template<class T, class... Args>
template<size_t... Is>
constexpr auto deferred<T,Args...>::get_value_(std::index_sequence<Is...>) -> deferred<T,Args...>::value_type{
constexpr auto deferred<T,Args...>::get_value_(std::index_sequence<Is...>) -> value_type{
return T{std::get<Is>(m_args)...};
}

View File

@ -130,7 +130,7 @@ else
ifeq ($(MEMCHK),1)
#use asan to check memory leaks/invalid accesses
LDFLAGS+=-fsanitize=address -fno-omit-frame-pointer -fno-optimize-sibling-calls
COMPILER_FLAGS+=-fsanitize=address -fno-omit-frame-pointer -fno-optimize-sibling-calls
COMPILER_FLAGS+=-fsanitize=address -fno-omit-frame-pointer -fno-optimize-sibling-calls -DOUR_DICK_DISABLE_NOTHROW_ALLOCATE
endif
ifeq ($(UNDEFCHK),1)
LDFLAGS+=-fsanitize=undefined

View File

@ -1,6 +1,6 @@
/**
This file is a part of our_dick
Copyright (C) 2020 rexy712
Copyright (C) 2020-2022 rexy712
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
@ -31,7 +31,11 @@ extern "C"{
}
void* our_dick_stb_realloc(void* data, size_t olds, size_t news){
void* newdata = our_dick_stb_malloc(news);
memcpy(newdata, data, olds);
if(!newdata)
return nullptr;
if(data)
memcpy(newdata, data, olds);
our_dick_stb_free(data);
return newdata;
}
}

View File

@ -1,6 +1,6 @@
/**
This file is a part of our_dick
Copyright (C) 2020 rexy712
Copyright (C) 2020-2022 rexy712
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
@ -20,6 +20,7 @@
#include <cstdlib> //malloc, free
#include <new>
#ifndef OUR_DICK_DISABLE_NOTHROW_ALLOCATE
void* operator new(size_t newsize){
return std::malloc(newsize);
}
@ -37,3 +38,4 @@ void operator delete(void* ptr, std::align_val_t al)noexcept{
void operator delete(void* ptr, size_t)noexcept{
::operator delete(ptr);
}
#endif