From 74c48443571272284efe15994468944310b723c0 Mon Sep 17 00:00:00 2001 From: Jonah Graham Date: Tue, 25 Feb 2025 21:55:40 -0500 Subject: [PATCH] Avoid null value being converted to "null" string in environment (#1096) If the CDT Variable is APPEND or PREPEND, and the incoming environment did not contain that variable name, the resulting environment would have null. For example, if PATH was not set on the incoming environment, and PATH was supposed to be prepended with /usr/bin, this method would have set PATH=/usr/bin:null This change ensures that the delimeter + null are not prended/appended when the incoming value is null. --- .../envvar/EnvironmentVariableManager.java | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/envvar/EnvironmentVariableManager.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/envvar/EnvironmentVariableManager.java index 23d5b6e2e1f..2f8ed695264 100644 --- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/envvar/EnvironmentVariableManager.java +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/envvar/EnvironmentVariableManager.java @@ -457,12 +457,24 @@ public class EnvironmentVariableManager implements IEnvironmentVariableManager { case IEnvironmentVariable.ENVVAR_REPLACE: env.put(name, var.getValue()); break; - case IEnvironmentVariable.ENVVAR_APPEND: - env.put(name, env.get(name) + var.getDelimiter() + var.getValue()); + case IEnvironmentVariable.ENVVAR_APPEND: { + String oldValue = env.get(name); + if (oldValue == null) { + env.put(name, var.getValue()); + } else { + env.put(name, oldValue + var.getDelimiter() + var.getValue()); + } break; - case IEnvironmentVariable.ENVVAR_PREPEND: - env.put(name, var.getValue() + var.getDelimiter() + env.get(name)); + } + case IEnvironmentVariable.ENVVAR_PREPEND: { + String oldValue = env.get(name); + if (oldValue == null) { + env.put(name, var.getValue()); + } else { + env.put(name, var.getValue() + var.getDelimiter() + oldValue); + } break; + } case IEnvironmentVariable.ENVVAR_REMOVE: env.remove(name); break;