Skip to content

Commit f38b72c

Browse files
Avoid potential NPEs in Soundcloud extractors
1 parent 59e78c2 commit f38b72c

5 files changed

Lines changed: 19 additions & 23 deletions

File tree

extractor/src/main/java/org/schabi/newpipe/extractor/services/soundcloud/SoundcloudParsingHelper.java

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import org.schabi.newpipe.extractor.exceptions.ExtractionException;
2424
import org.schabi.newpipe.extractor.exceptions.ParsingException;
2525
import org.schabi.newpipe.extractor.exceptions.ReCaptchaException;
26+
import org.schabi.newpipe.extractor.localization.DateWrapper;
2627
import org.schabi.newpipe.extractor.services.soundcloud.extractors.SoundcloudChannelInfoItemExtractor;
2728
import org.schabi.newpipe.extractor.services.soundcloud.extractors.SoundcloudPlaylistInfoItemExtractor;
2829
import org.schabi.newpipe.extractor.services.soundcloud.extractors.SoundcloudLikesInfoItemExtractor;
@@ -39,8 +40,7 @@
3940
import java.io.IOException;
4041
import java.net.MalformedURLException;
4142
import java.net.URL;
42-
import java.time.OffsetDateTime;
43-
import java.time.format.DateTimeFormatter;
43+
import java.time.Instant;
4444
import java.time.format.DateTimeParseException;
4545
import java.util.Collections;
4646
import java.util.List;
@@ -133,18 +133,16 @@ public static synchronized String clientId() throws ExtractionException, IOExcep
133133
throw new ExtractionException("Couldn't extract client id");
134134
}
135135

136-
public static OffsetDateTime parseDateFrom(final String textualUploadDate)
136+
@Nullable
137+
public static DateWrapper parseDateFrom(@Nullable final String uploadDate)
137138
throws ParsingException {
139+
if (uploadDate == null) {
140+
return null;
141+
}
138142
try {
139-
return OffsetDateTime.parse(textualUploadDate);
140-
} catch (final DateTimeParseException e1) {
141-
try {
142-
return OffsetDateTime.parse(textualUploadDate, DateTimeFormatter
143-
.ofPattern("yyyy/MM/dd HH:mm:ss +0000"));
144-
} catch (final DateTimeParseException e2) {
145-
throw new ParsingException("Could not parse date: \"" + textualUploadDate + "\""
146-
+ ", " + e1.getMessage(), e2);
147-
}
143+
return new DateWrapper(Instant.parse(uploadDate));
144+
} catch (final DateTimeParseException e) {
145+
throw new ParsingException("Could not parse date: \"" + uploadDate + "\"", e);
148146
}
149147
}
150148

extractor/src/main/java/org/schabi/newpipe/extractor/services/soundcloud/extractors/SoundcloudCommentsInfoItemExtractor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ public String getTextualUploadDate() {
6969
@Nullable
7070
@Override
7171
public DateWrapper getUploadDate() throws ParsingException {
72-
return new DateWrapper(parseDateFrom(getTextualUploadDate()));
72+
return parseDateFrom(getTextualUploadDate());
7373
}
7474

7575
@Override

extractor/src/main/java/org/schabi/newpipe/extractor/services/soundcloud/extractors/SoundcloudStreamExtractor.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -88,18 +88,16 @@ public String getName() {
8888
return track.getString("title");
8989
}
9090

91-
@Nonnull
91+
@Nullable
9292
@Override
9393
public String getTextualUploadDate() {
94-
return track.getString("created_at")
95-
.replace("T", " ")
96-
.replace("Z", "");
94+
return track.getString("created_at");
9795
}
9896

99-
@Nonnull
97+
@Nullable
10098
@Override
10199
public DateWrapper getUploadDate() throws ParsingException {
102-
return new DateWrapper(parseDateFrom(track.getString("created_at")));
100+
return parseDateFrom(getTextualUploadDate());
103101
}
104102

105103
@Nonnull

extractor/src/main/java/org/schabi/newpipe/extractor/services/soundcloud/extractors/SoundcloudStreamInfoItemExtractor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ public String getTextualUploadDate() {
6868

6969
@Override
7070
public DateWrapper getUploadDate() throws ParsingException {
71-
return new DateWrapper(parseDateFrom(getTextualUploadDate()));
71+
return parseDateFrom(getTextualUploadDate());
7272
}
7373

7474
@Override

extractor/src/test/java/org/schabi/newpipe/extractor/services/soundcloud/SoundcloudStreamExtractorTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ protected void fetchExtractor(final StreamExtractor extractor) throws Exception
6363
@Override public long expectedTimestamp() { return TIMESTAMP; }
6464
@Override public long expectedViewCountAtLeast() { return 43000; }
6565
@Nullable @Override public String expectedUploadDate() { return "2019-05-16 16:28:45.000"; }
66-
@Nullable @Override public String expectedTextualUploadDate() { return "2019-05-16 16:28:45"; }
66+
@Nullable @Override public String expectedTextualUploadDate() { return "2019-05-16T16:28:45Z"; }
6767
@Override public long expectedLikeCountAtLeast() { return 600; }
6868
@Override public long expectedDislikeCountAtLeast() { return -1; }
6969
@Override public boolean expectedHasAudioStreams() { return false; }
@@ -127,7 +127,7 @@ public void testRelatedItems() throws Exception {
127127
@Override public long expectedTimestamp() { return TIMESTAMP; }
128128
@Override public long expectedViewCountAtLeast() { return 386000; }
129129
@Nullable @Override public String expectedUploadDate() { return "2016-11-11 01:16:37.000"; }
130-
@Nullable @Override public String expectedTextualUploadDate() { return "2016-11-11 01:16:37"; }
130+
@Nullable @Override public String expectedTextualUploadDate() { return "2016-11-11T01:16:37Z"; }
131131
@Override public long expectedLikeCountAtLeast() { return 7350; }
132132
@Override public long expectedDislikeCountAtLeast() { return -1; }
133133
@Override public boolean expectedHasAudioStreams() { return false; }
@@ -168,7 +168,7 @@ protected StreamExtractor createExtractor() throws Exception {
168168
@Override public long expectedTimestamp() { return TIMESTAMP; }
169169
@Override public long expectedViewCountAtLeast() { return 15000; }
170170
@Nullable @Override public String expectedUploadDate() { return "2022-10-03 18:49:49.000"; }
171-
@Nullable @Override public String expectedTextualUploadDate() { return "2022-10-03 18:49:49"; }
171+
@Nullable @Override public String expectedTextualUploadDate() { return "2022-10-03T18:49:49Z"; }
172172
@Override public long expectedLikeCountAtLeast() { return 10; }
173173
@Override public long expectedDislikeCountAtLeast() { return -1; }
174174
@Override public boolean expectedHasRelatedItems() { return false; }

0 commit comments

Comments
 (0)