On Fri, 19 Mar 2021 22:31:48 GMT, Sergey Bylokhov <[email protected]> wrote:
>> If `JNU_NewStringPlatform` fails to allocate new Java String object for
>> printer name, `std::bad_alloc` is thrown. The handler for the exception does
>> not release the local reference to the `nameArray`, thus it will be leaked.
>
> src/java.desktop/windows/native/libawt/windows/WPrinterJob.cpp line 178:
>
>> 176: } catch (std::bad_alloc&) {
>> 177: delete [] pPrinterEnum;
>> 178: if (nameArray != NULL) {
>
> Not sure that we usually clean the local refs in the native JNI methods, that
> only required in the native loop which are never returned to the java(I have
> check that by the grep of env->NewObjectArray)
You're right. It's not required: all local refs are cleared when the JNI method
exits.
My reasoning was that `env->DeleteLocalRef(utf_str)` is called in the loop.
Strictly, it's not required either. Yet if there's a large number of elements
in the array, it could cause a problem.
I'm going to withdraw the PR as the fix is not necessary.
-------------
PR: https://git.openjdk.java.net/jdk/pull/3096