Fix undefined behaviour, calling memcpy with NULL pointer.
Identified as part of audit: Least Authority, Issue D.
This commit is contained in:
@@ -230,6 +230,10 @@ public:
|
|||||||
{
|
{
|
||||||
if (nSize == 0) return;
|
if (nSize == 0) return;
|
||||||
|
|
||||||
|
if (pch == nullptr) {
|
||||||
|
throw std::ios_base::failure("CBaseDataStream::read(): cannot read from null pointer");
|
||||||
|
}
|
||||||
|
|
||||||
// Read from the beginning of the buffer
|
// Read from the beginning of the buffer
|
||||||
unsigned int nReadPosNext = nReadPos + nSize;
|
unsigned int nReadPosNext = nReadPos + nSize;
|
||||||
if (nReadPosNext >= vch.size())
|
if (nReadPosNext >= vch.size())
|
||||||
@@ -519,6 +523,12 @@ public:
|
|||||||
|
|
||||||
// read a number of bytes
|
// read a number of bytes
|
||||||
void read(char *pch, size_t nSize) {
|
void read(char *pch, size_t nSize) {
|
||||||
|
if (nSize == 0) return;
|
||||||
|
|
||||||
|
if (pch == nullptr) {
|
||||||
|
throw std::ios_base::failure("CBufferedFile::read(): cannot read from null pointer");
|
||||||
|
}
|
||||||
|
|
||||||
if (nSize + nReadPos > nReadLimit)
|
if (nSize + nReadPos > nReadLimit)
|
||||||
throw std::ios_base::failure("Read attempted past buffer limit");
|
throw std::ios_base::failure("Read attempted past buffer limit");
|
||||||
if (nSize + nRewind > vchBuf.size())
|
if (nSize + nRewind > vchBuf.size())
|
||||||
|
|||||||
Reference in New Issue
Block a user