From d0a1041afd5edbe3d24a4ae43dda87b5a7e79703 Mon Sep 17 00:00:00 2001 From: TobiGr Date: Wed, 24 Feb 2021 14:13:12 +0100 Subject: [PATCH] Prevent NullPointerException and use equalsIgnorecase --- .../extractors/YoutubeStreamExtractor.java | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeStreamExtractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeStreamExtractor.java index 27c428ee6..b0d2c32a5 100644 --- a/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeStreamExtractor.java +++ b/extractor/src/main/java/org/schabi/newpipe/extractor/services/youtube/extractors/YoutubeStreamExtractor.java @@ -723,24 +723,31 @@ public class YoutubeStreamExtractor extends StreamExtractor { // E.g. if a video is age-restricted, the embedded player's playabilityStatus says, // that the video cannot be played outside of YouTube, // but does not show the original message. - final JsonObject youtubePlayerResponse = playerResponse; + JsonObject youtubePlayerResponse = playerResponse; if (playerResponse == null || !playerResponse.has("streamingData")) { // try to get player response by fetching video info page fetchVideoInfoPage(); } - JsonObject playabilityStatus = playerResponse.getObject("playabilityStatus"); + if (playerResponse == null && youtubePlayerResponse == null) { + throw new ExtractionException("Could not get playerResponse"); + } else if (youtubePlayerResponse == null) { + youtubePlayerResponse = playerResponse; + } + + JsonObject playabilityStatus = (playerResponse == null ? youtubePlayerResponse : playerResponse) + .getObject("playabilityStatus"); String status = playabilityStatus.getString("status"); // If status exist, and is not "OK", throw the specific exception based on error message // or a ContentNotAvailableException with the reason text if it's an unknown reason. - if (status != null && !status.toLowerCase().equals("ok")) { + if (status != null && !status.equalsIgnoreCase("ok")) { playabilityStatus = youtubePlayerResponse.getObject("playabilityStatus"); status = playabilityStatus.getString("status"); final String reason = playabilityStatus.getString("reason"); - if (status.toLowerCase().equals("login_required")) { + if (status.equalsIgnoreCase("login_required")) { if (reason == null) { final String message = playabilityStatus.getArray("messages").getString(0); if (message != null && message.equals("This is a private video. Please sign in to verify that you may see it.")) { @@ -751,7 +758,7 @@ public class YoutubeStreamExtractor extends StreamExtractor { throw new AgeRestrictedContentException("This age-restricted video cannot be watched."); } } - if (status.toLowerCase().equals("unplayable")) { + if (status.equalsIgnoreCase("unplayable")) { if (reason != null) { if (reason.equals("This video is only available to Music Premium members")) { throw new YoutubeMusicPremiumContentException();