RFR: 8283225: [AIX] ClassLoader.c produces incorrect OutOfMemory Exception when length is 0 [v3]

Tyler Steele duke at openjdk.java.net
Wed Mar 16 21:10:14 UTC 2022


> As described in the linked issue, NullClassBytesTest fails due an OutOfMemoryError produced on AIX when the test calls defineClass with a byte array of size of 0. The native implementation of defineClass then calls  malloc with a size of 0. On AIX malloc(0) returns NULL, while on other platforms it return a valid address. When NULL is produced by malloc for this reason, ClassLoader.c incorrectly interprets this as a failure due to a lack of memory.
> 
> ~~This PR modifies ClassLoader.c to produce an OutOfMemoryError only when `errno == ENOMEM` and to produce a ClassFormatError with the message "ClassLoader internal allocation failure" in all other cases (in which malloc returns NULL).~~ [edit: The above no longer describes the PR's proposed fix. See discussion below]
> 
> In addition, I performed some minor tidy-up work in ClassLoader.c by changing instances of `return 0` to `return NULL`, and `if (some_ptr == 0)` to `if (some_ptr == NULL)`. This was done to improve the clarity of the code in ClassLoader.c, but didn't feel worthy of opening a separate issue.
> 
> ### Alternatives
> 
> It would be possible to address this failure by modifying the test to accept the OutOfMemoryError on AIX. I thought it was a better solution to modify ClassLoader.c to produce an OutOfMemoryError only when the system is actually out of memory.
> 
> ### Testing
> 
> This change has been tested on AIX and Linux/x86.

Tyler Steele has refreshed the contents of this pull request, and previous commits have been removed. The incremental views will show differences compared to the previous content of the PR. The pull request contains one new commit since the last revision:

  Addresses failure in NullClassTest on AIX.
  
  - Changes malloc(0) call to malloc(1) on AIX.

-------------

Changes:
  - all: https://git.openjdk.java.net/jdk/pull/7829/files
  - new: https://git.openjdk.java.net/jdk/pull/7829/files/de946b41..f05c8d85

Webrevs:
 - full: https://webrevs.openjdk.java.net/?repo=jdk&pr=7829&range=02
 - incr: https://webrevs.openjdk.java.net/?repo=jdk&pr=7829&range=01-02

  Stats: 37 lines in 2 files changed: 12 ins; 6 del; 19 mod
  Patch: https://git.openjdk.java.net/jdk/pull/7829.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/7829/head:pull/7829

PR: https://git.openjdk.java.net/jdk/pull/7829


More information about the core-libs-dev mailing list