mirror of
https://github.com/msgpack/msgpack-c.git
synced 2025-06-25 22:15:23 +02:00
Move overflow check up
This commit is contained in:
parent
349c133171
commit
d72765870a
@ -58,6 +58,10 @@ public:
|
|||||||
:m_ref_size(std::max(ref_size, detail::packer_max_buffer_size + 1)),
|
:m_ref_size(std::max(ref_size, detail::packer_max_buffer_size + 1)),
|
||||||
m_chunk_size(chunk_size)
|
m_chunk_size(chunk_size)
|
||||||
{
|
{
|
||||||
|
if((sizeof(chunk) + chunk_size) < chunk_size) {
|
||||||
|
throw std::bad_alloc();
|
||||||
|
}
|
||||||
|
|
||||||
size_t nfirst = (sizeof(iovec) < 72/2) ?
|
size_t nfirst = (sizeof(iovec) < 72/2) ?
|
||||||
72 / sizeof(iovec) : 8;
|
72 / sizeof(iovec) : 8;
|
||||||
|
|
||||||
@ -71,11 +75,6 @@ public:
|
|||||||
m_end = array + nfirst;
|
m_end = array + nfirst;
|
||||||
m_array = array;
|
m_array = array;
|
||||||
|
|
||||||
if((sizeof(chunk) + chunk_size) < chunk_size){
|
|
||||||
::free(array);
|
|
||||||
throw std::bad_alloc();
|
|
||||||
}
|
|
||||||
|
|
||||||
chunk* c = static_cast<chunk*>(::malloc(sizeof(chunk) + chunk_size));
|
chunk* c = static_cast<chunk*>(::malloc(sizeof(chunk) + chunk_size));
|
||||||
if(!c) {
|
if(!c) {
|
||||||
::free(array);
|
::free(array);
|
||||||
|
@ -30,6 +30,10 @@ bool msgpack_vrefbuffer_init(msgpack_vrefbuffer* vbuf,
|
|||||||
ref_size > MSGPACK_PACKER_MAX_BUFFER_SIZE + 1 ?
|
ref_size > MSGPACK_PACKER_MAX_BUFFER_SIZE + 1 ?
|
||||||
ref_size : MSGPACK_PACKER_MAX_BUFFER_SIZE + 1 ;
|
ref_size : MSGPACK_PACKER_MAX_BUFFER_SIZE + 1 ;
|
||||||
|
|
||||||
|
if((sizeof(msgpack_vrefbuffer_chunk) + chunk_size) < chunk_size) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
nfirst = (sizeof(struct iovec) < 72/2) ?
|
nfirst = (sizeof(struct iovec) < 72/2) ?
|
||||||
72 / sizeof(struct iovec) : 8;
|
72 / sizeof(struct iovec) : 8;
|
||||||
|
|
||||||
@ -43,11 +47,6 @@ bool msgpack_vrefbuffer_init(msgpack_vrefbuffer* vbuf,
|
|||||||
vbuf->end = array + nfirst;
|
vbuf->end = array + nfirst;
|
||||||
vbuf->array = array;
|
vbuf->array = array;
|
||||||
|
|
||||||
if((sizeof(msgpack_vrefbuffer_chunk) + chunk_size) < chunk_size){
|
|
||||||
free(array);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
chunk = (msgpack_vrefbuffer_chunk*)malloc(
|
chunk = (msgpack_vrefbuffer_chunk*)malloc(
|
||||||
sizeof(msgpack_vrefbuffer_chunk) + chunk_size);
|
sizeof(msgpack_vrefbuffer_chunk) + chunk_size);
|
||||||
if(chunk == NULL) {
|
if(chunk == NULL) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user