Skip to content

OpenJDK java/lang/String/ToLowerCase ArrayIndexOutOfBoundsException #17063

Open
@pshipton

Description

@pshipton

Internal build
jdk_lang_1
java/lang/String/ToLowerCase.java
The failure didn't repeat in the automatic 3x grinder.

[2023-03-29T02:29:30.273Z] STDERR:
[2023-03-29T02:29:30.273Z] java.lang.ArrayIndexOutOfBoundsException
[2023-03-29T02:29:30.273Z] 	at java.lang.CharacterDataLatin1.getProperties(CharacterDataLatin1.java:72)
[2023-03-29T02:29:30.273Z] 	at java.lang.CharacterDataLatin1.toLowerCase(CharacterDataLatin1.java:134)
[2023-03-29T02:29:30.273Z] 	at java.lang.Character.toLowerCase(Character.java:6373)
[2023-03-29T02:29:30.273Z] 	at java.lang.String.toLowerCase(String.java:2785)
[2023-03-29T02:29:30.273Z] 	at java.lang.String.toLowerCaseCore(String.java:2921)
[2023-03-29T02:29:30.273Z] 	at java.lang.String.toLowerCase(String.java:2896)
[2023-03-29T02:29:30.273Z] 	at ToLowerCase.test(ToLowerCase.java:112)
[2023-03-29T02:29:30.273Z] 	at ToLowerCase.main(ToLowerCase.java:44)

@joransiu fyi. Not sure if this is zLinux specific or something recently changed in this area.

CharacterDataLatin1

    int getProperties(int ch) {
        char offset = (char)ch;
        int props = A[offset]; <- line 72
        return props;
    }

  static final int A[] = new int[256];

To get there it went through CharacterData.of() and presumably ch >>> 8 == 0 was true.

    static final CharacterData of(int ch) {
        if (ch >>> 8 == 0) {     // fast-path
            return CharacterDataLatin1.instance;
        } else {
            switch(ch >>> 16) {  //plane 00-16
            case(0):
                return CharacterData00.instance;
            case(1):
                return CharacterData01.instance;
            case(2):
                return CharacterData02.instance;
            case(14):
                return CharacterData0E.instance;
            case(15):   // Private Use
            case(16):   // Private Use
                return CharacterDataPrivateUse.instance;
            default:
                return CharacterDataUndefined.instance;
            }
        }
    }

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions