Don't add null to SmtpResponse.details()
Motivation: If the remote server returns an invalid response in the form "000 \r\n" (i.e. a three digit code, then space, but no details), null is added as a singletonList to the response being constructed. This seems unexpected and it would be easier to handle an empty details list in client code. Modifications: If detail is null (because frame.isReadable() returned false after reading the separator), initialise DefaultSmtpResponse with an empty list instead of a list containing a single null value. Result: When encountering this malformed server response, a DefaultSmtpResponse with a code but no details will be created.
This commit is contained in:
parent
2db4f2557d
commit
12a5754569
@ -68,9 +68,13 @@ public final class SmtpResponseDecoder extends LineBasedFrameDecoder {
|
||||
if (detail != null) {
|
||||
details.add(detail);
|
||||
}
|
||||
} else {
|
||||
if (detail == null) {
|
||||
details = Collections.emptyList();
|
||||
} else {
|
||||
details = Collections.singletonList(detail);
|
||||
}
|
||||
}
|
||||
return new DefaultSmtpResponse(code, details);
|
||||
case '-':
|
||||
// Multi-line response.
|
||||
|
@ -43,6 +43,18 @@ public class SmtpResponseDecoderTest {
|
||||
assertNull(channel.readInbound());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDecodeOneLineResponseNoDetails() {
|
||||
EmbeddedChannel channel = newChannel();
|
||||
assertTrue(channel.writeInbound(newBuffer("250 \r\n")));
|
||||
assertTrue(channel.finish());
|
||||
|
||||
SmtpResponse response = channel.readInbound();
|
||||
assertEquals(250, response.code());
|
||||
List<CharSequence> sequences = response.details();
|
||||
assertEquals(0, sequences.size());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDecodeOneLineResponseChunked() {
|
||||
EmbeddedChannel channel = newChannel();
|
||||
|
Loading…
Reference in New Issue
Block a user