From c7316624fd4bc08690fc39ee219c247e7959ac6a Mon Sep 17 00:00:00 2001 From: Roman Shevchenko Date: Fri, 12 Jan 2018 11:17:10 +0100 Subject: [PATCH] [platform] resolves symlinks when checking VM options file location https://intellij-support.jetbrains.com/hc/en-us/community/posts/115000784344-Do-phpstorm64-vmoptions-in-config-1-override-append-or-2-completely-replace-the-defaults-in-IDE-HOME-bin- --- .../com/intellij/diagnostic/VMOptions.java | 25 ++++++++----------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/diagnostic/VMOptions.java b/platform/platform-impl/src/com/intellij/diagnostic/VMOptions.java index 7e798a5e879e..c94c8d66ad25 100644 --- a/platform/platform-impl/src/com/intellij/diagnostic/VMOptions.java +++ b/platform/platform-impl/src/com/intellij/diagnostic/VMOptions.java @@ -1,17 +1,5 @@ /* - * Copyright 2000-2017 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. */ package com.intellij.diagnostic; @@ -175,7 +163,7 @@ public class VMOptions { } vmOptionsFile = new File(vmOptionsFile).getAbsolutePath(); - if (!FileUtil.isAncestor(PathManager.getHomePath(), vmOptionsFile, true)) { + if (!FileUtil.isAncestor(canonicalPath(PathManager.getHomePath()), canonicalPath(vmOptionsFile), true)) { // a file is located outside the IDE installation - meaning it is safe to overwrite return new File(vmOptionsFile); } @@ -192,6 +180,15 @@ public class VMOptions { return new File(location, fileName); } + private static String canonicalPath(String path) { + try { + return new File(path).getCanonicalPath(); + } + catch (IOException e) { + return path; + } + } + // /** @deprecated use {@link #readOption(MemoryKind, boolean)} (to be removed in IDEA 2018) */ public static int readXmx() {