Skip to content

Fixed infinite recursion in NSCharacterSet.isEqual #1092

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jul 9, 2017

Conversation

bubski
Copy link
Contributor

@bubski bubski commented Jun 30, 2017

CFEqual for CFCharacterSet would call NSCharacteSet.isEqual which would again call CFEqual and so on.

@@ -50,13 +50,18 @@ open class NSCharacterSet : NSObject, NSCopying, NSMutableCopying, NSCoding {
}

open override func isEqual(_ value: Any?) -> Bool {
guard let runtimeClass = _CFRuntimeGetClassWithTypeID(CFCharacterSetGetTypeID()) else {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is rather sub-optimal of a way to approach the type testing

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@phausler Could you please explain a bit more? Isn't this what CFEqual does under the hood?

I'm open for suggestions.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yea, but the problem is that it is reaching into CF internals pretty heavily - I have a patch in the works that will resolve this (and passes your unit test) without needing to reach into CF guts so much. This is going the opposite direction of the factory version of NSCharacterSet (which generalizes this method without needing to reach into CF internals)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@phausler I assumed it was good enough because I didn't need to expose anything from CF.
I also noticed you were working around this area and expected your changed would address this as well, but was not sure if and when.

When do you expect to have those in?
And do you suggest dropping this PR?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In this branch I am working in I have those tests enabled as well (and they are passing). I have a few more things to wrap up before pushing that as an addendum to the factory_generalizations. (it isn't ready for pushing yet since I am working on getting a few more goodies published as well)

@phausler
Copy link
Contributor

phausler commented Jul 9, 2017

hmm it looks like my pr is going to take a bit to get all the new bits approved - so lets go ahead and merge this for now since it is blocking testing of Codable to be ported.

My new stuff will refactor the implementation but I will make certain your tests are included.

@phausler
Copy link
Contributor

phausler commented Jul 9, 2017

@swift-ci please test and merge

@swift-ci swift-ci merged commit 0b206d1 into swiftlang:master Jul 9, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants