Skip to content

Commit 57b9f26

Browse files
committed
Properly implement clone to return the actual object in a hierarchy
1 parent 37028fd commit 57b9f26

5 files changed

Lines changed: 18 additions & 8 deletions

File tree

src/main/java/org/xbill/DNS/DNSSEC.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1201,7 +1201,7 @@ static void verifyMessage(
12011201
out.writeByteArray(previous.getSignature());
12021202
}
12031203

1204-
Header header = (Header) message.getHeader().clone();
1204+
Header header = message.getHeader().clone();
12051205
header.decCount(Section.ADDITIONAL);
12061206
out.writeByteArray(header.toWire());
12071207

src/main/java/org/xbill/DNS/Header.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -274,8 +274,13 @@ public String toString() {
274274

275275
/* Creates a new Header identical to the current one */
276276
@Override
277-
public Object clone() {
278-
Header h = new Header();
277+
public Header clone() {
278+
Header h;
279+
try {
280+
h = (Header) super.clone();
281+
} catch (CloneNotSupportedException e) {
282+
throw new RuntimeException(e);
283+
}
279284
h.id = id;
280285
h.flags = flags;
281286
System.arraycopy(counts, 0, h.counts, 0, counts.length);

src/main/java/org/xbill/DNS/Message.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -620,14 +620,19 @@ public String toString() {
620620
* @see OPTRecord
621621
*/
622622
@Override
623-
public Object clone() {
624-
Message m = new Message();
623+
public Message clone() {
624+
Message m;
625+
try {
626+
m = (Message) super.clone();
627+
} catch (CloneNotSupportedException e) {
628+
throw new RuntimeException(e);
629+
}
625630
for (int i = 0; i < sections.length; i++) {
626631
if (sections[i] != null) {
627632
m.sections[i] = new LinkedList<>(sections[i]);
628633
}
629634
}
630-
m.header = (Header) header.clone();
635+
m.header = header.clone();
631636
m.size = size;
632637
return m;
633638
}

src/main/java/org/xbill/DNS/SimpleResolver.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,7 @@ public Message send(Message query) throws IOException {
230230
}
231231
}
232232

233-
query = (Message) query.clone();
233+
query = query.clone();
234234
applyEDNS(query);
235235
if (tsig != null) {
236236
tsig.apply(query, null);

src/test/java/org/xbill/DNS/HeaderTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -362,7 +362,7 @@ void test_clone() {
362362
m_h.setCount(1, 0xFF);
363363
m_h.setCount(2, 0x0A);
364364

365-
Header h2 = (Header) m_h.clone();
365+
Header h2 = m_h.clone();
366366

367367
assertNotSame(m_h, h2);
368368
assertEquals(m_h.getID(), h2.getID());

0 commit comments

Comments
 (0)