diff --git a/camera/metadata/src/camera_metadata_info.cpp b/camera/metadata/src/camera_metadata_info.cpp index 08f249c43adfaadbd477f19742b7d911aa03a8d3..20be5a3f091ad01fad295f11d6815361f9194cfb 100644 --- a/camera/metadata/src/camera_metadata_info.cpp +++ b/camera/metadata/src/camera_metadata_info.cpp @@ -940,21 +940,18 @@ int CameraMetadata::copyMetadataMemory(common_metadata_header_t *dst, camera_met int CameraMetadata::UpdateameraMetadataItemSize(camera_metadata_item_entry_t *item, uint32_t dataCount, common_metadata_header_t *dst, const void *data) { - if (item == nullptr) { - METADATA_ERR_LOG("UpdateameraMetadataItemSize item is null"); + if (item == nullptr || dst == nullptr) { + METADATA_ERR_LOG("UpdateameraMetadataItemSize item is null or dst is null"); return CAM_META_FAILURE; - } else if (item->data_type < META_TYPE_BYTE || item->data_type >= META_NUM_TYPES) { - METADATA_ERR_LOG("UpdateameraMetadataItemSize invalid datatype:%{public}d", item->data_type); + } else if (item->data_type < META_TYPE_BYTE || item->data_type >= META_NUM_TYPES || + item->data.offset > dst->item_count * OHOS_CAMERA_METADATA_TYPE_SIZE[item->data_type]) { + METADATA_ERR_LOG("UpdateameraMetadataItemSize invalid item"); return CAM_META_FAILURE; } size_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 ret = CAM_META_SUCCESS; - if (item == nullptr || dst == nullptr) { - METADATA_ERR_LOG("UpdateameraMetadataItemSize item is null or dst is null"); - return CAM_META_FAILURE; - } if (dataSize != oldItemSize) { if (dst->data_capacity < (dst->data_count + dataSize - oldItemSize)) { METADATA_ERR_LOG("UpdateCameraMetadataItemByIndex data_capacity limit reached");