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:



/* Current directory */
{
    WCHAR buf[MAX_PATH];
    if (GetCurrentDirectoryW(sizeof(buf)/sizeof(WCHAR), buf) != 0)
        sprops.user_dir = _wcsdup(buf);
}

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

PR Comment: https://git.openjdk.org/jdk/pull/20975#issuecomment-2348157528

Reply via email to