stream: assert buffer is not nullptr before use

Signed-off-by: Simon Rozman <simon@rozman.si>
This commit is contained in:
Simon Rozman 2025-05-27 15:22:42 +02:00
parent 191f3bb2f9
commit 7bb614a34f

View File

@ -3568,6 +3568,7 @@ namespace stdex
#endif
size_t available = m_size - m_offset;
if (length <= available) {
stdex_assert(m_data || !length);
memcpy(data, &m_data[m_offset], length);
m_offset += length;
m_state = state_t::ok;
@ -3577,6 +3578,7 @@ namespace stdex
m_state = state_t::eof;
return 0;
}
stdex_assert(m_data || !available);
memcpy(data, &m_data[m_offset], available);
m_offset += available;
m_state = state_t::ok;
@ -3609,6 +3611,7 @@ namespace stdex
}
size_t end_offset = stdex::add(m_offset, sizeof(T));
if (end_offset <= m_size) {
stdex_assert(m_data);
data = LE2HE(*reinterpret_cast<T*>(&m_data[m_offset]));
m_offset = end_offset;
#if !CHECK_STREAM_STATE
@ -3649,6 +3652,7 @@ namespace stdex
}
size_t end_offset = stdex::add(m_offset, sizeof(uint32_t));
if (end_offset <= m_size) {
stdex_assert(m_data);
uint32_t num_chars = LE2HE(*reinterpret_cast<uint32_t*>(&m_data[m_offset]));
m_offset = end_offset;
end_offset = stdex::add(m_offset, stdex::mul(num_chars, sizeof(T)));
@ -3682,6 +3686,7 @@ namespace stdex
if (!ok()) _Unlikely_
return 0;
}
stdex_assert(m_data || !length);
memcpy(&m_data[m_offset], data, length);
m_offset = end_offset;
if (m_offset > m_size)
@ -3704,6 +3709,7 @@ namespace stdex
if (!ok()) _Unlikely_
return;
}
stdex_assert(m_data || !amount);
memset(&m_data[m_offset], byte, amount);
m_offset = end_offset;
if (m_offset > m_size)
@ -3739,6 +3745,7 @@ namespace stdex
if (!ok()) _Unlikely_
return *this;
}
stdex_assert(m_data);
(*reinterpret_cast<T*>(&m_data[m_offset])) = HE2LE(data);
m_offset = end_offset;
if (m_offset > m_size)
@ -3782,6 +3789,7 @@ namespace stdex
if (!ok()) _Unlikely_
return *this;
}
stdex_assert(m_data);
auto p = &m_data[m_offset];
*reinterpret_cast<uint32_t*>(p) = HE2LE((uint32_t)num_chars);
memcpy(p + sizeof(uint32_t), data, size_chars);
@ -3827,6 +3835,7 @@ namespace stdex
if (!ok()) _Unlikely_
return *this;
}
stdex_assert(m_data);
auto p = &m_data[m_offset];
*reinterpret_cast<uint32_t*>(p) = HE2LE((uint32_t)num_chars);
memcpy(p + sizeof(uint32_t), data.data(), size_chars);
@ -3858,6 +3867,7 @@ namespace stdex
if (!ok()) _Unlikely_
return 0;
while (to_write) {
stdex_assert(m_data || !to_write);
num_read = stream.read(&m_data[dst_offset], to_write);
/*dst_size =*/ dst_offset += num_read;
num_copied += num_read;
@ -3877,6 +3887,7 @@ namespace stdex
reserve(dst_size);
if (!ok()) _Unlikely_
break;
stdex_assert(m_data || !block_size);
num_read = stream.read(&m_data[dst_offset], block_size);
dst_size = dst_offset += num_read;
num_copied += num_read;
@ -3989,6 +4000,7 @@ namespace stdex
#if SET_FILE_OP_TIMES
m_atime = m_mtime = time_point::now();
#endif
stdex_assert(m_data);
stdex_assert(offset + sizeof(T) < m_size);
(*reinterpret_cast<T*>(&m_data[offset])) = HE2LE(data);
}
@ -4020,6 +4032,7 @@ namespace stdex
template <class T>
void get(_In_ fpos_t offset, _Out_ T & data)
{
stdex_assert(m_data);
stdex_assert(offset + sizeof(T) < m_size);
data = LE2HE(*(T*)(&m_data[offset]));
#if SET_FILE_OP_TIMES