diff --git a/plugins/common/libs/image/libjpegplugin/include/exif_info.h b/plugins/common/libs/image/libjpegplugin/include/exif_info.h index 803975886f17a6757793d6e3d71e825adaa822e0..fb1e9a1a22785da6b4641e372cb39e928a31c042 100644 --- a/plugins/common/libs/image/libjpegplugin/include/exif_info.h +++ b/plugins/common/libs/image/libjpegplugin/include/exif_info.h @@ -55,7 +55,7 @@ private: void SetExifTagValues(const ExifTag &tag, const std::string &value); ExifEntry* InitExifTag(ExifData *exif, ExifIfd ifd, ExifTag tag); ExifEntry* CreateExifTag(ExifData *exif, ExifIfd ifd, ExifTag tag, size_t len, ExifFormat format); - long GetFileSize(FILE *fp); + unsigned long GetFileSize(FILE *fp); void ReleaseSource(unsigned char **ptrBuf, FILE **ptrFile); bool CreateExifData(unsigned char *buf, unsigned long length, ExifData **data, bool &isNewExifData); unsigned int GetOrginExifDataLength(const bool &isNewExifData, unsigned char *buf); diff --git a/plugins/common/libs/image/libjpegplugin/src/exif_info.cpp b/plugins/common/libs/image/libjpegplugin/src/exif_info.cpp index dec4d62fc73c33833cf4e82dc0793d8089496883..780174b55b8b55bb2b0d34e680683bd7aa6e0937 100644 --- a/plugins/common/libs/image/libjpegplugin/src/exif_info.cpp +++ b/plugins/common/libs/image/libjpegplugin/src/exif_info.cpp @@ -38,7 +38,6 @@ namespace { static const int BUFFER_POSITION_13 = 13; static const int LENGTH_OFFSET_2 = 2; static const int MOVE_OFFSET_8 = 8; - static const int LENGTH_ARRAY_SIZE = 2; static const int CONSTANT_2 = 2; static const unsigned long MAX_FILE_SIZE = 1000 * 1000 * 1000; @@ -477,7 +476,7 @@ ExifEntry* EXIFInfo::CreateExifTag(ExifData *exif, ExifIfd ifd, ExifTag tag, return entry; } -long EXIFInfo::GetFileSize(FILE *fp) +unsigned long EXIFInfo::GetFileSize(FILE *fp) { long int position; long size; @@ -494,7 +493,7 @@ long EXIFInfo::GetFileSize(FILE *fp) /* Jump back to the original position. */ (void)fseek(fp, position, SEEK_SET); - return size; + return static_cast(size); } bool EXIFInfo::CreateExifData(unsigned char *buf, unsigned long length, ExifData **ptrData, bool &isNewExifData) @@ -531,10 +530,8 @@ unsigned int EXIFInfo::GetOrginExifDataLength(const bool &isNewExifData, unsigne { unsigned int orginExifDataLength = 0; if (!isNewExifData) { - unsigned char lenthArray[LENGTH_ARRAY_SIZE] = { - buf[BUFFER_POSITION_5], buf[BUFFER_POSITION_4] - }; - orginExifDataLength = *(unsigned int*)lenthArray; + orginExifDataLength = static_cast(buf[BUFFER_POSITION_5]) | + static_cast(buf[BUFFER_POSITION_4] << MOVE_OFFSET_8); } return orginExifDataLength; } @@ -558,6 +555,10 @@ bool EXIFInfo::CreateExifEntry(const ExifTag &tag, ExifData *data, const std::st switch (tag) { case EXIF_TAG_BITS_PER_SAMPLE: { *ptrEntry = InitExifTag(data, EXIF_IFD_1, EXIF_TAG_BITS_PER_SAMPLE); + if ((*ptrEntry) == nullptr) { + HiLog::Error(LABEL, "Get exif entry failed."); + return false; + } std::vector bitsVec; SplitStr(value, ",", bitsVec); if (bitsVec.size() > CONSTANT_2) { @@ -573,16 +574,28 @@ bool EXIFInfo::CreateExifEntry(const ExifTag &tag, ExifData *data, const std::st } case EXIF_TAG_ORIENTATION: { *ptrEntry = InitExifTag(data, EXIF_IFD_0, EXIF_TAG_ORIENTATION); + if ((*ptrEntry) == nullptr) { + HiLog::Error(LABEL, "Get exif entry failed."); + return false; + } exif_set_short((*ptrEntry)->data, order, (ExifShort)atoi(value.c_str())); break; } case EXIF_TAG_IMAGE_LENGTH: { *ptrEntry = InitExifTag(data, EXIF_IFD_1, EXIF_TAG_IMAGE_LENGTH); + if ((*ptrEntry) == nullptr) { + HiLog::Error(LABEL, "Get exif entry failed."); + return false; + } exif_set_long((*ptrEntry)->data, order, (ExifLong)atoi(value.c_str())); break; } case EXIF_TAG_IMAGE_WIDTH: { *ptrEntry = InitExifTag(data, EXIF_IFD_1, EXIF_TAG_IMAGE_WIDTH); + if ((*ptrEntry) == nullptr) { + HiLog::Error(LABEL, "Get exif entry failed."); + return false; + } exif_set_long((*ptrEntry)->data, order, (ExifLong)atoi(value.c_str())); break; } @@ -595,10 +608,14 @@ bool EXIFInfo::CreateExifEntry(const ExifTag &tag, ExifData *data, const std::st } ExifRational latRational; - latRational.numerator = atoi(latVec[0].c_str()); - latRational.denominator = atoi(latVec[1].c_str()); + latRational.numerator = static_cast(atoi(latVec[0].c_str())); + latRational.denominator = static_cast(atoi(latVec[1].c_str())); *ptrEntry = CreateExifTag(data, EXIF_IFD_GPS, EXIF_TAG_GPS_LATITUDE, sizeof(latRational), EXIF_FORMAT_RATIONAL); + if ((*ptrEntry) == nullptr) { + HiLog::Error(LABEL, "Get exif entry failed."); + return false; + } exif_set_rational((*ptrEntry)->data, order, latRational); break; } @@ -611,16 +628,24 @@ bool EXIFInfo::CreateExifEntry(const ExifTag &tag, ExifData *data, const std::st } ExifRational longRational; - longRational.numerator = atoi(longVec[0].c_str()); - longRational.denominator = atoi(longVec[1].c_str()); + longRational.numerator = static_cast(atoi(longVec[0].c_str())); + longRational.denominator = static_cast(atoi(longVec[1].c_str())); *ptrEntry = CreateExifTag(data, EXIF_IFD_GPS, EXIF_TAG_GPS_LONGITUDE, sizeof(longRational), EXIF_FORMAT_RATIONAL); + if ((*ptrEntry) == nullptr) { + HiLog::Error(LABEL, "Get exif entry failed."); + return false; + } exif_set_rational((*ptrEntry)->data, order, longRational); break; } case EXIF_TAG_GPS_LATITUDE_REF: { *ptrEntry = CreateExifTag(data, EXIF_IFD_GPS, EXIF_TAG_GPS_LATITUDE_REF, value.length(), EXIF_FORMAT_ASCII); + if ((*ptrEntry) == nullptr) { + HiLog::Error(LABEL, "Get exif entry failed."); + return false; + } if (memcpy_s((*ptrEntry)->data, value.length(), value.c_str(), value.length()) != 0) { HiLog::Error(LABEL, "LATITUDE ref memcpy error"); } @@ -629,6 +654,10 @@ bool EXIFInfo::CreateExifEntry(const ExifTag &tag, ExifData *data, const std::st case EXIF_TAG_GPS_LONGITUDE_REF: { *ptrEntry = CreateExifTag(data, EXIF_IFD_GPS, EXIF_TAG_GPS_LONGITUDE_REF, value.length(), EXIF_FORMAT_ASCII); + if ((*ptrEntry) == nullptr) { + HiLog::Error(LABEL, "Get exif entry failed."); + return false; + } if (memcpy_s((*ptrEntry)->data, value.length(), value.c_str(), value.length()) != 0) { HiLog::Error(LABEL, "LONGITUDE ref memcpy error"); }