mirror of https://github.com/grpc/grpc-java.git
core: fix SRV record parsing
* only unquote TXT data, so as to not remove spaces from SRV data
This commit is contained in:
parent
c796901aca
commit
6dbe3921ed
|
|
@ -586,7 +586,7 @@ final class DnsNameResolver extends NameResolver {
|
|||
NamingEnumeration<?> rrValues = rrEntry.getAll();
|
||||
try {
|
||||
while (rrValues.hasMore()) {
|
||||
records.add(unquote(String.valueOf(rrValues.next())));
|
||||
records.add(normalizeData(recordType, String.valueOf(rrValues.next())));
|
||||
}
|
||||
} finally {
|
||||
rrValues.close();
|
||||
|
|
@ -600,9 +600,20 @@ final class DnsNameResolver extends NameResolver {
|
|||
}
|
||||
|
||||
/**
|
||||
* Undo the quoting done in {@link com.sun.jndi.dns.ResourceRecord#decodeTxt}.
|
||||
* Convert returned RR data to a form that's consumable by the grpc library.
|
||||
*/
|
||||
@VisibleForTesting
|
||||
static String normalizeData(String recordType, String rrData) {
|
||||
String normalized = rrData;
|
||||
if (recordType.equals("TXT")) {
|
||||
normalized = unquote(normalized);
|
||||
}
|
||||
return normalized;
|
||||
}
|
||||
|
||||
/**
|
||||
* Undo the quoting done in {@link com.sun.jndi.dns.ResourceRecord#decodeTxt}.
|
||||
*/
|
||||
static String unquote(String txtRecord) {
|
||||
StringBuilder sb = new StringBuilder(txtRecord.length());
|
||||
boolean inquote = false;
|
||||
|
|
|
|||
|
|
@ -281,14 +281,20 @@ public class DnsNameResolverTest {
|
|||
}
|
||||
|
||||
@Test
|
||||
public void unquoteRemovesJndiFormatting() {
|
||||
assertEquals("blah", DnsNameResolver.unquote("blah"));
|
||||
assertEquals("", DnsNameResolver.unquote("\"\""));
|
||||
assertEquals("blahblah", DnsNameResolver.unquote("blah blah"));
|
||||
assertEquals("blahfoo blah", DnsNameResolver.unquote("blah \"foo blah\""));
|
||||
assertEquals("blah blah", DnsNameResolver.unquote("\"blah blah\""));
|
||||
assertEquals("blah\"blah", DnsNameResolver.unquote("\"blah\\\"blah\""));
|
||||
assertEquals("blah\\blah", DnsNameResolver.unquote("\"blah\\\\blah\""));
|
||||
public void normalizeDataRemovesJndiFormattingForTxtRecords() {
|
||||
assertEquals("blah", DnsNameResolver.normalizeData("TXT", "blah"));
|
||||
assertEquals("", DnsNameResolver.normalizeData("TXT", "\"\""));
|
||||
assertEquals("blahblah", DnsNameResolver.normalizeData("TXT", "blah blah"));
|
||||
assertEquals("blahfoo blah", DnsNameResolver.normalizeData("TXT", "blah \"foo blah\""));
|
||||
assertEquals("blah blah", DnsNameResolver.normalizeData("TXT", "\"blah blah\""));
|
||||
assertEquals("blah\"blah", DnsNameResolver.normalizeData("TXT", "\"blah\\\"blah\""));
|
||||
assertEquals("blah\\blah", DnsNameResolver.normalizeData("TXT", "\"blah\\\\blah\""));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void normalizeDataLeavesSrvRecordsUnModified() {
|
||||
assertEquals("0 0 1234 foo.bar.com", DnsNameResolver.normalizeData(
|
||||
"SRV", "0 0 1234 foo.bar.com"));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
|
|||
Loading…
Reference in New Issue