행복한 세상의 니노

[Xcode #2] 누수찾기 AES256DecryptWithKey 본문

카테고리 없음

[Xcode #2] 누수찾기 AES256DecryptWithKey

니노z 2023. 7. 13. 11:15

누수란? 메모리가 해제되지않는것도  누수라고한다.

 

똑같은 시간을 비교해봣을때 메모리 증가가 여기는 1.6GiB

 

여기는 1.55GIB 조끔은 나아졋음을 확인했다.

 

 

이 부분의 문제점은 

+ (NSData *)AES256DecryptWithKey:(uint8_t *)key iv:(uint8_t *)iv data:(uint8_t *)data dataSize:(int)size {
    size_t bufferSize = size + kCCBlockSizeAES128;
    void *buffer = malloc(bufferSize);
    size_t decryptedSize = 0;
    CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt,
                                          kCCAlgorithmAES,
//                                          kCCOptionPKCS7Padding + kCCOptionECBMode,   // ecb mode
                                          kCCOptionPKCS7Padding,    // cbc mode
                                          key, kCCKeySizeAES256,    // key
                                          iv,                       // initialization vector (optional)
                                          data, size,               // input
                                          buffer, bufferSize,       // output
                                          &decryptedSize);
    if (cryptStatus == kCCSuccess) {
//        return NSData dataWithBytesNoCopy:buffer length:decryptedSize];
return [[NSData alloc] initWithData:[NSData dataWithBytesNoCopy:buffer length:decryptedSize]];
    }
   
    free(buffer);
    return nil;
}

이렇게 바꿔서 처리했다.

 

이렇게 처리했더니 누수가 또 생겼다.

 

+ (NSData *)AES256DecryptWithKey:(uint8_t *)key iv:(uint8_t *)iv data:(uint8_t *)data dataSize:(int)size {
    size_t bufferSize = size + kCCBlockSizeAES128;
    void *buffer = malloc(bufferSize);
    size_t decryptedSize = 0;
    NSData *decrypted = [[NSData alloc] init];
    CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt,
                                          kCCAlgorithmAES,
//                                          kCCOptionPKCS7Padding + kCCOptionECBMode,   // ecb mode
                                          kCCOptionPKCS7Padding,    // cbc mode
                                          key, kCCKeySizeAES256,    // key
                                          iv,                       // initialization vector (optional)
                                          data, size,               // input
                                          buffer, bufferSize,       // output
                                          &decryptedSize);
    if (cryptStatus == kCCSuccess) {
        decrypted = [NSData dataWithBytes:buffer length:decryptedSize];
        free(buffer);
        return decrypted;
    }
   
    free(buffer);
    return nil;
}

이렇게 처리하니가 누수 발생 안하고 누수도 줄었다.. 

 

반응형