Skip to content

[SR-6849] Data leaks on Linux in Swift 4.1 #3741

Closed
@Lukasa

Description

@Lukasa
Previous ID SR-6849
Radar rdar://problem/36905620
Original Reporter @Lukasa
Type Bug
Status Closed
Resolution Done
Environment

Ubuntu 16.04
Swift version 4.1-dev (LLVM 5b54bd1e96, Clang 03ed64977b, Swift 88a7a55e83)
Target: x86_64-unknown-linux-gnu

Additional Detail from JIRA
Votes 1
Component/s Foundation
Labels Bug
Assignee @phausler
Priority Medium

md5: 565e16afee84c6e52512f27cc992472d

Issue Description:

The following program fails under ASAN on Linux when using the Swift nightly from January 25:

import Foundation

for _ in 0..<10 {
        let data = Data(base64Encoded: "UE9TVCAvIEhUVFAvMS4wDQpDb250ZW50LUxlbmd0aDoNCg0K")!
}

The output is:

=================================================================
==7043==ERROR: LeakSanitizer: detected memory leaks

Direct leak of 360 byte(s) in 10 object(s) allocated from:
    #&#8203;0 0x556f77e99d63  (/home/cbenfield/test+0x9dd63)
    #&#8203;1 0x7ff2c57bbbb2  (/usr/local/swift/swift-4.1-DEVELOPMENT-SNAPSHOT-2018-01-25-a-ubuntu16.04/usr/lib/swift/linux/libFoundation.so+0x22fbb2)

SUMMARY: AddressSanitizer: 360 byte(s) leaked in 10 allocation(s).

If we want a more helpful stack we can disable ASAN and run under Valgrind:

==7078== 360 bytes in 10 blocks are definitely lost in loss record 15 of 19
==7078==    at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==7078==    by 0x553CBB2: _CFDataInit (in /usr/local/swift/swift-4.1-DEVELOPMENT-SNAPSHOT-2018-01-25-a-ubuntu16.04/usr/lib/swift/linux/libFoundation.so)
==7078==    by 0x56EB42A: function signature specialization <Arg[0] = Exploded> of Foundation.NSData.init(base64Encoded: Swift.String, options: Foundation.NSData.Base64DecodingOptions) -> Foundation.NSData? (in /usr/local/swift/swift-4.1-DEVELOPMENT-SNAPSHOT-2018-01-25-a-ubuntu16.04/usr/lib/swift/linux/libFoundation.so)
==7078==    by 0x56E2437: merged Foundation.NSData.__allocating_init(base64Encoded: Swift.String, options: Foundation.NSData.Base64DecodingOptions) -> Foundation.NSData? (in /usr/local/swift/swift-4.1-DEVELOPMENT-SNAPSHOT-2018-01-25-a-ubuntu16.04/usr/lib/swift/linux/libFoundation.so)
==7078==    by 0x56E239F: Foundation.NSData.__allocating_init(base64Encoded: Swift.String, options: Foundation.NSData.Base64DecodingOptions) -> Foundation.NSData? (in /usr/local/swift/swift-4.1-DEVELOPMENT-SNAPSHOT-2018-01-25-a-ubuntu16.04/usr/lib/swift/linux/libFoundation.so)
==7078==    by 0x59A6972: Foundation.Data.init(base64Encoded: Swift.String, options: Foundation.NSData.Base64DecodingOptions) -> Foundation.Data? (in /usr/local/swift/swift-4.1-DEVELOPMENT-SNAPSHOT-2018-01-25-a-ubuntu16.04/usr/lib/swift/linux/libFoundation.so)
==7078==    by 0x1090A2: main (in /home/cbenfield/test)
==7078==
==7078== LEAK SUMMARY:
==7078==    definitely lost: 360 bytes in 10 blocks

This just seems like it's a straightforward leak of CFData.

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions