diff --git a/src/add-ons/kernel/busses/scsi/virtio/VirtioSCSIController.cpp b/src/add-ons/kernel/busses/scsi/virtio/VirtioSCSIController.cpp index ca77bee80f..eed726ca10 100644 --- a/src/add-ons/kernel/busses/scsi/virtio/VirtioSCSIController.cpp +++ b/src/add-ons/kernel/busses/scsi/virtio/VirtioSCSIController.cpp @@ -210,6 +210,11 @@ VirtioSCSIController::ExecuteRequest(scsi_ccb *ccb) uint32 inCount = (isIn ? ccb->sg_count : 0) + 1; uint32 outCount = (isOut ? ccb->sg_count : 0) + 1; BStackOrHeapArray entries(inCount + outCount); + if (!entries.IsValid()) { + fRequest->SetStatus(SCSI_REQ_INVALID); + fRequest->Finish(false); + return B_NO_MEMORY; + } fRequest->FillRequest(inCount, outCount, entries); { diff --git a/src/add-ons/kernel/network/protocols/ipv6/ipv6.cpp b/src/add-ons/kernel/network/protocols/ipv6/ipv6.cpp index 0e07ef0180..444e1082be 100644 --- a/src/add-ons/kernel/network/protocols/ipv6/ipv6.cpp +++ b/src/add-ons/kernel/network/protocols/ipv6/ipv6.cpp @@ -638,6 +638,8 @@ send_fragments(ipv6_protocol* protocol, struct net_route* route, return status; BStackOrHeapArray data(bytesLeft); + if (!data.IsValid()) + return B_NO_MEMORY; status = gBufferModule->read(buffer, headersLength, data, bytesLeft); if (status != B_OK) return status; diff --git a/src/add-ons/media/media-add-ons/mixer/MixerCore.cpp b/src/add-ons/media/media-add-ons/mixer/MixerCore.cpp index c0ce9e670e..9d82ac0cba 100644 --- a/src/add-ons/media/media-add-ons/mixer/MixerCore.cpp +++ b/src/add-ons/media/media-add-ons/mixer/MixerCore.cpp @@ -524,6 +524,10 @@ MixerCore::_MixThread() chan_info_list inputChanInfos[MAX_CHANNEL_TYPES]; BStackOrHeapArray mixChanInfos(fMixBufferChannelCount); // TODO: this does not support changing output channel count + if (!mixChanInfos.IsValid()) { + ERROR("MixerCore::_MixThread mixChanInfos allocation failed\n"); + return; + } fEventTime = timeBase; int64 framePos = 0; diff --git a/src/apps/soundrecorder/VUView.cpp b/src/apps/soundrecorder/VUView.cpp index 2f6112be63..393159df09 100644 --- a/src/apps/soundrecorder/VUView.cpp +++ b/src/apps/soundrecorder/VUView.cpp @@ -110,6 +110,8 @@ void VUView::_RenderLoop() { BStackOrHeapArray levels(fLevelCount); + if (!levels.IsValid()) + return; for (int32 i = 0; i < fLevelCount; i++) { levels[i][0] = levels[i][1] = back_color; diff --git a/src/apps/terminal/BasicTerminalBuffer.cpp b/src/apps/terminal/BasicTerminalBuffer.cpp index 7d4dd2a8c2..a1f0d10f60 100644 --- a/src/apps/terminal/BasicTerminalBuffer.cpp +++ b/src/apps/terminal/BasicTerminalBuffer.cpp @@ -539,6 +539,8 @@ BasicTerminalBuffer::Find(const char* _pattern, const TermPos& start, // convert pattern to UTF8Char array BStackOrHeapArray pattern(patternByteLen); + if (!pattern.IsValid()) + return false; int32 patternLen = 0; while (*_pattern != '\0') { int32 charLen = UTF8Char::ByteCount(*_pattern); diff --git a/src/system/libroot/os/find_directory.cpp b/src/system/libroot/os/find_directory.cpp index 0b944e80a3..52c4af8fc6 100644 --- a/src/system/libroot/os/find_directory.cpp +++ b/src/system/libroot/os/find_directory.cpp @@ -203,6 +203,8 @@ create_path(const char *path, mode_t mode) return EINVAL; BStackOrHeapArray buffer(pathLength + 1); + if (!buffer.IsValid()) + return B_NO_MEMORY; while (++i < pathLength) { char *slash = strchr(&path[i], '/');