Skip to content

Commit ad1c695

Browse files
🤖 Pick PR #63368 (Harden ATA package name filtering) into release-6.0 (#63372)
Co-authored-by: Jake Bailey <5341706+jakebailey@users.noreply.github.com>
1 parent 0725fb4 commit ad1c695

File tree

5 files changed

+21
-19
lines changed

5 files changed

+21
-19
lines changed

‎src/jsTyping/jsTyping.ts‎

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -327,7 +327,8 @@ export const enum NameValidationResult {
327327
NameTooLong,
328328
NameStartsWithDot,
329329
NameStartsWithUnderscore,
330-
NameContainsNonURISafeCharacters,
330+
NameContainsInvalidCharacters,
331+
NameContainsNonURISafeCharacters = NameContainsInvalidCharacters, // for backward compatibility
331332
}
332333

333334
const maxPackageNameLength = 214;
@@ -381,8 +382,8 @@ function validatePackageNameWorker(packageName: string, supportScopedPackage: bo
381382
return NameValidationResult.Ok;
382383
}
383384
}
384-
if (encodeURIComponent(packageName) !== packageName) {
385-
return NameValidationResult.NameContainsNonURISafeCharacters;
385+
if (!/^[\w.-]+$/.test(packageName)) {
386+
return NameValidationResult.NameContainsInvalidCharacters;
386387
}
387388
return NameValidationResult.Ok;
388389
}
@@ -405,8 +406,8 @@ function renderPackageNameValidationFailureWorker(typing: string, result: NameVa
405406
return `'${typing}':: ${kind} name '${name}' cannot start with '.'`;
406407
case NameValidationResult.NameStartsWithUnderscore:
407408
return `'${typing}':: ${kind} name '${name}' cannot start with '_'`;
408-
case NameValidationResult.NameContainsNonURISafeCharacters:
409-
return `'${typing}':: ${kind} name '${name}' contains non URI safe characters`;
409+
case NameValidationResult.NameContainsInvalidCharacters:
410+
return `'${typing}':: ${kind} name '${name}' contains invalid characters`;
410411
case NameValidationResult.Ok:
411412
return Debug.fail(); // Shouldn't have called this.
412413
default:

‎src/testRunner/unittests/tsserver/typingsInstaller.ts‎

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1524,10 +1524,11 @@ describe("unittests:: tsserver:: typingsInstaller:: Validate package name:", ()
15241524
it("package name cannot start with underscore", () => {
15251525
assert.equal(validatePackageName("_foo"), NameValidationResult.NameStartsWithUnderscore);
15261526
});
1527-
it("package non URI safe characters are not supported", () => {
1528-
assert.equal(validatePackageName(" scope "), NameValidationResult.NameContainsNonURISafeCharacters);
1529-
assert.equal(validatePackageName("; say ‘Hello from TypeScript!’ #"), NameValidationResult.NameContainsNonURISafeCharacters);
1530-
assert.equal(validatePackageName("a/b/c"), NameValidationResult.NameContainsNonURISafeCharacters);
1527+
it("package invalid characters are not supported", () => {
1528+
assert.equal(validatePackageName(" scope "), NameValidationResult.NameContainsInvalidCharacters);
1529+
assert.equal(validatePackageName("; say ‘Hello from TypeScript!’ #"), NameValidationResult.NameContainsInvalidCharacters);
1530+
assert.equal(validatePackageName("a/b/c"), NameValidationResult.NameContainsInvalidCharacters);
1531+
assert.equal(validatePackageName("react'test"), NameValidationResult.NameContainsInvalidCharacters);
15311532
});
15321533
it("scoped package name is supported", () => {
15331534
assert.equal(validatePackageName("@scope/bar"), NameValidationResult.Ok);
@@ -1540,20 +1541,20 @@ describe("unittests:: tsserver:: typingsInstaller:: Validate package name:", ()
15401541
assert.deepEqual(validatePackageName("@_scope/bar"), { name: "_scope", isScopeName: true, result: NameValidationResult.NameStartsWithUnderscore });
15411542
assert.deepEqual(validatePackageName("@_scope/_bar"), { name: "_scope", isScopeName: true, result: NameValidationResult.NameStartsWithUnderscore });
15421543
});
1543-
it("scope name in scoped package name with non URI safe characters are not supported", () => {
1544-
assert.deepEqual(validatePackageName("@ scope /bar"), { name: " scope ", isScopeName: true, result: NameValidationResult.NameContainsNonURISafeCharacters });
1545-
assert.deepEqual(validatePackageName("@; say ‘Hello from TypeScript!’ #/bar"), { name: "; say ‘Hello from TypeScript!’ #", isScopeName: true, result: NameValidationResult.NameContainsNonURISafeCharacters });
1546-
assert.deepEqual(validatePackageName("@ scope / bar "), { name: " scope ", isScopeName: true, result: NameValidationResult.NameContainsNonURISafeCharacters });
1544+
it("scope name in scoped package name with invalid characters are not supported", () => {
1545+
assert.deepEqual(validatePackageName("@ scope /bar"), { name: " scope ", isScopeName: true, result: NameValidationResult.NameContainsInvalidCharacters });
1546+
assert.deepEqual(validatePackageName("@; say ‘Hello from TypeScript!’ #/bar"), { name: "; say ‘Hello from TypeScript!’ #", isScopeName: true, result: NameValidationResult.NameContainsInvalidCharacters });
1547+
assert.deepEqual(validatePackageName("@ scope / bar "), { name: " scope ", isScopeName: true, result: NameValidationResult.NameContainsInvalidCharacters });
15471548
});
15481549
it("package name in scoped package name cannot start with dot", () => {
15491550
assert.deepEqual(validatePackageName("@scope/.bar"), { name: ".bar", isScopeName: false, result: NameValidationResult.NameStartsWithDot });
15501551
});
15511552
it("package name in scoped package name cannot start with underscore", () => {
15521553
assert.deepEqual(validatePackageName("@scope/_bar"), { name: "_bar", isScopeName: false, result: NameValidationResult.NameStartsWithUnderscore });
15531554
});
1554-
it("package name in scoped package name with non URI safe characters are not supported", () => {
1555-
assert.deepEqual(validatePackageName("@scope/ bar "), { name: " bar ", isScopeName: false, result: NameValidationResult.NameContainsNonURISafeCharacters });
1556-
assert.deepEqual(validatePackageName("@scope/; say ‘Hello from TypeScript!’ #"), { name: "; say ‘Hello from TypeScript!’ #", isScopeName: false, result: NameValidationResult.NameContainsNonURISafeCharacters });
1555+
it("package name in scoped package name with invalid characters are not supported", () => {
1556+
assert.deepEqual(validatePackageName("@scope/ bar "), { name: " bar ", isScopeName: false, result: NameValidationResult.NameContainsInvalidCharacters });
1557+
assert.deepEqual(validatePackageName("@scope/; say ‘Hello from TypeScript!’ #"), { name: "; say ‘Hello from TypeScript!’ #", isScopeName: false, result: NameValidationResult.NameContainsInvalidCharacters });
15571558
});
15581559
});
15591560

‎tests/baselines/reference/tsserver/typingsInstaller/malformed-packagejson.js‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/projects/pro
200200
Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/projects/project/node_modules 1 undefined Project: /dev/null/inferredProject1* WatchType: Directory location for typing installer
201201
Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/projects/project/node_modules 1 undefined Project: /dev/null/inferredProject1* WatchType: Directory location for typing installer
202202
TI:: [hh:mm:ss:mss] Installing typings ["co } }"]
203-
TI:: [hh:mm:ss:mss] 'co } }':: Package name 'co } }' contains non URI safe characters
203+
TI:: [hh:mm:ss:mss] 'co } }':: Package name 'co } }' contains invalid characters
204204
TI:: [hh:mm:ss:mss] All typings are known to be missing or invalid - no need to install more typings
205205
TI:: [hh:mm:ss:mss] Sending response:
206206
{

‎tests/baselines/reference/tsserver/typingsInstaller/should-handle-node-core-modules.js‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -654,7 +654,7 @@ TI:: [hh:mm:ss:mss] Sending response:
654654
"projectName": "/dev/null/inferredProject1*"
655655
}
656656
TI:: [hh:mm:ss:mss] Installing typings ["s tream"]
657-
TI:: [hh:mm:ss:mss] 's tream':: Package name 's tream' contains non URI safe characters
657+
TI:: [hh:mm:ss:mss] 's tream':: Package name 's tream' contains invalid characters
658658
TI:: [hh:mm:ss:mss] All typings are known to be missing or invalid - no need to install more typings
659659
TI:: [hh:mm:ss:mss] Sending response:
660660
{

‎tests/baselines/reference/tsserver/typingsInstaller/should-not-initialize-invaalid-package-names.js‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /home/src/projects/pro
160160
Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: /home/src/projects/project/node_modules 1 undefined Project: /dev/null/inferredProject1* WatchType: Directory location for typing installer
161161
Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /home/src/projects/project/node_modules 1 undefined Project: /dev/null/inferredProject1* WatchType: Directory location for typing installer
162162
TI:: [hh:mm:ss:mss] Installing typings ["; say ‘Hello from TypeScript!’ #"]
163-
TI:: [hh:mm:ss:mss] '; say ‘Hello from TypeScript!’ #':: Package name '; say ‘Hello from TypeScript!’ #' contains non URI safe characters
163+
TI:: [hh:mm:ss:mss] '; say ‘Hello from TypeScript!’ #':: Package name '; say ‘Hello from TypeScript!’ #' contains invalid characters
164164
TI:: [hh:mm:ss:mss] All typings are known to be missing or invalid - no need to install more typings
165165
TI:: [hh:mm:ss:mss] Sending response:
166166
{

0 commit comments

Comments
 (0)