From bafd06dfd0b78b7797a02ba09201a289aa79bcb4 Mon Sep 17 00:00:00 2001 From: Mamatha Busi Date: Thu, 22 Feb 2018 14:23:15 +0530 Subject: [PATCH] Fix for SR-6849 Data leak in NSData --- CoreFoundation/Collections.subproj/CFData.c | 3 ++- Foundation/NSData.swift | 9 ++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/CoreFoundation/Collections.subproj/CFData.c b/CoreFoundation/Collections.subproj/CFData.c index c735a3845c..54620d3f27 100644 --- a/CoreFoundation/Collections.subproj/CFData.c +++ b/CoreFoundation/Collections.subproj/CFData.c @@ -330,10 +330,11 @@ CFTypeID CFDataGetTypeID(void) { void _CFDataInit(CFMutableDataRef memory, CFOptionFlags variety, CFIndex capacity, const uint8_t *bytes, CFIndex length, Boolean noCopy) { Boolean isMutable = ((variety & __kCFMutableMask) != 0); Boolean isGrowable = ((variety & __kCFGrowableMask) != 0); + Boolean isDontDeallocate = ((variety & __kCFDontDeallocate) != 0); __CFDataSetNumBytesUsed(memory, 0); __CFDataSetLength(memory, 0); - __CFDataSetDontDeallocate(memory, true); + __CFDataSetDontDeallocate(memory, isDontDeallocate); if (isMutable && isGrowable) { __CFDataSetCapacity(memory, __CFDataRoundUpCapacity(1)); diff --git a/Foundation/NSData.swift b/Foundation/NSData.swift index 387245b79d..1e57866596 100644 --- a/Foundation/NSData.swift +++ b/Foundation/NSData.swift @@ -69,11 +69,10 @@ private final class _NSDataDeallocator { private let __kCFMutable: CFOptionFlags = 0x01 private let __kCFGrowable: CFOptionFlags = 0x02 -private let __kCFMutableVarietyMask: CFOptionFlags = 0x03 -private let __kCFBytesInline: CFOptionFlags = 0x04 -private let __kCFUseAllocator: CFOptionFlags = 0x08 -private let __kCFDontDeallocate: CFOptionFlags = 0x10 -private let __kCFAllocatesCollectable: CFOptionFlags = 0x20 + +private let __kCFBytesInline: CFOptionFlags = 2 +private let __kCFUseAllocator: CFOptionFlags = 3 +private let __kCFDontDeallocate: CFOptionFlags = 4 open class NSData : NSObject, NSCopying, NSMutableCopying, NSSecureCoding { typealias CFType = CFData