[swift-corelibs-dev] Encountering "Constant strings cannot be deallocated" in Linux foundation

Brandon Williams mbw234 at gmail.com
Wed Nov 29 21:55:28 CST 2017


Hey Tony,

We were able to fix our crashes by avoiding our uses of `URLQueryItem`s. In
one place I had to completely remove the use of `URLQueryItem`:

https://github.com/pointfreeco/swift-web/pull/79/files#diff-293b73a926ba418bd9511ef735fc947cL147

And in another my colleague Stephen Celis discovered that duplicate keys in
a query string can cause this to crash:

https://github.com/pointfreeco/swift-web/pull/80

He was able to come up with a minimal test case to demonstrate this:

https://github.com/pointfreeco/swift-web/commit/cfa9b519a829f1c1627620521326f0877c2d023a

And you can see the failure in this Travis CI report:

https://travis-ci.org/pointfreeco/swift-web/builds/309316418
<https://travis-ci.org/pointfreeco/swift-web/builds/309316418?utm_source=email&utm_medium=notification>

At the bottom you’ll find:

```fatal error: Constant strings cannot be deallocated: file
Foundation/NSCFString.swift, line 118```

So definitely seems to be in that area!

Now, as far as rebuilding swift-corelibs-foundation, I’m down to try but I
dont really know much about how to do that. With some instructions I could
give it a shot.

Thanks for the help!




On Wed, Nov 29, 2017 at 5:59 PM Tony Parker <anthony.parker at apple.com>
wrote:

> I see a couple of places that are suspicious there:
>
> Description:
>
>
> https://github.com/apple/swift-corelibs-foundation/blob/master/CoreFoundation/URL.subproj/CFURLComponents.c#L66
>
> And the nameString / valueString constants in the copy query items
> function:
>
>
> https://github.com/apple/swift-corelibs-foundation/blob/master/CoreFoundation/URL.subproj/CFURLComponents.c#L1057
>
> https://github.com/apple/swift-corelibs-foundation/blob/master/CoreFoundation/URL.subproj/CFURLComponents.c#L1079
>
> https://github.com/apple/swift-corelibs-foundation/blob/master/CoreFoundation/URL.subproj/CFURLComponents.c#L1104
>
> https://github.com/apple/swift-corelibs-foundation/blob/master/CoreFoundation/URL.subproj/CFURLComponents.c#L1134
>
> https://github.com/apple/swift-corelibs-foundation/blob/master/CoreFoundation/URL.subproj/CFURLComponents.c#L1158
>
> Do you have the ability to re-build swift-corelibs-foundation and run a
> test? I suspect if you replace those with CFRetain(CFSTR(…)) then it will
> fix your crash.
>
> - Tony
>
>
> On Nov 29, 2017, at 2:06 PM, Brandon Williams <mbw234 at gmail.com> wrote:
>
> Thanks for the info!
>
> FWIW, most of the places I have encountered this so far have made use of
> `URLComponents`, and have even been able to eliminate the crash by getting
> rid of that code in a few places. The other JIRA bug on this topic also
> mentions URLComponents in their repro case. Seems to be the culprit.
>
> Also worth noting that in the above cases dealing with URLComponents the
> crash only happens in DEBUG compilations, not RELEASE.
>
> However, I do have another one of these crashes that _does_ happen on
> RELEASE builds that I haven’t yet been able to reduce.
>
>
> On Wed, Nov 29, 2017 at 4:43 PM Tony Parker <anthony.parker at apple.com>
> wrote:
>
>> Hi Brandon,
>>
>> This is probably a bug in the CoreFoundation C sources part of
>> swift-corelibs-foundation. Unlike Darwin platforms, we can’t make the
>> CFSTR(“”) macro produce a CFStringRef that cannot be overreleased. Probably
>> there is a constant string returned from CF function, then the Swift
>> runtime assumes it can release it, and bam we wind up with an overrelease.
>>
>> We’ll have to track down which function is getting called, which probably
>> just requires stepping through that test case with a debugger…
>>
>> - Tony
>>
>> On Nov 29, 2017, at 1:34 PM, Brandon Williams via swift-corelibs-dev <
>> swift-corelibs-dev at swift.org> wrote:
>>
>> Hello all!
>>
>> We’ve been encountering this runtime error quite a bit recently, and we
>> have no idea why. We’ve filed a bug and there’s one other on JIRA related
>> to this, but both without any comments:
>>
>> https://bugs.swift.org/browse/SR-6422
>> https://bugs.swift.org/browse/SR-6398
>>
>> We’re curious if others are aware of this and or has more info? Is it a
>> red herring for some other problem?
>>
>> Any info would be helpful!
>>
>> _______________________________________________
>> swift-corelibs-dev mailing list
>> swift-corelibs-dev at swift.org
>> https://lists.swift.org/mailman/listinfo/swift-corelibs-dev
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-corelibs-dev/attachments/20171130/82409606/attachment.html>


More information about the swift-corelibs-dev mailing list