From 410c01547ced2ca697da121420296563549fff33 Mon Sep 17 00:00:00 2001 From: Bertrand Jaunet Date: Tue, 28 Jan 2025 08:03:26 +0100 Subject: [PATCH] DownloaderImpl: Auto-close resources and simplify header setting MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The headers should be overwritten in the same way, based on how `.header` is the same as `.removeHeader().addHeader()`. We weren’t closing the request resources after using them, potentially leaking file handles. This will add autoclosing for both the request and the body objects. --- .../org/schabi/newpipe/DownloaderImpl.java | 54 +++++++++---------- 1 file changed, 25 insertions(+), 29 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/DownloaderImpl.java b/app/src/main/java/org/schabi/newpipe/DownloaderImpl.java index fda45e39ed1..5159fbfdc19 100644 --- a/app/src/main/java/org/schabi/newpipe/DownloaderImpl.java +++ b/app/src/main/java/org/schabi/newpipe/DownloaderImpl.java @@ -137,7 +137,8 @@ public Response execute(@NonNull final Request request) } final okhttp3.Request.Builder requestBuilder = new okhttp3.Request.Builder() - .method(httpMethod, requestBody).url(url) + .method(httpMethod, requestBody) + .url(url) .addHeader("User-Agent", USER_AGENT); final String cookies = getCookies(url); @@ -145,38 +146,33 @@ public Response execute(@NonNull final Request request) requestBuilder.addHeader("Cookie", cookies); } - for (final Map.Entry> pair : headers.entrySet()) { - final String headerName = pair.getKey(); - final List headerValueList = pair.getValue(); + headers.forEach((headerName, headerValueList) -> { + requestBuilder.removeHeader(headerName); + headerValueList.forEach(headerValue -> + requestBuilder.addHeader(headerName, headerValue)); + }); + + try ( + okhttp3.Response response = client.newCall(requestBuilder.build()).execute() + ) { + if (response.code() == 429) { + throw new ReCaptchaException("reCaptcha Challenge requested", url); + } - if (headerValueList.size() > 1) { - requestBuilder.removeHeader(headerName); - for (final String headerValue : headerValueList) { - requestBuilder.addHeader(headerName, headerValue); + String responseBodyToReturn = null; + try (ResponseBody body = response.body()) { + if (body != null) { + responseBodyToReturn = body.string(); } - } else if (headerValueList.size() == 1) { - requestBuilder.header(headerName, headerValueList.get(0)); } + final String latestUrl = response.request().url().toString(); + return new Response( + response.code(), + response.message(), + response.headers().toMultimap(), + responseBodyToReturn, + latestUrl); } - - final okhttp3.Response response = client.newCall(requestBuilder.build()).execute(); - - if (response.code() == 429) { - response.close(); - - throw new ReCaptchaException("reCaptcha Challenge requested", url); - } - - final ResponseBody body = response.body(); - String responseBodyToReturn = null; - - if (body != null) { - responseBodyToReturn = body.string(); - } - - final String latestUrl = response.request().url().toString(); - return new Response(response.code(), response.message(), response.headers().toMultimap(), - responseBodyToReturn, latestUrl); } }