void SensitiveAllocator::free(void *addr) throw()
{
- memset(addr, 0, malloc_size(addr));
+ size_t size = malloc_size(addr);
+ ::memset_s(addr, size, 0, size);
DefaultAllocator::free(addr);
}
{
size_t oldSize = malloc_size(addr);
if (newSize < oldSize)
- memset(increment(addr, newSize), 0, oldSize - newSize);
+ ::memset_s(increment(addr, newSize), oldSize - newSize, 0, oldSize - newSize);
return DefaultAllocator::realloc(addr, newSize);
}
//
void *CssmHeap::operator new (size_t size, Allocator *alloc) throw(std::bad_alloc)
{
- if (alloc == NULL)
+ if (size > SIZE_T_MAX / 2) {
+ throw std::bad_alloc();
+ }
+ if (alloc == NULL) {
alloc = &Allocator::standard();
+ }
size = alignUp(size, alignof_template<Allocator *>());
size_t totalSize = size + sizeof(Allocator *);
void *addr = alloc->malloc(totalSize);