diff --git a/src/android/camera_metadata.cpp b/src/android/camera_metadata.cpp
index 59366c50cc16..3eb71d7f7d9d 100644
--- a/src/android/camera_metadata.cpp
+++ b/src/android/camera_metadata.cpp
@@ -137,7 +137,8 @@ bool CameraMetadata::addEntry(uint32_t tag, const void *data, size_t count,
 	return false;
 }
 
-bool CameraMetadata::updateEntry(uint32_t tag, const void *data, size_t count)
+bool CameraMetadata::updateEntry(uint32_t tag, const void *data, size_t count,
+				 size_t elementSize)
 {
 	if (!valid_)
 		return false;
@@ -152,6 +153,14 @@ bool CameraMetadata::updateEntry(uint32_t tag, const void *data, size_t count)
 		return false;
 	}
 
+	if (camera_metadata_type_size[entry.type] != elementSize) {
+		const char *name = get_camera_metadata_tag_name(tag);
+		LOG(CameraMetadata, Error)
+			<< "Invalid element size for tag "
+			<< (name ? name : "<unknown>") << ": not present";
+		return false;
+	}
+
 	size_t oldSize =
 		calculate_camera_metadata_entry_data_size(entry.type,
 							  entry.count);
diff --git a/src/android/camera_metadata.h b/src/android/camera_metadata.h
index d7c8d9df689f..f8f2a0d23aa3 100644
--- a/src/android/camera_metadata.h
+++ b/src/android/camera_metadata.h
@@ -55,7 +55,7 @@ public:
 	template<typename T>
 	bool updateEntry(uint32_t tag, const T &data)
 	{
-		return updateEntry(tag, &data, 1);
+		return updateEntry(tag, &data, 1, sizeof(T));
 	}
 
 	template<typename T, size_t size>
@@ -68,10 +68,14 @@ public:
 		 typename T = typename S::value_type>
 	bool updateEntry(uint32_t tag, const S &data)
 	{
-		return updateEntry(tag, data.data(), data.size());
+		return updateEntry(tag, data.data(), data.size(), sizeof(T));
 	}
 
-	bool updateEntry(uint32_t tag, const void *data, size_t count);
+	template<typename T>
+	bool updateEntry(uint32_t tag, const T *data, size_t count)
+	{
+		return updateEntry(tag, data, count, sizeof(T));
+	}
 
 	camera_metadata_t *get();
 	const camera_metadata_t *get() const;
@@ -80,6 +84,8 @@ private:
 	bool resize(size_t count, size_t size);
 	bool addEntry(uint32_t tag, const void *data, size_t count,
 		      size_t elementSize);
+	bool updateEntry(uint32_t tag, const void *data, size_t count,
+			 size_t elementSize);
 
 	camera_metadata_t *metadata_;
 	bool valid_;
