RFR: 8303814: getLastErrorString should avoid charset conversions

Daniel Jeliński djelinski at openjdk.org
Wed Mar 8 11:59:09 UTC 2023


The message from this sender included one or more files
which could not be scanned for virus detection; do not
open these files unless you are certain of the sender's intent.

----------------------------------------------------------------------
This patch modifies the `getLastErrorString` method to return a `jstring`. Thanks to that we can avoid unnecessary back and forth conversions between Unicode and other charsets on Windows.

Other changes include:
- the Windows implementation of `getLastErrorString` no longer checks `errno`. I verified all uses of the method and confirmed that `errno` is not used anywhere. 
- While at it, I found and fixed a few calls to `JNU_ThrowIOExceptionWithLastError` that were done in context where `LastError` was not set.
- jdk.hotspot.agent was modified to use `JNU_ThrowByNameWithLastError` and `JNU_ThrowByName` instead of `getLastErrorString`; the code is expected to have identical behavior.
- zip_util was modified to return static messages instead of generated ones. The generated messages were not observed anywhere, because they were replaced by a static message in ZIP_Open, which is the only method used by other native code.
- `getLastErrorString` is no longer exported by libjava.

Tier1-3 tests continue to pass.

No new automated regression test; testing this requires installing a language pack that cannot be displayed in the current code page.
Tested this manually by installing Chinese language pack on English Windows 11, selecting Chinese language, then checking if the message on exception thrown by `InetAddress.getByName("nonexistent.local");` starts with `"不知道这样的主机。"` (or `"\u4e0d\u77e5\u9053\u8fd9\u6837\u7684\u4e3b\u673a\u3002"`). Without the change, the exception message started with a row of question marks.

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

Commit messages:
 - Update copyrights
 - Remove LastError
 - Change getLastErrorString to return a jstring

Changes: https://git.openjdk.org/jdk/pull/12922/files
 Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=12922&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8303814
  Stats: 138 lines in 8 files changed: 19 ins; 44 del; 75 mod
  Patch: https://git.openjdk.org/jdk/pull/12922.diff
  Fetch: git fetch https://git.openjdk.org/jdk pull/12922/head:pull/12922

PR: https://git.openjdk.org/jdk/pull/12922


More information about the serviceability-dev mailing list