On Thu, 12 Sep 2024 23:11:31 GMT, Justin Lu <j...@openjdk.org> wrote:
>> Please review this PR which restores the correct exception message when the >> current working directory can not be found during java startup in >> `initPhase1`. >> >> Both MacOS and Linux are expected to fail with `java.lang.Error: Properties >> init: Could not determine current working directory` if the _user.dir_ >> system property cannot be initialized. Currently, MacOS now fails with >> `java.lang.InternalError: platform encoding not initialized` and Linux fails >> with `java.lang.InternalError: null property: user.dir` which are both >> unexpected messages. >> >> In `System.c`, >> `Java_jdk_internal_util_SystemProps_00024Raw_platformProperties` calls >> `GetJavaProperties(JNIEnv *env)` which throws an internal error (with an >> appropriate message) for Unix platforms when the current working directory >> cannot be found. However, this exception is never checked and thus >> unexpected failures occur later. NULL should be returned after the exception >> is thrown, so that the initialization fails with the expected error when the >> return value is checked. >> >> >> // Get the platform specific values >> sprops = GetJavaProperties(env); >> CHECK_NULL_RETURN(sprops, NULL); >> >> >> Testing done locally on both platforms. > > Justin Lu has updated the pull request incrementally with one additional > commit since the last revision: > > return null in exception site instead > Curiously in the Windows implementation of `GetJavaProperties(...)` in > `java_props_md.c` in case of a failure to get the current working directory, > we seem to just skip setting the working directory and don't raise any error: > > ```c > /* Current directory */ > { > WCHAR buf[MAX_PATH]; > if (GetCurrentDirectoryW(sizeof(buf)/sizeof(WCHAR), buf) != 0) > sprops.user_dir = _wcsdup(buf); > } > ``` Hi Jai, I noticed that too. I tried to replicate this scenario on Windows and was always prevented from deleting the directory that I was currently in: _The process cannot access the file because it is being used by another process._ But I'm sure there are ways to get the working directory deleted that I am unaware of. To make this fix more complete, I can add similar behavior where an exception is thrown for Windows if `GetCurrentDirectoryW` fails. AFAICT this would be correcting a faulty error message with a proper one, and so there is no behavioral change. What do you think? ------------- PR Comment: https://git.openjdk.org/jdk/pull/20975#issuecomment-2349354516