Code Review Request, JDK-8214339 : SSLSocketImpl erroneously wraps SocketException

Jamil Nimeh jamil.j.nimeh at oracle.com
Sat Dec 15 00:16:27 UTC 2018


Hi Xuelei, thanks for the clarification.  If you want to keep the 
structure as-is, then the comment "fatal() always throws, make the 
compiler happy" is fine.  I think that's a little more helpful to a 
future maintainer who might be new to the code.

Thanks,
--Jamil

On 12/14/2018 1:56 PM, Xue-Lei Fan wrote:
> On 12/14/2018 1:46 PM, Xue-Lei Fan wrote:
>> Hi,
>>
>> The purpose of combination of the two lines together:
>>
>>      shc.conContext.fatal(Alert.UNEXPECTED_MESSAGE, "...");
>>      return null;    // make the complier happy
>>
>> is actually for the reading of the code.  If one don't know the 
>> fatal() always throw an exception (compiler is one of them), he may 
>> continue reading the following code, and may be confusing about the 
>> code logic.
>>
>> The "return" statement could never be executed actually.  It could be 
>> easier to catch the idea if using a format like:
>>
>>     throw new SSLException("there is an alert")
>> -  return null;
>>
>> But we need the fatal() method to wrap something more.
>>
>> We used a lot comments similar to:
>>
>>     return;     // fatal() always throws, make the compiler happy.
>>
>> and the abbreviate comment:
>>     return;    // make the compiler happy
>>
>> misses the part "fatal() always throws", and then it may look weird.
>>
>> I'm fine to remove the comment, or use the full comment instead 
>> "fatal() always throws, make the compiler happy".  Which one is your 
>> preference?
>>
>>
>> On 12/14/2018 11:49 AM, Jamil Nimeh wrote:
>>> Looks pretty good.  I did have one question about a few of the 
>>> methods in KeyShareExtension and PreSharedKeyExtension, specifically 
>>> where you return nulls on error branches with the 
>>> make-compiler-happy comments. In those cases would it be a bit 
>>> cleaner to set a byte[] variable to null at the beginning of the 
>>> method and then in the successful code path set the value to 
>>> whatever byte array comes back from hmacs or hkdf operations?  At 
>>> the end of the method you only need one return statement, rather 
>>> than a return null on every error branch, many of which won't be 
>>> executed due to method calls which always throw exceptions.
>> Hm, I see your points.  As the return statement could never be 
>> executed, it may not worthy to declare the byte[] variable earlier.
>>
> I mean that we can remove the "return" statement as it is never 
> executed, if not for code reading or compiler.
>
> In some other places, the compiler may not happy because it cannot 
> tell that the fatal() throws exception.  So we may still need the 
> "return" statement a little bit.  But I think most of them could be 
> removed if we don't like it.
>
> Xuelei
>
>> See above. Is it a reasonable coding style to you as well?
>>
>> Thanks,
>> Xuelei
>>
>>> Not a big deal if you wish to leave things as they are since I know 
>>> the current approach is used in many places in the code that this 
>>> review doesn't touch.
>>>
>>> --Jamil
>>>
>>> On 12/14/2018 8:14 AM, Xue-Lei Fan wrote:
>>>> Hi,
>>>>
>>>> Please review the update:
>>>>    http://cr.openjdk.java.net/~xuelei/8214339/webrev.00/
>>>>
>>>> In some cases, the SSLProtocolException or SSLHandshakeException 
>>>> may be thrown if the underlying socket run into problems.  An 
>>>> application may depends on the exception class for further action, 
>>>> for example retry the connection with different parameters.
>>>>
>>>> This update is trying to separate the socket problem from the TLS 
>>>> protocol or handshake problem, by using different exception classes.
>>>>
>>>> Thanks,
>>>> Xuelei
>>>




More information about the security-dev mailing list