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:
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…
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:
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.
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…
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:
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@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.
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…
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:
```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.
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@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.
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…
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:
I think that perhaps we have a problem with the retain count flags in the definition of CFSTR. Previously the pinned reference would prevent the deallocation. This may have gotten clobbered with the latest CF import.
```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@apple.com> wrote:
I see a couple of places that are suspicious there:
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@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.
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…
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:
On Nov 29, 2017, at 8:31 PM, Philippe Hausler <phausler@apple.com> wrote:
I think that perhaps we have a problem with the retain count flags in the definition of CFSTR. Previously the pinned reference would prevent the deallocation. This may have gotten clobbered with the latest CF import.
```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.
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.
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.
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…
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: