From 050c064f0196ffca454a942943fb37d88ed2e94d Mon Sep 17 00:00:00 2001 From: Anton Makeev Date: Fri, 16 Jul 2010 17:35:17 +0400 Subject: [PATCH] CIDR-debugger: escaping program parameters --- .../execution/runners/ExecutionUtil.java | 17 ++++++++++++----- .../com/intellij/xdebugger/XDebugSession.java | 2 ++ .../xdebugger/impl/XDebugSessionImpl.java | 14 ++++++++++++++ 3 files changed, 28 insertions(+), 5 deletions(-) diff --git a/platform/lang-api/src/com/intellij/execution/runners/ExecutionUtil.java b/platform/lang-api/src/com/intellij/execution/runners/ExecutionUtil.java index 428ee23b2e46..1ace770954c4 100644 --- a/platform/lang-api/src/com/intellij/execution/runners/ExecutionUtil.java +++ b/platform/lang-api/src/com/intellij/execution/runners/ExecutionUtil.java @@ -28,6 +28,7 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.MessageType; import com.intellij.openapi.wm.ToolWindowId; import com.intellij.openapi.wm.ToolWindowManager; +import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NotNull; import javax.swing.event.HyperlinkEvent; @@ -47,16 +48,16 @@ public class ExecutionUtil { } public static void handleExecutionError(@NotNull final Project project, - @NotNull String toolWindowId, + @NotNull final String toolWindowId, @NotNull String taskName, @NotNull ExecutionException e) { if (e instanceof RunCanceledByUserException) return; + LOG.debug(e); + String error = e.getMessage(); HyperlinkListener listener = null; - LOG.debug(error); - if (error.contains("87") && e instanceof ProcessNotCreatedException) { final String commandLineString = ((ProcessNotCreatedException)e).getCommandLine().getCommandLineString(); if (commandLineString.length() > 1024 * 32) { @@ -72,12 +73,18 @@ public class ExecutionUtil { }; } } - String message = ExecutionBundle.message("error.running.configuration.with.error.error.message", taskName, error); + final String message = ExecutionBundle.message("error.running.configuration.with.error.error.message", taskName, error); if (ApplicationManager.getApplication().isUnitTestMode()) { LOG.error(message); } - ToolWindowManager.getInstance(project).notifyByBalloon(toolWindowId, MessageType.ERROR, message, null, listener); + final HyperlinkListener finalListener = listener; + UIUtil.invokeLaterIfNeeded(new Runnable() { + @Override + public void run() { + ToolWindowManager.getInstance(project).notifyByBalloon(toolWindowId, MessageType.ERROR, message, null, finalListener); + } + }); } } diff --git a/platform/xdebugger-api/src/com/intellij/xdebugger/XDebugSession.java b/platform/xdebugger-api/src/com/intellij/xdebugger/XDebugSession.java index 4a24013a7074..f924a5fb70a4 100644 --- a/platform/xdebugger-api/src/com/intellij/xdebugger/XDebugSession.java +++ b/platform/xdebugger-api/src/com/intellij/xdebugger/XDebugSession.java @@ -16,6 +16,7 @@ package com.intellij.xdebugger; +import com.intellij.execution.ExecutionException; import com.intellij.execution.ui.RunContentDescriptor; import com.intellij.execution.configurations.RunProfile; import com.intellij.openapi.project.Project; @@ -113,6 +114,7 @@ public interface XDebugSession extends AbstractDebuggerSession { void addSessionListener(@NotNull XDebugSessionListener listener); void removeSessionListener(@NotNull XDebugSessionListener listener); + void reportError(String message); @NotNull String getSessionName(); diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebugSessionImpl.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebugSessionImpl.java index 2384d409f96d..b2ebacdc00b9 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebugSessionImpl.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebugSessionImpl.java @@ -20,6 +20,7 @@ import com.intellij.execution.filters.HyperlinkInfo; import com.intellij.execution.filters.OpenFileHyperlinkInfo; import com.intellij.execution.process.ProcessHandler; import com.intellij.execution.runners.ExecutionEnvironment; +import com.intellij.execution.runners.ExecutionUtil; import com.intellij.execution.runners.ProgramRunner; import com.intellij.execution.ui.ConsoleView; import com.intellij.execution.ui.ConsoleViewContentType; @@ -28,8 +29,11 @@ import com.intellij.openapi.application.ReadAction; import com.intellij.openapi.application.Result; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.Project; +import com.intellij.openapi.ui.MessageType; import com.intellij.openapi.util.Disposer; import com.intellij.openapi.util.text.StringUtil; +import com.intellij.openapi.wm.ToolWindowId; +import com.intellij.openapi.wm.ToolWindowManager; import com.intellij.util.EventDispatcher; import com.intellij.util.ui.UIUtil; import com.intellij.xdebugger.*; @@ -536,6 +540,16 @@ public class XDebugSessionImpl implements XDebugSession { } } + @Override + public void reportError(final String message) { + UIUtil.invokeLaterIfNeeded(new Runnable() { + @Override + public void run() { + ToolWindowManager.getInstance(myProject).notifyByBalloon(ToolWindowId.DEBUG, MessageType.ERROR, message, null, null); + } + }); + } + private class MyBreakpointListener implements XBreakpointListener> { public void breakpointAdded(@NotNull final XBreakpoint breakpoint) { if (!myBreakpointsDisabled) {