Skip to content

Commit fe27a18

Browse files
committed
Adding a static_assert to cf_ref and better initializing uses.
1 parent abc9cf0 commit fe27a18

File tree

1 file changed

+8
-9
lines changed

1 file changed

+8
-9
lines changed

Release/src/http/client/x509_cert_utilities.cpp

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,10 @@ template <typename T>
4747
class cf_ref
4848
{
4949
public:
50-
cf_ref(T v) : value(v) {}
50+
cf_ref(T v) : value(v)
51+
{
52+
static_assert(sizeof(cf_ref<T>) == sizeof(T), "Code assumes just a wrapper, see usage in CFArrayCreate below.");
53+
}
5154
cf_ref() : value(nullptr) {}
5255
cf_ref(cf_ref &&other) : value(other.value) { other.value = nullptr; }
5356

@@ -77,8 +80,7 @@ bool verify_X509_cert_chain(const std::vector<std::string> &certChain, const std
7780
std::vector<cf_ref<SecCertificateRef>> certs;
7881
for(const auto & certBuf : certChain)
7982
{
80-
cf_ref<CFDataRef> certDataRef;
81-
certDataRef.get() = CFDataCreateWithBytesNoCopy(kCFAllocatorDefault,
83+
cf_ref<CFDataRef> certDataRef = CFDataCreateWithBytesNoCopy(kCFAllocatorDefault,
8284
reinterpret_cast<const unsigned char*>(certBuf.c_str()),
8385
certBuf.size(),
8486
kCFAllocatorNull);
@@ -94,8 +96,7 @@ bool verify_X509_cert_chain(const std::vector<std::string> &certChain, const std
9496
}
9597
certs.push_back(std::move(certObj));
9698
}
97-
cf_ref<CFArrayRef> certsArray;
98-
certsArray.get() = CFArrayCreate(kCFAllocatorDefault, const_cast<const void **>(reinterpret_cast<void **>(&certs[0])), certs.size(), nullptr);
99+
cf_ref<CFArrayRef> certsArray = CFArrayCreate(kCFAllocatorDefault, const_cast<const void **>(reinterpret_cast<void **>(&certs[0])), certs.size(), nullptr);
99100
if(certsArray.get() == nullptr)
100101
{
101102
return false;
@@ -104,17 +105,15 @@ bool verify_X509_cert_chain(const std::vector<std::string> &certChain, const std
104105
// Create trust management object with certificates and SSL policy.
105106
// Note: SecTrustCreateWithCertificates expects the certificate to be
106107
// verified is the first element.
107-
cf_ref<CFStringRef> cfHostName;
108-
cfHostName.get() = CFStringCreateWithCStringNoCopy(kCFAllocatorDefault,
108+
cf_ref<CFStringRef> cfHostName = CFStringCreateWithCStringNoCopy(kCFAllocatorDefault,
109109
hostName.c_str(),
110110
kCFStringEncodingASCII,
111111
kCFAllocatorNull);
112112
if(cfHostName.get() == nullptr)
113113
{
114114
return false;
115115
}
116-
cf_ref<SecPolicyRef> policy;
117-
policy.get() = SecPolicyCreateSSL(true /* client side */, cfHostName.get());
116+
cf_ref<SecPolicyRef> policy = SecPolicyCreateSSL(true /* client side */, cfHostName.get());
118117
cf_ref<SecTrustRef> trust;
119118
OSStatus status = SecTrustCreateWithCertificates(certsArray.get(), policy.get(), &trust.get());
120119
if(status == noErr)

0 commit comments

Comments
 (0)