Fixes #8379: validate column argument of vscode.previewHtml

This commit is contained in:
Alex Dima
2016-06-28 16:21:18 +02:00
parent 8b1c540ca3
commit 5d218261e8
3 changed files with 13 additions and 6 deletions

View File

@@ -72,7 +72,7 @@ suite('commands namespace tests', () => {
let virtualDocumentUri = Uri.parse('speciale://authority/path');
let title = 'A title';
return commands.executeCommand('vscode.previewHtml', virtualDocumentUri, title).then(success => {
return commands.executeCommand('vscode.previewHtml', virtualDocumentUri, ViewColumn.Three, title).then(success => {
assert.ok(success);
registration.dispose();
});

View File

@@ -170,7 +170,7 @@ class ExtHostApiCommands {
`,
args: [
{ name: 'uri', description: 'Uri of the resource to preview.', constraint: value => value instanceof URI || typeof value === 'string' },
{ name: 'column', description: '(optional) Column in which to preview.' },
{ name: 'column', description: '(optional) Column in which to preview.', constraint: value => typeof value === 'undefined' || (typeof value === 'number' && typeof types.ViewColumn[value] === 'string') },
{ name: 'label', description: '(optional) An human readable string that is used as title for the preview.', constraint: v => typeof v === 'string' || typeof v === 'undefined' }
]
});

View File

@@ -85,13 +85,20 @@ export class ExtHostCommands {
if (!command) {
return Promise.reject<T>(`Contributed command '${id}' does not exist.`);
}
try {
let {callback, thisArg, description} = command;
if (description) {
for (let i = 0; i < description.args.length; i++) {
let {callback, thisArg, description} = command;
if (description) {
for (let i = 0; i < description.args.length; i++) {
try {
validateConstraint(args[i], description.args[i].constraint);
} catch (err) {
return Promise.reject<T>(`Running the contributed command:'${id}' failed. Illegal argument '${description.args[i].name}' - ${description.args[i].description}`);
}
}
}
try {
let result = callback.apply(thisArg, args);
return Promise.resolve(result);
} catch (err) {