Skip to content

Commit 0411b8a

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

4 files changed

Lines changed: 16 additions & 13 deletions

File tree

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

Lines changed: 10 additions & 5 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;
@@ -133,16 +134,20 @@ public static synchronized String clientId() throws ExtractionException, IOExcep
133134
throw new ExtractionException("Couldn't extract client id");
134135
}
135136

136-
public static OffsetDateTime parseDateFrom(final String textualUploadDate)
137+
@Nullable
138+
public static DateWrapper parseDateFrom(@Nullable final String uploadDate)
137139
throws ParsingException {
140+
if (uploadDate == null) {
141+
return null;
142+
}
138143
try {
139-
return OffsetDateTime.parse(textualUploadDate);
144+
return new DateWrapper(OffsetDateTime.parse(uploadDate));
140145
} catch (final DateTimeParseException e1) {
141146
try {
142-
return OffsetDateTime.parse(textualUploadDate, DateTimeFormatter
143-
.ofPattern("yyyy/MM/dd HH:mm:ss +0000"));
147+
final var formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss +0000");
148+
return new DateWrapper(OffsetDateTime.parse(uploadDate, formatter));
144149
} catch (final DateTimeParseException e2) {
145-
throw new ParsingException("Could not parse date: \"" + textualUploadDate + "\""
150+
throw new ParsingException("Could not parse date: \"" + uploadDate + "\""
146151
+ ", " + e1.getMessage(), e2);
147152
}
148153
}

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

0 commit comments

Comments
 (0)