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

Reply via email to