Skip to content

Commit 038ebde

Browse files
authored
Merge pull request #1143 from petlyh/peertube-non-urls
Avoid PeerTube accepting non-URLs
2 parents 1e93b1d + 61d237d commit 038ebde

11 files changed

Lines changed: 92 additions & 10 deletions

extractor/src/main/java/org/schabi/newpipe/extractor/services/peertube/linkHandler/PeertubeChannelLinkHandlerFactory.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
import org.schabi.newpipe.extractor.linkhandler.ListLinkHandlerFactory;
66
import org.schabi.newpipe.extractor.utils.Parser;
77

8+
import java.net.MalformedURLException;
9+
import java.net.URL;
810
import java.util.List;
911

1012
public final class PeertubeChannelLinkHandlerFactory extends ListLinkHandlerFactory {
@@ -51,8 +53,13 @@ public String getUrl(final String id,
5153

5254
@Override
5355
public boolean onAcceptUrl(final String url) {
54-
return url.contains("/accounts/") || url.contains("/a/")
55-
|| url.contains("/video-channels/") || url.contains("/c/");
56+
try {
57+
new URL(url);
58+
return url.contains("/accounts/") || url.contains("/a/")
59+
|| url.contains("/video-channels/") || url.contains("/c/");
60+
} catch (final MalformedURLException e) {
61+
return false;
62+
}
5663
}
5764

5865
/**

extractor/src/main/java/org/schabi/newpipe/extractor/services/peertube/linkHandler/PeertubeCommentsLinkHandlerFactory.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
import org.schabi.newpipe.extractor.exceptions.ParsingException;
66
import org.schabi.newpipe.extractor.linkhandler.ListLinkHandlerFactory;
77

8+
import java.net.MalformedURLException;
9+
import java.net.URL;
810
import java.util.List;
911

1012
public final class PeertubeCommentsLinkHandlerFactory extends ListLinkHandlerFactory {
@@ -27,7 +29,12 @@ public String getId(final String url) throws ParsingException, UnsupportedOperat
2729

2830
@Override
2931
public boolean onAcceptUrl(final String url) throws FoundAdException {
30-
return url.contains("/videos/") || url.contains("/w/");
32+
try {
33+
new URL(url);
34+
return url.contains("/videos/") || url.contains("/w/");
35+
} catch (final MalformedURLException e) {
36+
return false;
37+
}
3138
}
3239

3340
@Override

extractor/src/main/java/org/schabi/newpipe/extractor/services/peertube/linkHandler/PeertubePlaylistLinkHandlerFactory.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
import org.schabi.newpipe.extractor.linkhandler.ListLinkHandlerFactory;
77
import org.schabi.newpipe.extractor.utils.Parser;
88

9+
import java.net.MalformedURLException;
10+
import java.net.URL;
911
import java.util.List;
1012

1113
public final class PeertubePlaylistLinkHandlerFactory extends ListLinkHandlerFactory {
@@ -52,9 +54,10 @@ public String getId(final String url) throws ParsingException, UnsupportedOperat
5254
@Override
5355
public boolean onAcceptUrl(final String url) {
5456
try {
57+
new URL(url);
5558
getId(url);
5659
return true;
57-
} catch (final ParsingException e) {
60+
} catch (final ParsingException | MalformedURLException e) {
5861
return false;
5962
}
6063
}

extractor/src/main/java/org/schabi/newpipe/extractor/services/peertube/linkHandler/PeertubeStreamLinkHandlerFactory.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66
import org.schabi.newpipe.extractor.linkhandler.LinkHandlerFactory;
77
import org.schabi.newpipe.extractor.utils.Parser;
88

9+
import java.net.MalformedURLException;
10+
import java.net.URL;
11+
912
public final class PeertubeStreamLinkHandlerFactory extends LinkHandlerFactory {
1013

1114
private static final PeertubeStreamLinkHandlerFactory INSTANCE
@@ -47,9 +50,10 @@ public boolean onAcceptUrl(final String url) throws FoundAdException {
4750
return false;
4851
}
4952
try {
53+
new URL(url);
5054
getId(url);
5155
return true;
52-
} catch (final ParsingException e) {
56+
} catch (final ParsingException | MalformedURLException e) {
5357
return false;
5458
}
5559
}

extractor/src/main/java/org/schabi/newpipe/extractor/services/peertube/linkHandler/PeertubeTrendingLinkHandlerFactory.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
import org.schabi.newpipe.extractor.exceptions.ParsingException;
55
import org.schabi.newpipe.extractor.linkhandler.ListLinkHandlerFactory;
66

7+
import java.net.MalformedURLException;
8+
import java.net.URL;
79
import java.util.List;
810
import java.util.Map;
911

@@ -69,8 +71,13 @@ public String getId(final String url) throws ParsingException, UnsupportedOperat
6971

7072
@Override
7173
public boolean onAcceptUrl(final String url) {
72-
return url.contains("/videos?") || url.contains("/videos/trending")
73-
|| url.contains("/videos/most-liked") || url.contains("/videos/recently-added")
74-
|| url.contains("/videos/local");
74+
try {
75+
new URL(url);
76+
return url.contains("/videos?") || url.contains("/videos/trending")
77+
|| url.contains("/videos/most-liked") || url.contains("/videos/recently-added")
78+
|| url.contains("/videos/local");
79+
} catch (final MalformedURLException e) {
80+
return false;
81+
}
7582
}
7683
}

extractor/src/test/java/org/schabi/newpipe/extractor/services/peertube/PeertubeChannelLinkHandlerFactoryTest.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@
77
import org.schabi.newpipe.extractor.exceptions.ParsingException;
88
import org.schabi.newpipe.extractor.services.peertube.linkHandler.PeertubeChannelLinkHandlerFactory;
99

10-
import static org.junit.jupiter.api.Assertions.assertEquals;
11-
import static org.junit.jupiter.api.Assertions.assertTrue;
10+
import static org.junit.jupiter.api.Assertions.*;
1211
import static org.schabi.newpipe.extractor.ServiceList.PeerTube;
12+
import static org.schabi.newpipe.extractor.services.peertube.PeertubeLinkHandlerFactoryTestHelper.testDoNotAcceptNonURLs;
1313

1414
/**
1515
* Test for {@link PeertubeChannelLinkHandlerFactory}
@@ -33,6 +33,8 @@ public void acceptUrlTest() throws ParsingException {
3333
assertTrue(linkHandler.acceptUrl("https://peertube.stream/video-channels/kranti_channel@videos.squat.net/videos"));
3434
assertTrue(linkHandler.acceptUrl("https://peertube.stream/c/kranti_channel@videos.squat.net/videos"));
3535
assertTrue(linkHandler.acceptUrl("https://peertube.stream/api/v1/video-channels/7682d9f2-07be-4622-862e-93ec812e2ffa"));
36+
37+
testDoNotAcceptNonURLs(linkHandler);
3638
}
3739

3840
@Test

extractor/src/test/java/org/schabi/newpipe/extractor/services/peertube/PeertubeCommentsLinkHandlerFactoryTest.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
import static org.junit.jupiter.api.Assertions.assertEquals;
1111
import static org.junit.jupiter.api.Assertions.assertTrue;
12+
import static org.schabi.newpipe.extractor.services.peertube.PeertubeLinkHandlerFactoryTestHelper.testDoNotAcceptNonURLs;
1213

1314
/**
1415
* Test for {@link PeertubeCommentsLinkHandlerFactory}
@@ -31,6 +32,8 @@ public void acceptUrlTest() throws ParsingException {
3132
assertTrue(linkHandler.acceptUrl("https://framatube.org/videos/watch/9c9de5e8-0a1e-484a-b099-e80766180a6d"));
3233
assertTrue(linkHandler.acceptUrl("https://framatube.org/w/9c9de5e8-0a1e-484a-b099-e80766180a6d"));
3334
assertTrue(linkHandler.acceptUrl("https://framatube.org/api/v1/videos/9c9de5e8-0a1e-484a-b099-e80766180a6d/comment-threads?start=0&count=10&sort=-createdAt"));
35+
36+
testDoNotAcceptNonURLs(linkHandler);
3437
}
3538

3639
@Test
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package org.schabi.newpipe.extractor.services.peertube;
2+
3+
import org.schabi.newpipe.extractor.exceptions.ParsingException;
4+
import org.schabi.newpipe.extractor.linkhandler.LinkHandlerFactory;
5+
import org.schabi.newpipe.extractor.linkhandler.ListLinkHandlerFactory;
6+
7+
import static org.junit.jupiter.api.Assertions.assertFalse;
8+
9+
public class PeertubeLinkHandlerFactoryTestHelper {
10+
11+
public static void testDoNotAcceptNonURLs(LinkHandlerFactory linkHandler)
12+
throws ParsingException {
13+
assertFalse(linkHandler.acceptUrl("orchestr/a/"));
14+
assertFalse(linkHandler.acceptUrl("/a/"));
15+
assertFalse(linkHandler.acceptUrl("something/c/"));
16+
assertFalse(linkHandler.acceptUrl("/c/"));
17+
assertFalse(linkHandler.acceptUrl("videos/"));
18+
assertFalse(linkHandler.acceptUrl("I-hate-videos/"));
19+
assertFalse(linkHandler.acceptUrl("/w/"));
20+
assertFalse(linkHandler.acceptUrl("ksmg/w/"));
21+
assertFalse(linkHandler.acceptUrl("a reandom search query"));
22+
assertFalse(linkHandler.acceptUrl("test 230 "));
23+
assertFalse(linkHandler.acceptUrl("986513"));
24+
}
25+
26+
public static void testDoNotAcceptNonURLs(ListLinkHandlerFactory linkHandler)
27+
throws ParsingException {
28+
assertFalse(linkHandler.acceptUrl("orchestr/a/"));
29+
assertFalse(linkHandler.acceptUrl("/a/"));
30+
assertFalse(linkHandler.acceptUrl("something/c/"));
31+
assertFalse(linkHandler.acceptUrl("/c/"));
32+
assertFalse(linkHandler.acceptUrl("videos/"));
33+
assertFalse(linkHandler.acceptUrl("I-hate-videos/"));
34+
assertFalse(linkHandler.acceptUrl("/w/"));
35+
assertFalse(linkHandler.acceptUrl("ksmg/w/"));
36+
assertFalse(linkHandler.acceptUrl("a reandom search query"));
37+
assertFalse(linkHandler.acceptUrl("test 230 "));
38+
assertFalse(linkHandler.acceptUrl("986513"));
39+
}
40+
}

extractor/src/test/java/org/schabi/newpipe/extractor/services/peertube/PeertubePlaylistLinkHandlerFactoryTest.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
1111
import static org.junit.jupiter.api.Assertions.assertEquals;
1212
import static org.junit.jupiter.api.Assertions.assertTrue;
13+
import static org.schabi.newpipe.extractor.services.peertube.PeertubeLinkHandlerFactoryTestHelper.testDoNotAcceptNonURLs;
1314

1415
/**
1516
* Test for {@link PeertubePlaylistLinkHandlerFactory}
@@ -33,6 +34,8 @@ void acceptUrlTest() throws ParsingException {
3334
assertTrue(linkHandler.acceptUrl("https://framatube.org/w/p/dacdc4ef-5160-4846-9b70-a655880da667"));
3435
assertTrue(linkHandler.acceptUrl("https://framatube.org/videos/watch/playlist/96b0ee2b-a5a7-4794-8769-58d8ccb79ab7"));
3536
assertTrue(linkHandler.acceptUrl("https://framatube.org/w/p/96b0ee2b-a5a7-4794-8769-58d8ccb79ab7"));
37+
38+
testDoNotAcceptNonURLs(linkHandler);
3639
}
3740

3841
@Test

extractor/src/test/java/org/schabi/newpipe/extractor/services/peertube/PeertubeStreamLinkHandlerFactoryTest.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
import static org.junit.jupiter.api.Assertions.*;
1111
import static org.schabi.newpipe.extractor.ServiceList.PeerTube;
12+
import static org.schabi.newpipe.extractor.services.peertube.PeertubeLinkHandlerFactoryTestHelper.testDoNotAcceptNonURLs;
1213

1314
/**
1415
* Test for {@link PeertubeStreamLinkHandlerFactory}
@@ -71,5 +72,7 @@ public void testAcceptUrl() throws ParsingException {
7172
// make sure playlists aren't accepted
7273
assertFalse(linkHandler.acceptUrl("https://framatube.org/w/p/dacdc4ef-5160-4846-9b70-a655880da667"));
7374
assertFalse(linkHandler.acceptUrl("https://framatube.org/videos/watch/playlist/dacdc4ef-5160-4846-9b70-a655880da667"));
75+
76+
PeertubeLinkHandlerFactoryTestHelper.testDoNotAcceptNonURLs(linkHandler);
7477
}
7578
}

0 commit comments

Comments
 (0)