Closed
Description
I don't know if I'm missing some define flags, but if I'm uderstanding everything correctly the SDK seems to be producing an error in Valgrind and the mistake looks legit.
==18132== Thread 3:
==18132== Mismatched free() / delete / delete []
==18132== at 0x4C2D860: operator delete[](void*) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==18132== by 0x133400A: std::default_delete<unsigned char []>::operator()(unsigned char*) const (unique_ptr.h:119)
==18132== by 0x1333776: std::unique_ptr<unsigned char, std::default_delete<unsigned char []> >::~unique_ptr() (unique_ptr.h:236)
==18132== by 0x13333E7: Aws::Utils::Array<unsigned char>::~Array() (Array.h:39)
==18132== by 0x1332F5E: Aws::Client::AWSAuthV4Signer::ComputePayloadHash(Aws::Http::HttpRequest&) const (AWSAuthSigner.cpp:339)
==18132== by 0x1330868: Aws::Client::AWSAuthV4Signer::SignRequest(Aws::Http::HttpRequest&) const (AWSAuthSigner.cpp:120)
==18132== by 0x133C72F: Aws::Client::AWSClient::AttemptOneRequest(std::string const&, Aws::AmazonWebServiceRequest const&, Aws::Http::HttpMethod) const (AWSClient.cpp:125)
==18132== by 0x133C23D: Aws::Client::AWSClient::AttemptExhaustively(std::string const&, Aws::AmazonWebServiceRequest const&, Aws::Http::HttpMethod) const (AWSClient.cpp:76)
==18132== by 0x133E78C: Aws::Client::AWSXMLClient::MakeRequest(std::string const&, Aws::AmazonWebServiceRequest const&, Aws::Http::HttpMethod) const (AWSClient.cpp:376)
==18132== by 0x11AD4F8: Aws::S3::S3Client::PutObject(Aws::S3::Model::PutObjectRequest const&) const (S3Client.cpp:1659)
==18132== by 0x12B62A3: Aws::Utils::Outcome<Aws::S3::Model::PutObjectResult, Aws::Client::AWSError<Aws::S3::S3Errors> > std::_Mem_fn<Aws::Utils::Outcome<Aws::S3::Model::PutObjectResult, Aws::Client::AWSError<Aws::S3::S3Errors> > (Aws::S3::S3Client::*)(Aws::S3::Model::PutObjectRequest const&) const>::operator()<Aws::S3::Model::PutObjectRequest, void>(Aws::S3::S3Client const*, Aws::S3::Model::PutObjectRequest&&) const (in /home/vagrant/bruce/linuxbuild/s3kv/s3kv)
==18132== by 0x12B1E93: Aws::Utils::Outcome<Aws::S3::Model::PutObjectResult, Aws::Client::AWSError<Aws::S3::S3Errors> > std::_Bind_simple<std::_Mem_fn<Aws::Utils::Outcome<Aws::S3::Model::PutObjectResult, Aws::Client::AWSError<Aws::S3::S3Errors> > (Aws::S3::S3Client::*)(Aws::S3::Model::PutObjectRequest const&) const> (Aws::S3::S3Client const*, Aws::S3::Model::PutObjectRequest)>::_M_invoke<0ul, 1ul>(std::_Index_tuple<0ul, 1ul>) (functional:1700)
==18132== Address 0xb73c080 is 0 bytes inside a block of size 32 alloc'd
==18132== at 0x4C2BBA0: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==18132== by 0x135D269: Aws::Malloc(char const*, unsigned long) (AWSMemory.cpp:84)
==18132== by 0x1334093: unsigned char* Aws::NewArray<unsigned char>(unsigned long, char const*) (AWSMemory.h:97)
==18132== by 0x13338EA: Aws::Utils::Array<unsigned char>::Array(Aws::Utils::Array<unsigned char> const&) (Array.h:72)
==18132== by 0x1332E31: Aws::Client::AWSAuthV4Signer::ComputePayloadHash(Aws::Http::HttpRequest&) const (AWSAuthSigner.cpp:339)
==18132== by 0x1330868: Aws::Client::AWSAuthV4Signer::SignRequest(Aws::Http::HttpRequest&) const (AWSAuthSigner.cpp:120)
==18132== by 0x133C72F: Aws::Client::AWSClient::AttemptOneRequest(std::string const&, Aws::AmazonWebServiceRequest const&, Aws::Http::HttpMethod) const (AWSClient.cpp:125)
==18132== by 0x133C23D: Aws::Client::AWSClient::AttemptExhaustively(std::string const&, Aws::AmazonWebServiceRequest const&, Aws::Http::HttpMethod) const (AWSClient.cpp:76)
==18132== by 0x133E78C: Aws::Client::AWSXMLClient::MakeRequest(std::string const&, Aws::AmazonWebServiceRequest const&, Aws::Http::HttpMethod) const (AWSClient.cpp:376)
==18132== by 0x11AD4F8: Aws::S3::S3Client::PutObject(Aws::S3::Model::PutObjectRequest const&) const (S3Client.cpp:1659)
==18132== by 0x12B62A3: Aws::Utils::Outcome<Aws::S3::Model::PutObjectResult, Aws::Client::AWSError<Aws::S3::S3Errors> > std::_Mem_fn<Aws::Utils::Outcome<Aws::S3::Model::PutObjectResult, Aws::Client::AWSError<Aws::S3::S3Errors> > (Aws::S3::S3Client::*)(Aws::S3::Model::PutObjectRequest const&) const>::operator()<Aws::S3::Model::PutObjectRequest, void>(Aws::S3::S3Client const*, Aws::S3::Model::PutObjectRequest&&) const (in /home/vagrant/bruce/linuxbuild/s3kv/s3kv)
==18132== by 0x12B1E93: Aws::Utils::Outcome<Aws::S3::Model::PutObjectResult, Aws::Client::AWSError<Aws::S3::S3Errors> > std::_Bind_simple<std::_Mem_fn<Aws::Utils::Outcome<Aws::S3::Model::PutObjectResult, Aws::Client::AWSError<Aws::S3::S3Errors> > (Aws::S3::S3Client::*)(Aws::S3::Model::PutObjectRequest const&) const> (Aws::S3::S3Client const*, Aws::S3::Model::PutObjectRequest)>::_M_invoke<0ul, 1ul>(std::_Index_tuple<0ul, 1ul>) (functional:1700)
When I don't define AWS_CUSTOM_MEMORY_MANAGEMENT
, then in AWSMemory.h
the ArrayDeleter
type gets defined as a deleter of an array type, and UniqueArrayPtr
is going to use either that deleter or a deleter that calls DeleteArray
, which ultimately does free
.
However Array.h
contains (in a couple of places):
m_data.reset(Aws::NewArray<T>(m_size, ARRAY_ALLOCATION_TAG));
Where m_data
is one of those UniqueArrayPtrs
.
The data ALWAYS gets malloc
ed, but when compiled without AWS_CUSTOM_MEMORY_MANAGEMENT, the data gets delete[]
d instead of free
d, which is an error.
Metadata
Metadata
Assignees
Labels
No labels