Fix svace defects
[platform/core/security/drm-service-core-tizen.git] / tadcore / Svc / DrmTdcSvc.cpp
index f1e7bee..e95779e 100644 (file)
@@ -182,11 +182,22 @@ bool DrmTdcDecryptPackage(const char *pTADCFilepath, const char *pLicenseBuf,
        }
 
        fseek(hFile1, 0, SEEK_END);
-       auto size1 = ftell(hFile1);
+       auto size1 = static_cast<long long>(ftell(hFile1));
 
        auto offset = t_FileHeader.Offset1 + 35 + t_DRMHeader.XmlSize;
        fseek(hFile1, offset, SEEK_SET);
 
+       if (size1 < offset) {
+               DRM_TAPPS_EXCEPTION("Invalid offset... offset is bigger than file size");
+               fclose(hFile1);
+               fclose(hFile2);
+               TADC_MEMFree_FileHeader(&t_FileHeader);
+               TADC_MEMFree_DRMHeader(&t_DRMHeader);
+               TADC_MEMFree_RO(&t_RO);
+               TADC_IF_Free(pReadBuf);
+               return FALSE;
+       }
+
        auto size2 = size1 - offset; //plain file size
        auto BlockCnt = (size2 / 512) + ((size2 % 512) ? 1 : 0);
 
@@ -309,11 +320,21 @@ bool DrmTdcDecryptPackage2(const char *pTADCFilepath, T_RO t_RO,
        }
 
        fseek(hFile1, 0, SEEK_END);
-       auto size1 = ftell(hFile1);
+       auto size1 = static_cast<long long>(ftell(hFile1));
 
        auto offset = t_FileHeader.Offset1 + 35 + t_DRMHeader.XmlSize;
        fseek(hFile1, offset, SEEK_SET);
 
+       if (size1 < offset) {
+               DRM_TAPPS_EXCEPTION("Invalid offset... offset is bigger than file size");
+               fclose(hFile1);
+               fclose(hFile2);
+               TADC_MEMFree_FileHeader(&t_FileHeader);
+               TADC_MEMFree_DRMHeader(&t_DRMHeader);
+               TADC_IF_Free(pReadBuf);
+               return FALSE;
+       }
+
        auto size2 = size1 - offset; //plain file size
        auto BlockCnt = (size2 / 512) + ((size2 % 512) ? 1 : 0);