Fix SVACE defect 28/313528/25
authorPhan Xuan Tan <xuan.tan@samsung.com>
Thu, 27 Jun 2024 10:25:44 +0000 (17:25 +0700)
committerDariusz Michaluk <d.michaluk@samsung.com>
Wed, 3 Jul 2024 08:46:59 +0000 (08:46 +0000)
Change-Id: Ic2824b155d1192b840b69e9b6ee19d739bc661d6

examples/signature-validator-since-4.0.cpp
examples/signature-validator-until-3.0.cpp
tests/dpl/src/binary_queue.cpp

index 4351bfe580814832bc6c2eb1b4f5b7b9bd3d2135..8c4050fd00869365b8d5f3bd37140327b1f0f7a2 100644 (file)
@@ -19,6 +19,7 @@
  * @version     1.0
  * @brief       Signature Validator example (Tizen_4.0 ~ )
  */
+
 #include <string>
 #include <iostream>
 
@@ -28,72 +29,72 @@ const std::string PKG_PATH(CERT_SVC_EXAMPLES "/resource/player");
 
 int main()
 {
-       // Step 1. Validate signature files.
-       ValidationCore::SignatureValidator validator(PKG_PATH);
-       ValidationCore::SignatureDataMap sigDataMap;
-       ValidationCore::VCerr result = validator.checkAll(true, // OCSP
-                                                                                                         true, // reverse reference check
-                                                                                                         sigDataMap);
-       /*
-               If you want to validate specific files, use checkListAll().
+       try {
+               // Step 1. Validate signature files.
+               ValidationCore::SignatureValidator validator(PKG_PATH);
+               ValidationCore::SignatureDataMap sigDataMap;
+               ValidationCore::VCerr result = validator.checkAll(true, true, sigDataMap);
+               /*
+                       If you want to validate specific files, use checkListAll().
 
-               ex) UriList uriList;
-                       uriList.emplace_back("author-siganture.xml");
-                       uriList.emplace_back("res/res.xml");
-                       uriList.emplace_back("shared/res/preference.png");
-                       uriList.emplace_back("tizen-manifest.xml");
+                       ex) UriList uriList;
+                               uriList.emplace_back("author-siganture.xml");
+                               uriList.emplace_back("res/res.xml");
+                               uriList.emplace_back("shared/res/preference.png");
+                               uriList.emplace_back("tizen-manifest.xml");
 
-                       validator.checkListAll(true, // OCSP
-                                                                  uriList,
-                                                                  data);
-       */
+                               validator.checkListAll(true, // OCSP
+                                                                          uriList,
+                                                                          data);
+               */
 
-       switch (result) {
-       case ValidationCore::E_SIG_DISREGARDED:
-               std::cout << "This signature is disregarded." << std::endl;
-               break;
+               switch (result) {
+               case ValidationCore::E_SIG_DISREGARDED:
+                       std::cout << "This signature is disregarded." << std::endl;
+                       break;
 
-       case ValidationCore::E_SIG_NONE:
-               std::cout << "Success to validate signature." << std::endl;
-               break;
+               case ValidationCore::E_SIG_NONE:
+                       std::cout << "Success to validate signature." << std::endl;
+                       break;
 
-       default:
-               std::cout << "Failed to validate signature : "
-                                 << validator.errorToString(result) << std::endl;
-               return -1;
-       }
+               default:
+                       std::cout << "Failed to validate signature : " << validator.errorToString(result) << std::endl;
+                       return -1;
+               }
+
+               // Step 2. Get certificate list from signature.
+               auto authorSigData = sigDataMap[ValidationCore::SignatureType::AUTHOR];
+               for (const auto &certPtr : authorSigData.getCertList())
+                       std::cout << "Author certificate > " << certPtr->getBase64() << std::endl;
 
-       // Step 2. Get certificate list from signature.
-       auto authorSigData = sigDataMap[ValidationCore::SignatureType::AUTHOR];
-       for (const auto &certPtr : authorSigData.getCertList())
-               std::cout << "Author certificate > "
-                                 << certPtr->getBase64() << std::endl;
+               auto dist1SigData = sigDataMap[ValidationCore::SignatureType::DISTRIBUTOR1];
+               for (const auto &certPtr : dist1SigData.getCertList())
+                       std::cout << "Distributor1 certificate > " << certPtr->getBase64() << std::endl;
 
-       auto dist1SigData = sigDataMap[ValidationCore::SignatureType::DISTRIBUTOR1];
-       for (const auto &certPtr : dist1SigData.getCertList())
-               std::cout << "Distributor1 certificate > "
-                                 << certPtr->getBase64() << std::endl;
+               auto dist2SigData = sigDataMap[ValidationCore::SignatureType::DISTRIBUTOR2];
+               for (const auto &certPtr : dist2SigData.getCertList())
+                       std::cout << "Distributor2 certificate > " << certPtr->getBase64() << std::endl;
 
-       auto dist2SigData = sigDataMap[ValidationCore::SignatureType::DISTRIBUTOR2];
-       for (const auto &certPtr : dist2SigData.getCertList())
-               std::cout << "Distributor2 certificate > "
-                                 << certPtr->getBase64() << std::endl;
+               // Step 3. Check visibility about distributor1.
+               switch (dist1SigData.getVisibilityLevel()) {
+               case ValidationCore::CertStoreId::VIS_PUBLIC:
+                       std::cout << "This signature has public visibility." << std::endl;
+                       break;
+               case ValidationCore::CertStoreId::VIS_PARTNER:
+                       std::cout << "This signature has partner visibility." << std::endl;
+                       break;
+               case ValidationCore::CertStoreId::VIS_PLATFORM:
+                       std::cout << "This signature has platform visibility." << std::endl;
+                       break;
+               default:
+                       std::cout << "Failed to get proper visibility." << std::endl;
+                       return -1;
+               }
 
-       // Step 3. Check visibility about distributor1.
-       switch (dist1SigData.getVisibilityLevel()) {
-       case ValidationCore::CertStoreId::VIS_PUBLIC:
-               std::cout << "This signature has public visibility." << std::endl;
-               break;
-       case ValidationCore::CertStoreId::VIS_PARTNER:
-               std::cout << "This signature has partner visibility." << std::endl;
-               break;
-       case ValidationCore::CertStoreId::VIS_PLATFORM:
-               std::cout << "This signature has platform visibility." << std::endl;
-               break;
-       default:
-               std::cout << "Failed to get proper visibility." << std::endl;
+       } catch(...) {
+               std::cout << "Exception in Certificate getBase64" << std::endl;
                return -1;
        }
 
        return 0;
-}
+}
\ No newline at end of file
index 8db28d4a33b61fe0db339ec280deff09cd755e30..db6af379aecfda7ab4b5fe43c1328514c7c71fa5 100644 (file)
@@ -19,6 +19,7 @@
  * @version     1.0
  * @brief       Signature Validator example (~ Tizen_3.0)
  */
+
 #include <string>
 #include <iostream>
 
@@ -28,74 +29,75 @@ const std::string PKG_PATH(CERT_SVC_EXAMPLES "/resource/player");
 
 int main()
 {
-       // Step 1. Find signature files in package.
-       ValidationCore::SignatureFileInfoSet signatureSet;
-       ValidationCore::SignatureFinder finder(PKG_PATH);
-       if (ValidationCore::SignatureFinder::NO_ERROR != finder.find(signatureSet)) {
-               std::cout << "Failed to find signature." << std::endl;
-               return -1;
-       }
-
-       // Step 2. Validate signature files.
-       for (const auto &signature : signatureSet) {
-               ValidationCore::SignatureValidator validator(signature);
-               ValidationCore::SignatureData data;
-               ValidationCore::VCerr result = validator.check(PKG_PATH,
-                                                                                                          true, // OCSP
-                                                                                                          true, // reverse reference check
-                                                                                                          data);
-               /*
-                       If you want to validate specific files, use checkList().
-
-                       ex) UriList uriList;
-                               uriList.emplace_back("author-siganture.xml");
-                               uriList.emplace_back("res/res.xml");
-                               uriList.emplace_back("shared/res/preference.png");
-                               uriList.emplace_back("tizen-manifest.xml");
+       try {
+               // Step 1. Find signature files in package.
+               ValidationCore::SignatureFileInfoSet signatureSet;
+               ValidationCore::SignatureFinder finder(PKG_PATH);
+               if (ValidationCore::SignatureFinder::NO_ERROR != finder.find(signatureSet)) {
+                       std::cout << "Failed to find signature." << std::endl;
+                       return -1;
+               }
 
-                               validator.checkList(true, // OCSP
-                                                                       uriList,
-                                                                       data);
-               */
+               // Step 2. Validate signature files.
+               for (const auto &signature : signatureSet) {
+                       ValidationCore::SignatureValidator validator(signature);
+                       ValidationCore::SignatureData data;
+                       ValidationCore::VCerr result = validator.check(PKG_PATH, true, true, data);
+                       /*
+                               If you want to validate specific files, use checkList().
 
-               std::cout << "Start to validate : "
-                                 << data.getSignatureFileName() << std::endl;
+                               ex) UriList uriList;
+                                       uriList.emplace_back("author-siganture.xml");
+                                       uriList.emplace_back("res/res.xml");
+                                       uriList.emplace_back("shared/res/preference.png");
+                                       uriList.emplace_back("tizen-manifest.xml");
 
-               switch (result) {
-               case ValidationCore::E_SIG_DISREGARDED:
-                       std::cout << "This signature is disregarded." << std::endl;
-                       break;
+                                       validator.checkList(true, // OCSP
+                                                                               uriList,
+                                                                               data);
+                       */
 
-               case ValidationCore::E_SIG_NONE:
-                       std::cout << "Success to validate signature." << std::endl;
-                       // Step 3. Get certificate list from signature.
-                       for (const auto &certPtr : data.getCertList())
-                               std::cout << certPtr->getBase64() << std::endl;
-                       break;
+                       std::cout << "Start to validate : " << data.getSignatureFileName() << std::endl;
 
-               default:
-                       std::cout << "Failed to validate signature : "
-                                         << validator.errorToString(result) << std::endl;
-                       return -1;
-               }
-
-               // Step 4. Check visibility about distributor1.
-               if (!data.isAuthorSignature() && data.getSignatureNumber() == 1) {
-                       switch (data.getVisibilityLevel()) {
-                       case ValidationCore::CertStoreId::VIS_PUBLIC:
-                               std::cout << "This signature has public visibility." << std::endl;
-                               break;
-                       case ValidationCore::CertStoreId::VIS_PARTNER:
-                               std::cout << "This signature has partner visibility." << std::endl;
+                       switch (result) {
+                       case ValidationCore::E_SIG_DISREGARDED:
+                               std::cout << "This signature is disregarded." << std::endl;
                                break;
-                       case ValidationCore::CertStoreId::VIS_PLATFORM:
-                               std::cout << "This signature has platform visibility." << std::endl;
+
+                       case ValidationCore::E_SIG_NONE:
+                               std::cout << "Success to validate signature." << std::endl;
+                               // Step 3. Get certificate list from signature.
+                               for (const auto &certPtr : data.getCertList())
+                                       std::cout << certPtr->getBase64() << std::endl;
                                break;
+
                        default:
-                               std::cout << "Failed to get proper visibility." << std::endl;
+                               std::cout << "Failed to validate signature : " << validator.errorToString(result) << std::endl;
                                return -1;
                        }
+
+                       // Step 4. Check visibility about distributor1.
+                       if (!data.isAuthorSignature() && data.getSignatureNumber() == 1) {
+                               switch (data.getVisibilityLevel()) {
+                               case ValidationCore::CertStoreId::VIS_PUBLIC:
+                                       std::cout << "This signature has public visibility." << std::endl;
+                                       break;
+                               case ValidationCore::CertStoreId::VIS_PARTNER:
+                                       std::cout << "This signature has partner visibility." << std::endl;
+                                       break;
+                               case ValidationCore::CertStoreId::VIS_PLATFORM:
+                                       std::cout << "This signature has platform visibility." << std::endl;
+                                       break;
+                               default:
+                                       std::cout << "Failed to get proper visibility." << std::endl;
+                                       return -1;
+                               }
+                       }
                }
+
+       } catch(...) {
+               std::cout << "Exception in Certificate getBase64" << std::endl;
+               return -1;
        }
 
        return 0;
index 953f045d6da96ea06ddba810195a2ea5a6ecf948..d14c5d86ce58b8f35f861efdd18b77c6bebe79aa 100644 (file)
@@ -69,7 +69,8 @@ void BinaryQueue::AppendCopyFrom(const BinaryQueue &other)
                AppendUnmanaged(bufferCopy, other.m_size, &BufferDeleterFree, NULL);
        } catch (const std::bad_alloc &) {
                // Free allocated memory
-               free(bufferCopy);
+               if (other.m_size != 0)
+                       free(bufferCopy);
                throw;
        }
 }
@@ -120,7 +121,8 @@ void BinaryQueue::AppendCopy(const void *buffer, size_t bufferSize)
                AppendUnmanaged(bufferCopy, bufferSize, &BufferDeleterFree, NULL);
        } catch (const std::bad_alloc &) {
                // Free allocated memory
-               free(bufferCopy);
+               if (bufferSize != 0)
+                       free(bufferCopy);
                throw;
        }
 }