Skip to content

Commit

Permalink
Permit usage of javaagent (no prompt) if resource not in workspace
Browse files Browse the repository at this point in the history
- Fixes #1965

Signed-off-by: Roland Grunberg <rgrunber@redhat.com>
  • Loading branch information
rgrunber committed Sep 7, 2021
1 parent 8c4fa79 commit 0375939
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 6 deletions.
7 changes: 4 additions & 3 deletions src/javaServerStarter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import * as os from 'os';
import * as fs from 'fs';
import { StreamInfo, Executable, ExecutableOptions } from 'vscode-languageclient/node';
import { RequirementsData } from './requirements';
import { getJavaEncoding, IS_WORKSPACE_VMARGS_ALLOWED, getKey, getJavaagentFlag } from './settings';
import { getJavaEncoding, IS_WORKSPACE_VMARGS_ALLOWED, getKey, getJavaagentFlag, isInWorkspaceFolder } from './settings';
import { logger } from './log';
import { getJavaConfiguration, deleteDirectory, ensureExists, getTimestamp } from './utils';
import { workspace, ExtensionContext } from 'vscode';
Expand Down Expand Up @@ -65,11 +65,12 @@ function prepareParams(requirements: RequirementsData, javaConfiguration, worksp
}
let vmargsCheck = workspace.getConfiguration().inspect('java.jdt.ls.vmargs').workspaceValue;
if (vmargsCheck !== undefined) {
const isWorkspaceTrusted = (workspace as any).isTrusted; // keep compatibility for old engines < 1.56.0
const agentFlag = getJavaagentFlag(vmargsCheck);
if (agentFlag !== null) {
if (agentFlag !== null && (isWorkspaceTrusted === undefined || !isWorkspaceTrusted)) {
const keyVmargs = getKey(IS_WORKSPACE_VMARGS_ALLOWED, context.storagePath, vmargsCheck);
const key = context.globalState.get(keyVmargs);
if (key !== true) {
if (key !== true && (workspace.workspaceFolders && isInWorkspaceFolder(agentFlag, workspace.workspaceFolders))) {
vmargsCheck = workspace.getConfiguration().inspect('java.jdt.ls.vmargs').globalValue;
}
}
Expand Down
11 changes: 8 additions & 3 deletions src/settings.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
'use strict';

import * as path from 'path';
import { window, Uri, workspace, WorkspaceConfiguration, commands, ConfigurationTarget, env, ExtensionContext, TextEditor, Range, Disposable } from 'vscode';
import { window, Uri, workspace, WorkspaceConfiguration, commands, ConfigurationTarget, env, ExtensionContext, TextEditor, Range, Disposable, WorkspaceFolder } from 'vscode';
import { Commands } from './commands';
import { getJavaConfiguration } from './utils';

Expand Down Expand Up @@ -141,11 +141,12 @@ export async function checkJavaPreferences(context: ExtensionContext) {
}
const vmargs = workspace.getConfiguration().inspect('java.jdt.ls.vmargs').workspaceValue;
if (vmargs !== undefined) {
const isWorkspaceTrusted = (workspace as any).isTrusted; // keep compatibility for old engines < 1.56.0
const agentFlag = getJavaagentFlag(vmargs);
if (agentFlag !== null) {
if (agentFlag !== null && (isWorkspaceTrusted === undefined || !isWorkspaceTrusted)) {
const keyVmargs = getKey(IS_WORKSPACE_VMARGS_ALLOWED, context.storagePath, vmargs);
const vmargsVerified = globalState.get(keyVmargs);
if (vmargsVerified === undefined || vmargsVerified === null) {
if ((vmargsVerified === undefined || vmargsVerified === null) && (workspace.workspaceFolders && isInWorkspaceFolder(agentFlag, workspace.workspaceFolders))) {
await window.showErrorMessage(`Security Warning! The java.jdt.ls.vmargs variable defined in ${env.appName} settings includes the (${agentFlag}) javagent preference. Do you allow it to be used?`, disallow, allow).then(async selection => {
if (selection === allow) {
globalState.update(keyVmargs, true);
Expand Down Expand Up @@ -187,6 +188,10 @@ export function getJavaagentFlag(vmargs) {
return agentFlag;
}

export function isInWorkspaceFolder(loc: string, workspaceFolders: readonly WorkspaceFolder[]) {
return !path.isAbsolute(loc) || workspaceFolders.some(dir => loc.startsWith(dir.uri.fsPath));
}

export enum ServerMode {
STANDARD = 'Standard',
LIGHTWEIGHT = 'LightWeight',
Expand Down

0 comments on commit 0375939

Please sign in to comment.