Worth a radar to improve docs. > On 13 Jun 2017, at 22:12, Jens Persson via swift-users > <swift-users@swift.org> wrote: > > Thanks! > > The documentation that Xcode displays (for CharacterSet's hasMember(inPlane > plane:)) is as follows: > > Declaration: > func hasMember(inPlane plane: UInt8) -> Bool > > Description: > Returns true if the `CharacterSet` has a member in the specified plane. > This method makes it easier to find the plane containing the members of the > current character set. > The Basic Multilingual Plane (BMP) is plane 0. > > Parameters: > plane - No description > > Which is about the same as here: > https://developer.apple.com/documentation/foundation/characterset/1779728-hasmember > > <https://developer.apple.com/documentation/foundation/characterset/1779728-hasmember> > and here: > https://developer.apple.com/documentation/foundation/nscharacterset/1412406-hasmemberinplane > > <https://developer.apple.com/documentation/foundation/nscharacterset/1412406-hasmemberinplane> > > No where does it mention anything about undefined behavior for some values of > plane. > > In order to find that crucial info, I'd have to do what you did, write it in > Objective C and dig through the stack trace, or just guess that it calls > CFCharacterSetHasMemberInPlane and that its documentation contains very > valuable pieces of information that for some reason got lost on the way to > NSCharacterSet's method hasMemberInPlane ... > > Kind of makes one wonder what other undocumented undefined behavior might > hide in Foundation and other places. > > /Jens > > > > > On Tue, Jun 13, 2017 at 7:14 PM, Doug Hill via swift-users > <swift-users@swift.org <mailto:swift-users@swift.org>> wrote: > I tried your calls to NSFont in Objective-C, and it also crashes. Looking at > the stack trace, I see that it crashes in CFCharacterSetHasMemberInPlane. I > see documentation for thePlane parameter of this function says: > > The valid value range is from 0 to 16. If the value is outside of the valid > plane number range, the behavior is undefined. > > I guess randomly crashing counts as undefined behavior. > While it would be great if this function was more robust, Apple is definitely > saying Don’t Do That. > > Doug Hill > https://github.com/djfitz/SFFontFeatures > <https://github.com/djfitz/SFFontFeatures> > > >> On Jun 13, 2017, at 9:42 AM, Jens Persson via swift-users >> <swift-users@swift.org <mailto:swift-users@swift.org>> wrote: >> >> PS >> There are only 17 planes in the (current?) Unicode standard, but I'm >> assuming that the CharacterSet.hasMember(inPlane:) shouldn't (randomly?) >> crash for UInt8 values other than 0 ... 16? >> It also seems strange that it reproducibly crashes or not depending on which >> specific font I use. >> >> >> On Tue, Jun 13, 2017 at 4:00 PM, Jens Persson <j...@bitcycle.com >> <mailto:j...@bitcycle.com>> wrote: >> The below program demonstrates a possible bug that I encountered. >> Can anyone else reproduce my results (as explained in the comments)? >> If so, is it a Swift or Cocoa bug (I haven't tried it in Objective C)? >> >> import AppKit >> >> extension NSFont { >> var planesWithMembers: [UInt8] { >> return (UInt8(0) ... UInt8(255)).filter { >> // The follwing line will crash (EXC_BAD_ACCESS) for some fonts: >> coveredCharacterSet.hasMember(inPlane: $0) >> // I have tested it with Xcode 8.3.3 and Xcode 9 beta 1, both >> // Swift 3 and 4, and they all reproduce the crash. >> // macOS 10.12.5 >> } >> } >> } >> >> // Examples that will not cause the crash: >> // let fontName = "AlBayan" >> // let fontName = "AppleBraille" >> // let fontName = "Chalkboard" >> // let fontName = "Helvetica" >> // let fontName = "Zapfino" >> >> // Examples that will cause the crash: >> // let fontName = "AppleColorEmoji" >> // let fontName = "AppleSymbols" >> let fontName = "Baskerville" >> // let fontName = "Geneva" >> // let fontName = "SnellRoundhand" >> >> let font = NSFont(name: fontName, size: 12)! >> let result = font.planesWithMembers >> print("Planes that contains members:", result) >> >> >> _______________________________________________ >> swift-users mailing list >> swift-users@swift.org <mailto:swift-users@swift.org> >> https://lists.swift.org/mailman/listinfo/swift-users >> <https://lists.swift.org/mailman/listinfo/swift-users> > > > _______________________________________________ > swift-users mailing list > swift-users@swift.org <mailto:swift-users@swift.org> > https://lists.swift.org/mailman/listinfo/swift-users > <https://lists.swift.org/mailman/listinfo/swift-users> > > > _______________________________________________ > swift-users mailing list > swift-users@swift.org > https://lists.swift.org/mailman/listinfo/swift-users
_______________________________________________ swift-users mailing list swift-users@swift.org https://lists.swift.org/mailman/listinfo/swift-users