[#5760] Do not change writerIndex when decode DnsPtrRecord
Motivation: We need to not change the original writerIndex when decode a DnsPtrRecord as otherwise we will not be able to decode other records that follow it. Modifications: Slice the data out and so not increase the writerIndex. Result: No more problems when decoding.
This commit is contained in:
parent
463b5cf21b
commit
8cf90f0512
@ -91,11 +91,10 @@ public class DefaultDnsRecordDecoder implements DnsRecordDecoder {
|
|||||||
ByteBuf in, int offset, int length) throws Exception {
|
ByteBuf in, int offset, int length) throws Exception {
|
||||||
|
|
||||||
if (type == DnsRecordType.PTR) {
|
if (type == DnsRecordType.PTR) {
|
||||||
in.setIndex(offset, offset + length);
|
return new DefaultDnsPtrRecord(name, dnsClass, timeToLive, decodeName0(in.slice(offset, length)));
|
||||||
return new DefaultDnsPtrRecord(name, dnsClass, timeToLive, decodeName0(in));
|
|
||||||
}
|
}
|
||||||
return new DefaultDnsRawRecord(
|
return new DefaultDnsRawRecord(
|
||||||
name, type, dnsClass, timeToLive, in.retainedDuplicate().setIndex(offset, offset + length));
|
name, type, dnsClass, timeToLive, in.retainedSlice(offset, length));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -17,10 +17,10 @@ package io.netty.handler.codec.dns;
|
|||||||
|
|
||||||
import io.netty.buffer.ByteBuf;
|
import io.netty.buffer.ByteBuf;
|
||||||
import io.netty.buffer.Unpooled;
|
import io.netty.buffer.Unpooled;
|
||||||
import io.netty.util.internal.StringUtil;
|
|
||||||
import org.junit.Assert;
|
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
|
|
||||||
public class DefaultDnsRecordDecoderTest {
|
public class DefaultDnsRecordDecoderTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@ -63,7 +63,27 @@ public class DefaultDnsRecordDecoderTest {
|
|||||||
private static void testDecodeName(String expected, ByteBuf buffer) {
|
private static void testDecodeName(String expected, ByteBuf buffer) {
|
||||||
try {
|
try {
|
||||||
DefaultDnsRecordDecoder decoder = new DefaultDnsRecordDecoder();
|
DefaultDnsRecordDecoder decoder = new DefaultDnsRecordDecoder();
|
||||||
Assert.assertEquals(expected, decoder.decodeName(buffer));
|
assertEquals(expected, decoder.decodeName0(buffer));
|
||||||
|
} finally {
|
||||||
|
buffer.release();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testDecodePtrRecord() throws Exception {
|
||||||
|
DefaultDnsRecordDecoder decoder = new DefaultDnsRecordDecoder();
|
||||||
|
ByteBuf buffer = Unpooled.buffer().writeByte(0);
|
||||||
|
int readerIndex = buffer.readerIndex();
|
||||||
|
int writerIndex = buffer.writerIndex();
|
||||||
|
try {
|
||||||
|
DnsPtrRecord record = (DnsPtrRecord) decoder.decodeRecord(
|
||||||
|
"netty.io", DnsRecordType.PTR, DnsRecord.CLASS_IN, 60, buffer, 0, 1);
|
||||||
|
assertEquals("netty.io.", record.name());
|
||||||
|
assertEquals(DnsRecord.CLASS_IN, record.dnsClass());
|
||||||
|
assertEquals(60, record.timeToLive());
|
||||||
|
assertEquals(DnsRecordType.PTR, record.type());
|
||||||
|
assertEquals(readerIndex, buffer.readerIndex());
|
||||||
|
assertEquals(writerIndex, buffer.writerIndex());
|
||||||
} finally {
|
} finally {
|
||||||
buffer.release();
|
buffer.release();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user