Skip to content

Commit 943edb3

Browse files
committed
Fix codec-dns tests
1 parent 6459a28 commit 943edb3

2 files changed

Lines changed: 20 additions & 2 deletions

File tree

codec-dns/src/main/java/io/netty/handler/codec/dns/DnsCodecUtil.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,16 @@ static void encodeDomainName(String name, ByteBuf buf) {
3838

3939
int totalLength = 0;
4040
final String[] labels = name.split("\\.");
41-
for (String label : labels) {
41+
for (int i = 0; i < labels.length; i++) {
42+
String label = labels[i];
4243
final int labelLen = label.length();
4344
if (labelLen == 0) {
44-
throw new IllegalArgumentException("DNS name contains empty label: " + name);
45+
if (i == labels.length - 1) {
46+
// zero-length label at the end means the end of the name.
47+
break;
48+
} else {
49+
throw new IllegalArgumentException("DNS name contains empty label: " + name);
50+
}
4551
}
4652
if (labelLen > 63) {
4753
throw new IllegalArgumentException(

codec-dns/src/test/java/io/netty/handler/codec/dns/DnsCodecUtilTest.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,18 @@ void rejectTooLongLabelWhileEncoding() {
6161
buf.release();
6262
}
6363

64+
@Test
65+
void rejectEmptyLabelWhileEncoding() {
66+
ByteBuf buf = Unpooled.buffer(256);
67+
// 63 is the maximum label length
68+
StringBuilder sb = new StringBuilder();
69+
appendLabel(sb, 5);
70+
appendLabel(sb, 0);
71+
appendLabel(sb, 5);
72+
assertThrows(IllegalArgumentException.class, () -> DnsCodecUtil.encodeDomainName(sb.toString(), buf));
73+
buf.release();
74+
}
75+
6476
@Test
6577
void rejectTooLongDomainNameWhileEncoding() {
6678
ByteBuf buf = Unpooled.buffer(256);

0 commit comments

Comments
 (0)