From 43ad7806eb765c202a0151c4a47ebd9defb52d60 Mon Sep 17 00:00:00 2001 From: Noa Resare Date: Thu, 16 Jun 2022 10:20:03 +0100 Subject: [PATCH] Ensure that empty TXT records always renders as "" Instantiating an empty TXT record using Record.fromString() would previously render as a TXT without the empty string. Closes #254 --- src/main/java/org/xbill/DNS/TXTBase.java | 4 ++++ src/test/java/org/xbill/DNS/RecordTest.java | 8 ++++++++ 2 files changed, 12 insertions(+) diff --git a/src/main/java/org/xbill/DNS/TXTBase.java b/src/main/java/org/xbill/DNS/TXTBase.java index 7117502f..96694b12 100644 --- a/src/main/java/org/xbill/DNS/TXTBase.java +++ b/src/main/java/org/xbill/DNS/TXTBase.java @@ -73,6 +73,10 @@ protected void rdataFromString(Tokenizer st, Name origin) throws IOException { /** converts to a String */ @Override protected String rrToString() { + if (strings.isEmpty()) { + // always return at least an empty quoted String + return "\"\""; + } StringBuilder sb = new StringBuilder(); Iterator it = strings.iterator(); while (it.hasNext()) { diff --git a/src/test/java/org/xbill/DNS/RecordTest.java b/src/test/java/org/xbill/DNS/RecordTest.java index e35041af..b00cfc78 100644 --- a/src/test/java/org/xbill/DNS/RecordTest.java +++ b/src/test/java/org/xbill/DNS/RecordTest.java @@ -912,4 +912,12 @@ void testSerializable() throws IOException { } } } + + // https://github.com/dnsjava/dnsjava/issues/254 + @Test + void testEmptyTXTSerialization() throws IOException { + Name recordName = Name.fromString("name.name."); + Record r = Record.fromString(recordName, Type.TXT, DClass.IN, 0, "", recordName); + assertEquals("name.name.\t\t0\tIN\tTXT\t\"\"", r.toString()); + } }