diff --git a/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/interceptors/VersionInterceptorTest.kt b/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/interceptors/VersionInterceptorTest.kt index 9b543fe9..3c1eccb4 100644 --- a/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/interceptors/VersionInterceptorTest.kt +++ b/subsonic-api/src/integrationTest/kotlin/org/moire/ultrasonic/api/subsonic/interceptors/VersionInterceptorTest.kt @@ -44,6 +44,16 @@ class VersionInterceptorTest : BaseInterceptorTest() { .protocolVersion `should equal` SubsonicAPIVersions.V1_13_0 } + @Test + fun `Should update version from response with utf-8 bom`() { + mockWebServerRule.enqueueResponse("ping_ok_utf8_bom.json") + + client.newCall(createRequest {}).execute() + + (interceptor as VersionInterceptor) + .protocolVersion `should equal` SubsonicAPIVersions.V1_16_0 + } + @Test fun `Should not update version if response json doesn't contain version`() { mockWebServerRule.enqueueResponse("non_subsonic_response.json") diff --git a/subsonic-api/src/integrationTest/resources/ping_ok_utf8_bom.json b/subsonic-api/src/integrationTest/resources/ping_ok_utf8_bom.json new file mode 100644 index 00000000..e73dbbe6 --- /dev/null +++ b/subsonic-api/src/integrationTest/resources/ping_ok_utf8_bom.json @@ -0,0 +1,4 @@ +{"subsonic-response":{ + "status": "ok", + "version": "1.16.0" +}} \ No newline at end of file diff --git a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/interceptors/VersionInterceptor.kt b/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/interceptors/VersionInterceptor.kt index ae700f5a..e217c46b 100644 --- a/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/interceptors/VersionInterceptor.kt +++ b/subsonic-api/src/main/kotlin/org/moire/ultrasonic/api/subsonic/interceptors/VersionInterceptor.kt @@ -48,8 +48,7 @@ internal class VersionInterceptor( } private fun tryUpdateProtocolVersion(response: Response) { - val content = response.peekBody(DEFAULT_PEEK_BYTE_COUNT) - .byteStream().bufferedReader().readText() + val content = response.peekBody(DEFAULT_PEEK_BYTE_COUNT).byteStream() try { val jsonReader = jsonFactory.createParser(content)