Skip to content

Commit 0070c2e

Browse files
committed
Use a fixed size for DoH request body
1 parent 1576453 commit 0070c2e

2 files changed

Lines changed: 14 additions & 2 deletions

File tree

‎okhttp-dnsoverhttps/src/main/kotlin/okhttp3/dnsoverhttps/internal/-DnsOverHttpsQuery.kt‎

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -166,12 +166,17 @@ internal fun DnsMessage.asQueryParameter(): String {
166166
}
167167

168168
internal class QueryRequestBody(
169-
private val query: DnsMessage,
169+
query: DnsMessage,
170170
) : RequestBody() {
171+
private val content = Buffer().also { DnsMessageWriter(it).write(query) }.readByteString()
172+
171173
override fun contentType() = DNS_MESSAGE
172174

175+
// Cloudflare doesn't support chunked encoding
176+
override fun contentLength() = content.size.toLong()
177+
173178
override fun writeTo(sink: BufferedSink) {
174-
DnsMessageWriter(sink.buffer).write(query)
179+
sink.write(content)
175180
sink.emitCompleteSegments()
176181
}
177182
}

‎okhttp-dnsoverhttps/src/test/java/okhttp3/dnsoverhttps/DnsOverHttpsTest.kt‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,9 @@ import assertk.assertions.containsExactly
2121
import assertk.assertions.hasMessage
2222
import assertk.assertions.hasSize
2323
import assertk.assertions.isEqualTo
24+
import assertk.assertions.isGreaterThan
2425
import assertk.assertions.isInstanceOf
26+
import assertk.assertions.isNotNull
2527
import assertk.assertions.isNull
2628
import assertk.assertions.isTrue
2729
import java.io.EOFException
@@ -382,6 +384,11 @@ class DnsOverHttpsTest(
382384
assertThat(httpsRequest1!!.method).isEqualTo("POST")
383385
assertThat(httpsRequest1.url.encodedQuery)
384386
.isEqualTo("ct")
387+
// Cloudflare fails on chunked encoding
388+
assertThat(httpsRequest1.headers["Content-Length"]?.toLong())
389+
.isNotNull()
390+
.isGreaterThan(12L) // A DNS message has a 12-byte header followed by its questions.
391+
assertThat(httpsRequest1.chunkSizes).isNull()
385392

386393
assertThat(cacheEvents()).containsExactly(CacheMiss::class)
387394

0 commit comments

Comments
 (0)