diff --git a/include/libcamera/base/memfd.h b/include/libcamera/base/memfd.h
index 5ffa0f22..6805d374 100644
--- a/include/libcamera/base/memfd.h
+++ b/include/libcamera/base/memfd.h
@@ -21,6 +21,7 @@ public:
 		None = 0,
 		Shrink = (1 << 0),
 		Grow = (1 << 1),
+                ShrinkAndGrow = Shrink | Grow,
 	};
 
 	using Seals = Flags<Seal>;
diff --git a/include/libcamera/controls.h b/include/libcamera/controls.h
index 44ff4964..a22fe28f 100644
--- a/include/libcamera/controls.h
+++ b/include/libcamera/controls.h
@@ -253,6 +253,7 @@ public:
 	enum class Direction {
 		In = (1 << 0),
 		Out = (1 << 1),
+                InAndOut = In | Out,
 	};
 
 	using DirectionFlags = Flags<Direction>;
diff --git a/include/libcamera/internal/dma_buf_allocator.h b/include/libcamera/internal/dma_buf_allocator.h
index 13600915..40dc36da 100644
--- a/include/libcamera/internal/dma_buf_allocator.h
+++ b/include/libcamera/internal/dma_buf_allocator.h
@@ -26,7 +26,9 @@ public:
 	enum class DmaBufAllocatorFlag {
 		CmaHeap = 1 << 0,
 		SystemHeap = 1 << 1,
+		CmaHeapAndSystemHeap = CmaHeap | SystemHeap,
 		UDmaBuf = 1 << 2,
+		CmaHeapAndSystemHeapAndUDmaBuf = CmaHeap | SystemHeap | UDmaBuf,
 	};
 
 	using DmaBufAllocatorFlags = Flags<DmaBufAllocatorFlag>;
diff --git a/src/android/metadata/camera_metadata.c b/src/android/metadata/camera_metadata.c
index b86586a7..89cc792f 100644
--- a/src/android/metadata/camera_metadata.c
+++ b/src/android/metadata/camera_metadata.c
@@ -242,6 +242,10 @@ camera_metadata_t *allocate_copy_camera_metadata_checked(
     }
 
     void *buffer = malloc(src_size);
+    if(!buffer) {
+        return NULL;
+    }
+
     memcpy(buffer, src, src_size);
 
     camera_metadata_t *metadata = (camera_metadata_t*) buffer;
diff --git a/src/libcamera/base/object.cpp b/src/libcamera/base/object.cpp
index 37d133cc..6f075560 100644
--- a/src/libcamera/base/object.cpp
+++ b/src/libcamera/base/object.cpp
@@ -207,6 +207,9 @@ void Object::message(Message *msg)
 		 * it in release mode (with -O2 or -O3).
 		 */
 		InvokeMessage *iMsg = dynamic_cast<InvokeMessage *>(msg);
+                if(!iMsg)
+                        break;
+
 		Semaphore *semaphore = iMsg->semaphore();
 		iMsg->invoke();
 
diff --git a/src/libcamera/ipa_data_serializer.cpp b/src/libcamera/ipa_data_serializer.cpp
index 0537f785..86698684 100644
--- a/src/libcamera/ipa_data_serializer.cpp
+++ b/src/libcamera/ipa_data_serializer.cpp
@@ -311,9 +311,11 @@ template<>
 std::tuple<std::vector<uint8_t>, std::vector<SharedFD>>
 IPADataSerializer<ControlList>::serialize(const ControlList &data, ControlSerializer *cs)
 {
-	if (!cs)
+	if (!cs) {
 		LOG(IPADataSerializer, Fatal)
 			<< "ControlSerializer not provided for serialization of ControlList";
+		return {};
+        }
 
 	size_t size;
 	std::vector<uint8_t> infoData;
@@ -361,9 +363,11 @@ IPADataSerializer<ControlList>::deserialize(std::vector<uint8_t>::const_iterator
 					    std::vector<uint8_t>::const_iterator dataEnd,
 					    ControlSerializer *cs)
 {
-	if (!cs)
+	if (!cs) {
 		LOG(IPADataSerializer, Fatal)
 			<< "ControlSerializer not provided for deserialization of ControlList";
+		return {};
+        }
 
 	if (std::distance(dataBegin, dataEnd) < 8)
 		return {};
@@ -436,9 +440,11 @@ std::tuple<std::vector<uint8_t>, std::vector<SharedFD>>
 IPADataSerializer<ControlInfoMap>::serialize(const ControlInfoMap &map,
 					     ControlSerializer *cs)
 {
-	if (!cs)
+	if (!cs) {
 		LOG(IPADataSerializer, Fatal)
 			<< "ControlSerializer not provided for serialization of ControlInfoMap";
+		return {};
+        }
 
 	size_t size = cs->binarySize(map);
 	std::vector<uint8_t> infoData(size);
@@ -463,9 +469,11 @@ IPADataSerializer<ControlInfoMap>::deserialize(std::vector<uint8_t>::const_itera
 					       std::vector<uint8_t>::const_iterator dataEnd,
 					       ControlSerializer *cs)
 {
-	if (!cs)
+	if (!cs) {
 		LOG(IPADataSerializer, Fatal)
 			<< "ControlSerializer not provided for deserialization of ControlInfoMap";
+		return {};
+        }
 
 	if (std::distance(dataBegin, dataEnd) < 4)
 		return {};
diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp
index bf4c2921..15f918cd 100644
--- a/src/libcamera/pipeline/ipu3/ipu3.cpp
+++ b/src/libcamera/pipeline/ipu3/ipu3.cpp
@@ -565,7 +565,6 @@ int PipelineHandlerIPU3::configure(Camera *camera, CameraConfiguration *c)
 
 	/* Apply the format to the configured streams output devices. */
 	StreamConfiguration *mainCfg = nullptr;
-	StreamConfiguration *vfCfg = nullptr;
 
 	for (unsigned int i = 0; i < config->size(); ++i) {
 		StreamConfiguration &cfg = (*config)[i];
@@ -577,7 +576,6 @@ int PipelineHandlerIPU3::configure(Camera *camera, CameraConfiguration *c)
 			if (ret)
 				return ret;
 		} else if (stream == vfStream) {
-			vfCfg = &cfg;
 			ret = imgu->configureViewfinder(cfg, &outputFormat);
 			if (ret)
 				return ret;
@@ -589,7 +587,7 @@ int PipelineHandlerIPU3::configure(Camera *camera, CameraConfiguration *c)
 	 * the configuration of the active one for that purpose (there should
 	 * be at least one active stream in the configuration request).
 	 */
-	if (!vfCfg) {
+	if (mainCfg) {
 		ret = imgu->configureViewfinder(*mainCfg, &outputFormat);
 		if (ret)
 			return ret;
diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp
index c6fe12d6..3a5f9095 100644
--- a/src/libcamera/pipeline/simple/simple.cpp
+++ b/src/libcamera/pipeline/simple/simple.cpp
@@ -985,6 +985,9 @@ void SimpleCameraData::clearIncompleteRequests()
 
 void SimpleCameraData::tryCompleteRequest(Request *request)
 {
+        if (!request)
+                return;
+
 	if (request->hasPendingBuffers())
 		return;
 
diff --git a/src/libcamera/software_isp/debayer_cpu.cpp b/src/libcamera/software_isp/debayer_cpu.cpp
index d9f5b326..1b89a721 100644
--- a/src/libcamera/software_isp/debayer_cpu.cpp
+++ b/src/libcamera/software_isp/debayer_cpu.cpp
@@ -820,8 +820,6 @@ void DebayerCpuThread::process2(uint32_t frame, const uint8_t *src, uint8_t *dst
 		/* next line may point outside of src, use prev. */
 		linePointers[2] = linePointers[0];
 		debayer_->debayer1(dst, linePointers);
-		src += inputStride;
-		dst += outputStride;
 	}
 }
 
diff --git a/src/libcamera/v4l2_pixelformat.cpp b/src/libcamera/v4l2_pixelformat.cpp
index e8b3eb9c..105f5bed 100644
--- a/src/libcamera/v4l2_pixelformat.cpp
+++ b/src/libcamera/v4l2_pixelformat.cpp
@@ -291,15 +291,16 @@ std::string V4L2PixelFormat::toString() const
 	char ss[8] = { static_cast<char>(fourcc_ & 0x7f),
 		       static_cast<char>((fourcc_ >> 8) & 0x7f),
 		       static_cast<char>((fourcc_ >> 16) & 0x7f),
-		       static_cast<char>((fourcc_ >> 24) & 0x7f) };
+		       static_cast<char>((fourcc_ >> 24) & 0x7f),
+                       '-', 'B', 'E', 0 };
 
 	for (unsigned int i = 0; i < 4; i++) {
 		if (!isprint(ss[i]))
 			ss[i] = '.';
 	}
 
-	if (fourcc_ & (1 << 31))
-		strcat(ss, "-BE");
+	if (!(fourcc_ & (1 << 31)))
+		ss[4] = 0;
 
 	return ss;
 }
