Hi,

I expect it would be a good & safe thing to do, to check for NULL.
But I don't know if all of these reports you have are down to that.
Did you get stack traces for all of them ?
We also have open bugs like
https://bugs.openjdk.java.net/browse/JDK-8146329
https://bugs.openjdk.java.net/browse/JDK-8133783
which look different.

-phil.

On 10/10/2018 10:56 AM, Bill York wrote:

Thanks for the response Phil, here’s what I know.

Reports show:

  * Mac OS – many versions 10.10 through 17.7
  * Java - 8 u144-b01 (48 reports), 8 u152-b16 (12 reports) 8
    u152-release-1136-b5 – JetBrains (1 report)

Comments say:

  * Screen change event.  I am using the jetbrains JRE, as you can see
    in the stack trace.
  * I am on a mac and product crashes very often when I put my
    computer to sleep.
  * Woke up computer after connecting to two external monitors.

I’ve annotated the function names with links to code I found on the OpenJDK site and the Apple site.

As an experiment, I created a simple X-Code project to examine how CFSTringCompare behaves when passed NULL. It does throw an EXC_BAD_ACCESS as is shown in the below stack trace. My example code is at the end of this message.

Stack trace shows:

[  7] 0x00006000001c5848 <unknown-module>+00000000

[  8] 0x00007fff3cc4e678 /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation+00140920CFStringCompare <https://developer.apple.com/documentation/corefoundation/1542911-cfstringcompare?language=objc>+00000024

[  9] 0x00000001351a80f7 java/jre/maci64/jre/lib/libawt_lwawt.dylib+00119031 getBPPFromModeString <http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/src/macosx/native/sun/awt/CGraphicsDevice.m>+00000032 (see line 32)

[ 10] 0x00000001351a819f java/jre/maci64/jre/lib/libawt_lwawt.dylib+00119199 createJavaDisplayMode <http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/src/macosx/native/sun/awt/CGraphicsDevice.m>+00000053 (see line 130)

[ 11] 0x00000001351a841e java/jre/maci64/jre/lib/libawt_lwawt.dylib+00119838 Java_sun_awt_CGraphicsDevice_nativeGetDisplayMode <http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/src/macosx/native/sun/awt/CGraphicsDevice.m>+00000031 (see line 267)

Example code:

#import <Foundation/Foundation.h>

static int getBPPFromModeString(CFStringRef mode)

{

if((CFStringCompare(mode, CFSTR(kIO30BitDirectPixels), kCFCompareCaseInsensitive) == kCFCompareEqualTo)) {

// This is a strange mode, where we using 10 bits per RGB component and pack it into 32 bits

// Java is not ready to work with this mode but we have to specify it as supported

return 30;

}

elseif(CFStringCompare(mode, CFSTR(IO32BitDirectPixels), kCFCompareCaseInsensitive) == kCFCompareEqualTo) {

return 32;

}

elseif(CFStringCompare(mode, CFSTR(IO16BitDirectPixels), kCFCompareCaseInsensitive) == kCFCompareEqualTo) {

return 16;

}

elseif(CFStringCompare(mode, CFSTR(IO8BitIndexedPixels), kCFCompareCaseInsensitive) == kCFCompareEqualTo) {

return 8;

}

return0;

}

int main(int argc, const char * argv[]) {

@autoreleasepool{

// insert code here...

CFStringRef mode;

getBPPFromModeString(mode);

NSLog(@"Hello, World!");

}

return0;

}

*From: *Philip Race <philip.r...@oracle.com>
*Organization: *Oracle Corporation
*Date: *Wednesday, October 10, 2018 at 12:03 PM
*To: *Bill York <bill.y...@mathworks.com>
*Cc: *"2d-dev@openjdk.java.net" <2d-dev@openjdk.java.net>
*Subject: *Re: [OpenJDK 2D-Dev] Crash in CGraphicsDevice.m

The code you suspect has nothing to do with the webrev you list.
It was introduced in fixing https://bugs.openjdk.java.net/browse/JDK-7124247 <https://bugs.openjdk.java.net/browse/JDK-7124247>
So has been there since JDK 8 GA. Not recent .. perhaps you can tell us
more about your users JDK versions and what is the earliest that reproduces this crash ?

-phil.

On 10/10/18, 8:45 AM, Bill York wrote:

    2d-dev folks,

    I work on a product called MATLAB and we have about 60 reports
    from customers on Mac related to a crash in CGraphicsDevice.m

    Please let  me know if this is the right way to report a crash and
    discuss getting it resolved.

    Here are the details:

    CGraphicsDevice.m is a native file in support of Java drawing and
    gets called from Java_sun_awt_CGraphicsDevice_nativeGetDisplayMode

    While I can’t reproduce the problem, it looks like the display
    pointer is becoming invalid for a time when the user’s laptop
    opens or closes.

    Looking at this source code:

    
http://cr.openjdk.java.net/~serb/8000629/webrev.08/src/macosx/native/sun/awt/CGraphicsDevice.m.html
    
<http://cr.openjdk.java.net/%7Eserb/8000629/webrev.08/src/macosx/native/sun/awt/CGraphicsDevice.m.html>

    I see a direct call to CFStringCompare without a check for a NULL
    CFStringRef.

      * (CFStringCompare(mode, CFSTR(kIO30BitDirectPixels),
        kCFCompareCaseInsensitive) == kCFCompareEqualTo)

    I believe if this code returned 0, the crash would not occur
    though there may be some other cleanup in the surrounding call frames.

    Bill


Reply via email to