mirror of
https://github.com/cheeaun/phanpy.git
synced 2024-11-24 10:15:37 +03:00
Guard against invalid URLs
This commit is contained in:
parent
012e944a53
commit
cbb7378601
3 changed files with 28 additions and 17 deletions
|
@ -22,13 +22,15 @@ const Link = forwardRef((props, ref) => {
|
|||
|
||||
// Handle encodeURIComponent of searchParams values
|
||||
if (!!hash && hash !== '/' && hash.includes('?')) {
|
||||
const parsedHash = new URL(hash, location.origin); // Fake base URL
|
||||
if (parsedHash.searchParams.size) {
|
||||
const searchParamsStr = Array.from(parsedHash.searchParams.entries())
|
||||
.map(([key, value]) => `${key}=${encodeURIComponent(value)}`)
|
||||
.join('&');
|
||||
hash = parsedHash.pathname + '?' + searchParamsStr;
|
||||
}
|
||||
try {
|
||||
const parsedHash = new URL(hash, location.origin); // Fake base URL
|
||||
if (parsedHash.searchParams.size) {
|
||||
const searchParamsStr = Array.from(parsedHash.searchParams.entries())
|
||||
.map(([key, value]) => `${key}=${encodeURIComponent(value)}`)
|
||||
.join('&');
|
||||
hash = parsedHash.pathname + '?' + searchParamsStr;
|
||||
}
|
||||
} catch (e) {}
|
||||
}
|
||||
|
||||
const isActive = hash === to || decodeURIComponent(hash) === to;
|
||||
|
|
|
@ -2269,7 +2269,12 @@ function _unfurlMastodonLink(instance, url) {
|
|||
theURL = `https://${finalURL}`;
|
||||
}
|
||||
|
||||
const urlObj = new URL(theURL);
|
||||
let urlObj;
|
||||
try {
|
||||
urlObj = new URL(theURL);
|
||||
} catch (e) {
|
||||
return;
|
||||
}
|
||||
const domain = urlObj.hostname;
|
||||
const path = urlObj.pathname;
|
||||
// Regex /:username/:id, where username = @username or @username@domain, id = number
|
||||
|
|
|
@ -1,11 +1,15 @@
|
|||
export default function isMastodonLinkMaybe(url) {
|
||||
const { pathname, hash } = new URL(url);
|
||||
return (
|
||||
/^\/.*\/\d+$/i.test(pathname) ||
|
||||
/^\/@[^/]+\/(statuses|posts)\/\w+\/?$/i.test(pathname) || // GoToSocial, Takahe
|
||||
/^\/notes\/[a-z0-9]+$/i.test(pathname) || // Misskey, Firefish
|
||||
/^\/notes\/[a-z0-9]+$/i.test(pathname) || // Misskey, Calckey
|
||||
/^\/(notice|objects)\/[a-z0-9-]+$/i.test(pathname) || // Pleroma
|
||||
/#\/[^\/]+\.[^\/]+\/s\/.+/i.test(hash) // Phanpy 🫣
|
||||
);
|
||||
try {
|
||||
const { pathname, hash } = new URL(url);
|
||||
return (
|
||||
/^\/.*\/\d+$/i.test(pathname) ||
|
||||
/^\/@[^/]+\/(statuses|posts)\/\w+\/?$/i.test(pathname) || // GoToSocial, Takahe
|
||||
/^\/notes\/[a-z0-9]+$/i.test(pathname) || // Misskey, Firefish
|
||||
/^\/notes\/[a-z0-9]+$/i.test(pathname) || // Misskey, Calckey
|
||||
/^\/(notice|objects)\/[a-z0-9-]+$/i.test(pathname) || // Pleroma
|
||||
/#\/[^\/]+\.[^\/]+\/s\/.+/i.test(hash) // Phanpy 🫣
|
||||
);
|
||||
} catch (e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue