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();
|
NamingEnumeration<?> rrValues = rrEntry.getAll();
|
||||||
try {
|
try {
|
||||||
while (rrValues.hasMore()) {
|
while (rrValues.hasMore()) {
|
||||||
records.add(unquote(String.valueOf(rrValues.next())));
|
records.add(normalizeData(recordType, String.valueOf(rrValues.next())));
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
rrValues.close();
|
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
|
@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) {
|
static String unquote(String txtRecord) {
|
||||||
StringBuilder sb = new StringBuilder(txtRecord.length());
|
StringBuilder sb = new StringBuilder(txtRecord.length());
|
||||||
boolean inquote = false;
|
boolean inquote = false;
|
||||||
|
|
|
||||||
|
|
@ -281,14 +281,20 @@ public class DnsNameResolverTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void unquoteRemovesJndiFormatting() {
|
public void normalizeDataRemovesJndiFormattingForTxtRecords() {
|
||||||
assertEquals("blah", DnsNameResolver.unquote("blah"));
|
assertEquals("blah", DnsNameResolver.normalizeData("TXT", "blah"));
|
||||||
assertEquals("", DnsNameResolver.unquote("\"\""));
|
assertEquals("", DnsNameResolver.normalizeData("TXT", "\"\""));
|
||||||
assertEquals("blahblah", DnsNameResolver.unquote("blah blah"));
|
assertEquals("blahblah", DnsNameResolver.normalizeData("TXT", "blah blah"));
|
||||||
assertEquals("blahfoo blah", DnsNameResolver.unquote("blah \"foo blah\""));
|
assertEquals("blahfoo blah", DnsNameResolver.normalizeData("TXT", "blah \"foo blah\""));
|
||||||
assertEquals("blah blah", DnsNameResolver.unquote("\"blah blah\""));
|
assertEquals("blah blah", DnsNameResolver.normalizeData("TXT", "\"blah blah\""));
|
||||||
assertEquals("blah\"blah", DnsNameResolver.unquote("\"blah\\\"blah\""));
|
assertEquals("blah\"blah", DnsNameResolver.normalizeData("TXT", "\"blah\\\"blah\""));
|
||||||
assertEquals("blah\\blah", DnsNameResolver.unquote("\"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
|
@Test
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue