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()); + } }