Hi Matthias,

Please consider catching all exceptions, not just std::alloc:

} catch (...) { return NULL; }

and doing it at the exit extern "C" function, not somewhere
internally. Regardless of which exceptions get thrown around below you
and by whom, you are safe that way.

However, if you want to keep your patch as it is, please catch at
least as const reference:

} catch (const std::bad_alloc&) {}

Fine otherwise. I do not need another webrev.

Best Regards, Thomas





On Fri, Jun 1, 2018 at 10:39 AM, Baesken, Matthias
<[email protected]> wrote:
> Hi Thomas , thanks for the feedback.
> I created a bug and change for the excpetion handling in GDIRenderer.cpp  .
> Please review .
>
> Thanks,  Matthias
>
> Bug:
>
> https://bugs.openjdk.java.net/browse/JDK-8204211
>
> JDK-8204211: windows : handle potential C++ exception in GDIRenderer
>
>
> Change :
>
>
> http://cr.openjdk.java.net/~mbaesken/webrevs/8204211/
>
>
>
>
>> -----Original Message-----
>> From: Thomas Stüfe [mailto:[email protected]]
>> Sent: Mittwoch, 30. Mai 2018 17:37
>> To: Baesken, Matthias <[email protected]>
>> Cc: 2d-dev <[email protected]>
>> Subject: Re: [OpenJDK 2D-Dev] java2d coding using
>> SAFE_SIZE_ARRAY_ALLOC / safe_Malloc
>>
>> Letting c++ exceptions escape from extern "C" functions is UB and may
>> (and probably will) crash the process. This should be fixed. Approach
>> taken by JDK-8039394 is fine (I would probably catch every C++
>> exception with catch(...), not just bad_alloc, just to be safe).
>>
>> Best Regards, Thomas
>>
>> On Wed, May 30, 2018 at 5:08 PM, Baesken, Matthias
>> <[email protected]> wrote:
>> > Hello ,  there is still some  java2d coding  where  SAFE_SIZE_ARRAY_ALLOC /
>> > safe_Malloc    is used  and  the  (potentially occurring) exception is not
>> > handled .
>> >
>> >
>> >
>> > This leads to  CL warnings  (when enabled  ) like
>> >
>> >
>> >
>> > " function assumed not to throw an exception but does ; The function is
>> > extern "C" and /EHc was specified"
>> >
>> >
>> >
>> > Example :
>> >
>> >
>> >
>> > java.desktop/windows/native/libawt/java2d/windows/GDIRenderer.cpp
>> >
>> >
>> >
>> > static POINT *TransformPoly()
>> >
>> >   …..
>> >
>> >     if (outpoints > POLYTEMPSIZE) {
>> >
>> >         pPoints = (POINT *) SAFE_SIZE_ARRAY_ALLOC(safe_Malloc,
>> > sizeof(POINT), outpoints);
>> >
>> >     }
>> >
>> >
>> >
>> >
>> >
>> > Should  we add exception handling   here ?
>> >
>> >
>> >
>> > Similar fixes were done  in the change  8039394: Compiler warnings about
>> C++
>> > exceptions in windows printing code
>> >
>> >
>> >
>> > https://bugs.openjdk.java.net/browse/JDK-8039394
>> >
>> > http://hg.openjdk.java.net/jdk9/jdk9/jdk/rev/823387e2bf42
>> >
>> >
>> >
>> >
>> >
>> > Best regards, Matthias
>> >
>> >
>> >
>> >

Reply via email to