Fix ResultParcelable to handle null char pointer
[platform/core/appfw/pkgmgr-info.git] / src / common / request_handler / set_cert_request_handler.cc
1 // Copyright (c) 2021 Samsung Electronics Co., Ltd All Rights Reserved
2 // Use of this source code is governed by an apache-2.0 license that can be
3 // found in the LICENSE file.
4
5 #include "set_cert_request_handler.hh"
6
7 #include <string>
8
9 #include "certinfo_parcelable.hh"
10 #include "cert_set_db_handler.hh"
11 #include "parcelable_factory.hh"
12
13 #include "pkgmgrinfo_debug.h"
14
15 namespace pcp = pkgmgr_common::parcel;
16 namespace pcd = pkgmgr_common::database;
17
18 namespace pkgmgr_server {
19 namespace request_handler {
20
21 bool SetCertRequestHandler::HandleRequest(unsigned char* data, int size,
22                                           const std::string& locale) {
23   auto abstract_parcel =
24       pcp::ParcelableFactory::GetInst().CreateParcel(data, size);
25
26   if (abstract_parcel == nullptr ||
27       abstract_parcel->GetType() != pcp::ParcelableType::CertInfo) {
28     _LOGE("Invalid parcel");
29     result_ = std::make_shared<pcp::ResultParcelable>(
30         PMINFO_R_ERROR, std::vector<pcp::StrArgs>{});
31     return false;
32   }
33
34   auto* parcel = dynamic_cast<pcp::CertInfoParcelable*>(abstract_parcel.get());
35   if (parcel == nullptr) {
36     _LOGE("Parcel is empty");
37     result_ = std::make_shared<pcp::ResultParcelable>(
38         PMINFO_R_ERROR, std::vector<pcp::StrArgs>{});
39     return false;
40   }
41
42   pcd::CertSetDBHandler db(parcel->GetUid(), GetPID());
43   db.SetLocale(locale);
44   db.SetCertHandle(const_cast<pkgmgr_certinfo_x*>(parcel->GetCertInfo()));
45
46   int ret = db.Execute();
47   result_ = std::make_shared<pcp::ResultParcelable>(
48       ret, std::vector<pcp::StrArgs>{});
49
50   return true;
51 }
52
53 std::vector<uint8_t> SetCertRequestHandler::ExtractResult() {
54   tizen_base::Parcel parcel;
55
56   parcel.WriteParcelable(*result_);
57   std::vector<uint8_t> raw = parcel.GetRaw();
58
59   result_.reset();
60
61   return raw;
62 }
63
64 }  // namespace request_handler
65 }  // namespace pkgmgr_server