]> git.saurik.com Git - apple/security.git/blobdiff - OSX/libsecurity_keychain/lib/SecFDERecoveryAsymmetricCrypto.cpp
Security-59306.61.1.tar.gz
[apple/security.git] / OSX / libsecurity_keychain / lib / SecFDERecoveryAsymmetricCrypto.cpp
index 8d341bf2c3f671c567e4dc24ee3d8c361e4a4198..187ee9c801fca2b9d275c05c69485f3fea6a3a0a 100644 (file)
@@ -100,9 +100,13 @@ static void encodePrivateKeyHeader(const CssmData &inBlob, CFDataRef certificate
        passThrough(CSSM_APPLECSP_KEYDIGEST, NULL, &outData);
        CssmData *cssmData = reinterpret_cast<CssmData *>(outData);
        
        passThrough(CSSM_APPLECSP_KEYDIGEST, NULL, &outData);
        CssmData *cssmData = reinterpret_cast<CssmData *>(outData);
        
-       assert(cssmData->Length <= sizeof(outHeader.publicKeyHash));
        outHeader.publicKeyHashSize = (uint32_t)cssmData->Length;
        outHeader.publicKeyHashSize = (uint32_t)cssmData->Length;
-       memcpy(outHeader.publicKeyHash, cssmData->Data, cssmData->Length);
+       if (outHeader.publicKeyHashSize > sizeof(outHeader.publicKeyHash)) {
+               secinfo("FDERecovery", "encodePrivateKeyHeader: publicKeyHash too big: %d", outHeader.publicKeyHashSize);
+               outHeader.publicKeyHashSize = 0; /* failed to copy hash value */
+       } else {
+               memcpy(outHeader.publicKeyHash, cssmData->Data, outHeader.publicKeyHashSize);
+       }
        fCSP.allocator().free(cssmData->Data);
        fCSP.allocator().free(cssmData);
        
        fCSP.allocator().free(cssmData->Data);
        fCSP.allocator().free(cssmData);