Skip to content

Commit 940bcbb

Browse files
authored
Add validation of pr and issue links (#6980)
1 parent 1d03219 commit 940bcbb

1 file changed

Lines changed: 28 additions & 2 deletions

File tree

src/common/uri.ts

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -502,6 +502,32 @@ export function fromRepoUri(uri: vscode.Uri): RepoUriParams | undefined {
502502
} catch (e) { }
503503
}
504504

505+
const ownerRegex = /^(?!-)(?!.*--)[a-zA-Z0-9-]+(?<!-)$/;
506+
const repoRegex = /^[a-zA-Z0-9_.-]+$/;
507+
508+
function validateOpenWebviewParams(owner?: string, repo?: string, number?: string): boolean {
509+
if (!owner || !repo || !number) {
510+
return false;
511+
}
512+
const asNumber = Number(number);
513+
if (isNaN(asNumber) || asNumber <= 0) {
514+
return false;
515+
}
516+
if (isNaN(Number(number))) {
517+
return false;
518+
}
519+
if (owner.length === 0 || repo.length === 0) {
520+
return false;
521+
}
522+
if (!ownerRegex.test(owner)) {
523+
return false;
524+
}
525+
if (!repoRegex.test(repo)) {
526+
return false;
527+
}
528+
return true;
529+
}
530+
505531
export enum UriHandlerPaths {
506532
OpenIssueWebview = '/open-issue-webview',
507533
OpenPullRequestWebview = '/open-pull-request-webview',
@@ -527,7 +553,7 @@ export function fromOpenIssueWebviewUri(uri: vscode.Uri): OpenIssueWebviewUriPar
527553
}
528554
try {
529555
const query = JSON.parse(uri.query.split('&')[0]);
530-
if (!query.owner || !query.repo || !query.issueNumber) {
556+
if (!validateOpenWebviewParams(query.owner, query.repo, query.issueNumber)) {
531557
return;
532558
}
533559
return query;
@@ -554,7 +580,7 @@ export function fromOpenPullRequestWebviewUri(uri: vscode.Uri): OpenPullRequestW
554580
}
555581
try {
556582
const query = JSON.parse(uri.query.split('&')[0]);
557-
if (!query.owner || !query.repo || !query.pullRequestNumber) {
583+
if (!validateOpenWebviewParams(query.owner, query.repo, query.pullRequestNumber)) {
558584
return;
559585
}
560586
return query;

0 commit comments

Comments
 (0)