From bbbae2f2b70eb1d6acf689d4d3f199b6dd42f8c6 Mon Sep 17 00:00:00 2001 From: liufeng Date: Wed, 18 Sep 2024 14:07:10 +0800 Subject: [PATCH 1/3] =?UTF-8?q?fix:=20=E4=BF=AE=E6=94=B9metadata.type?= =?UTF-8?q?=E6=A0=A1=E9=AA=8C=E5=A4=B1=E8=B4=A5=E5=90=8E=E8=BF=94=E5=9B=9E?= =?UTF-8?q?=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: liufeng --- .../include/camera_metadata_operator.h | 2 +- camera/metadata/src/camera_metadata_info.cpp | 30 ++++++++++++++----- .../metadata/src/camera_metadata_operator.cpp | 2 +- 3 files changed, 24 insertions(+), 10 deletions(-) diff --git a/camera/metadata/include/camera_metadata_operator.h b/camera/metadata/include/camera_metadata_operator.h index 3b1e4e65..2684822f 100644 --- a/camera/metadata/include/camera_metadata_operator.h +++ b/camera/metadata/include/camera_metadata_operator.h @@ -201,7 +201,7 @@ uint32_t GetCameraMetadataItemCapacity(const common_metadata_header_t *metadata_ uint32_t GetCameraMetadataDataSize(const common_metadata_header_t *metadata_header); int32_t CopyCameraMetadataItems(common_metadata_header_t *newMetadata, const common_metadata_header_t *oldMetadata); -size_t CalculateCameraMetadataItemDataSize(uint32_t type, size_t data_count); +int32_t CalculateCameraMetadataItemDataSize(uint32_t type, size_t data_count); int32_t GetCameraMetadataItemType(uint32_t item, uint32_t *data_type); common_metadata_header_t *FillCameraMetadata(common_metadata_header_t *buffer, size_t memoryRequired, uint32_t itemCapacity, uint32_t dataCapacity); diff --git a/camera/metadata/src/camera_metadata_info.cpp b/camera/metadata/src/camera_metadata_info.cpp index 68903153..959d76cc 100644 --- a/camera/metadata/src/camera_metadata_info.cpp +++ b/camera/metadata/src/camera_metadata_info.cpp @@ -376,7 +376,11 @@ bool CameraMetadata::resize_add_metadata(uint32_t item, const void *data, size_t METADATA_ERR_LOG("GetCameraMetadataItemType invalid item type"); return false; } - size_t size = CalculateCameraMetadataItemDataSize(data_type, data_count); + int32_t size = CalculateCameraMetadataItemDataSize(data_type, data_count); + if (size == CAM_META_FAILURE) { + METADATA_ERR_LOG("CalculateCameraMetadataItemDataSize invalid datatype:%{public}d", data_type); + return false + } common_metadata_header_t *newMetadata = AllocateCameraMetadataBuffer((itemCapacity + 1) * INDEX_COUNTER, AlignTo((data_capacity + size) * INDEX_COUNTER, DATA_ALIGNMENT)); @@ -682,12 +686,12 @@ const char *CameraMetadata::GetCameraMetadataItemName(uint32_t item) return g_ohosItemInfo[section][itemIndex].item_name; } -size_t CameraMetadata::CalculateCameraMetadataItemDataSize(uint32_t type, size_t dataCount) +int32_t CameraMetadata::CalculateCameraMetadataItemDataSize(uint32_t type, size_t dataCount) { METADATA_DEBUG_LOG("CalculateCameraMetadataItemDataSize start"); if (type < META_TYPE_BYTE || type >= META_NUM_TYPES) { METADATA_ERR_LOG("CalculateCameraMetadataItemDataSize invalid type"); - return 0; + return CAM_META_FAILURE; } size_t dataBytes = dataCount * OHOS_CAMERA_METADATA_TYPE_SIZE[type]; @@ -728,6 +732,10 @@ int CameraMetadata::AddCameraMetadataItemVerify(common_metadata_header_t *dst, METADATA_ERR_LOG("AddCameraMetadataItemVerify invalid item type"); return CAM_META_INVALID_PARAM; } + if (*dataType < META_TYPE_BYTE || *dataType >= META_NUM_TYPES) { + METADATA_ERR_LOG("AddCameraMetadataItemVerify invalid type"); + return CAM_META_INVALID_PARAM + } return CAM_META_SUCCESS; } @@ -746,7 +754,7 @@ int CameraMetadata::AddCameraMetadataItem(common_metadata_header_t *dst, uint32_ return CAM_META_INVALID_PARAM; } - size_t dataBytes = CalculateCameraMetadataItemDataSize(dataType, dataCount); + int32_t dataBytes = CalculateCameraMetadataItemDataSize(dataType, dataCount); if (dataBytes + dst->data_count > dst->data_capacity) { METADATA_ERR_LOG("AddCameraMetadataItem data_capacity limit reached"); return CAM_META_DATA_CAP_EXCEED; @@ -816,9 +824,12 @@ int CameraMetadata::GetCameraMetadataItem(const common_metadata_header_t *src, u item->data_type = localItem->data_type; item->count = localItem->count; - size_t dataBytes = CalculateCameraMetadataItemDataSize(localItem->data_type, localItem->count); + int32_t dataBytes = CalculateCameraMetadataItemDataSize(localItem->data_type, localItem->count); if (dataBytes == 0) { item->data.u8 = localItem->data.value; + } else if (dataBytes == CAM_META_FAILURE) { + METADATA_ERR_LOG("GetCameraMetadataItem invalid datatype:%{public}d", localItem->data_type); + return CAM_META_FAILURE; } else { uint8_t *srcMetadataData = GetMetadataData(src); if (srcMetadataData == nullptr) { @@ -959,9 +970,9 @@ int CameraMetadata::UpdateameraMetadataItemSize(camera_metadata_item_entry_t *it METADATA_ERR_LOG("UpdateameraMetadataItemSize invalid item"); return CAM_META_FAILURE; } - size_t dataSize = CalculateCameraMetadataItemDataSize(item->data_type, dataCount); + int32_t dataSize = CalculateCameraMetadataItemDataSize(item->data_type, dataCount); size_t dataPayloadSize = dataCount * OHOS_CAMERA_METADATA_TYPE_SIZE[item->data_type]; - size_t oldItemSize = CalculateCameraMetadataItemDataSize(item->data_type, item->count); + int32_t oldItemSize = CalculateCameraMetadataItemDataSize(item->data_type, item->count); int32_t ret = CAM_META_SUCCESS; if (dataSize != oldItemSize) { if (dst->data_capacity < (dst->data_count + dataSize - oldItemSize)) { @@ -1095,7 +1106,7 @@ int CameraMetadata::DeleteCameraMetadataItemByIndex(common_metadata_header_t *ds int32_t ret = CAM_META_SUCCESS; camera_metadata_item_entry_t *itemToDelete = GetMetadataItems(dst) + index; - size_t dataBytes = CalculateCameraMetadataItemDataSize(itemToDelete->data_type, itemToDelete->count); + int32_t dataBytes = CalculateCameraMetadataItemDataSize(itemToDelete->data_type, itemToDelete->count); if (dataBytes > 0) { ret = moveMetadataMemery(dst, itemToDelete, dataBytes); if (ret != CAM_META_SUCCESS) { @@ -1111,6 +1122,9 @@ int CameraMetadata::DeleteCameraMetadataItemByIndex(common_metadata_header_t *ds metadataItems->data.offset -= dataBytes; } } + } else if (dataBytes == CAM_META_FAILURE) { + METADATA_ERR_LOG("DeleteCameraMetadataItemByIndex invalid datatype:%{public}d", itemToDelete->data_type); + return CAM_META_FAILURE; } uint64_t length = sizeof(camera_metadata_item_entry_t) * (dst->item_count - index - 1); diff --git a/camera/metadata/src/camera_metadata_operator.cpp b/camera/metadata/src/camera_metadata_operator.cpp index 26dee921..5a7056a0 100644 --- a/camera/metadata/src/camera_metadata_operator.cpp +++ b/camera/metadata/src/camera_metadata_operator.cpp @@ -52,7 +52,7 @@ const char *GetCameraMetadataItemName(uint32_t item) return CameraMetadata::GetCameraMetadataItemName(item); } -size_t CalculateCameraMetadataItemDataSize(uint32_t type, size_t dataCount) +int32_t CalculateCameraMetadataItemDataSize(uint32_t type, size_t dataCount) { return CameraMetadata::CalculateCameraMetadataItemDataSize(type, dataCount); } -- Gitee From 087633a39753fc73e9b452c535ab538fb79c8bd4 Mon Sep 17 00:00:00 2001 From: liufeng Date: Wed, 18 Sep 2024 14:07:50 +0800 Subject: [PATCH 2/3] =?UTF-8?q?fix:=20=E4=BF=AE=E6=94=B9metadata.type?= =?UTF-8?q?=E6=A0=A1=E9=AA=8C=E5=A4=B1=E8=B4=A5=E5=90=8E=E8=BF=94=E5=9B=9E?= =?UTF-8?q?=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: liufeng --- camera/metadata/include/camera_metadata_info.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/camera/metadata/include/camera_metadata_info.h b/camera/metadata/include/camera_metadata_info.h index dd0e4304..042d020e 100644 --- a/camera/metadata/include/camera_metadata_info.h +++ b/camera/metadata/include/camera_metadata_info.h @@ -109,7 +109,7 @@ public: static uint32_t GetCameraMetadataDataSize(const common_metadata_header_t *metadata_header); static int32_t CopyCameraMetadataItems(common_metadata_header_t *newMetadata, const common_metadata_header_t *oldMetadata); - static size_t CalculateCameraMetadataItemDataSize(uint32_t type, size_t data_count); + static int32_t CalculateCameraMetadataItemDataSize(uint32_t type, size_t data_count); static int32_t GetCameraMetadataItemType(uint32_t item, uint32_t *data_type); static common_metadata_header_t *FillCameraMetadata(common_metadata_header_t *buffer, size_t memoryRequired, uint32_t itemCapacity, uint32_t dataCapacity); -- Gitee From ab15013f3c2083c0d80ab6bdd80eb382ab2a16bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E4=B8=B0?= Date: Wed, 18 Sep 2024 06:11:09 +0000 Subject: [PATCH 3/3] update camera/metadata/src/camera_metadata_info.cpp. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 刘丰 --- camera/metadata/src/camera_metadata_info.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/camera/metadata/src/camera_metadata_info.cpp b/camera/metadata/src/camera_metadata_info.cpp index 959d76cc..b5d8e3d6 100644 --- a/camera/metadata/src/camera_metadata_info.cpp +++ b/camera/metadata/src/camera_metadata_info.cpp @@ -732,6 +732,7 @@ int CameraMetadata::AddCameraMetadataItemVerify(common_metadata_header_t *dst, METADATA_ERR_LOG("AddCameraMetadataItemVerify invalid item type"); return CAM_META_INVALID_PARAM; } + if (*dataType < META_TYPE_BYTE || *dataType >= META_NUM_TYPES) { METADATA_ERR_LOG("AddCameraMetadataItemVerify invalid type"); return CAM_META_INVALID_PARAM -- Gitee