Skip to content

Commit 2e99a26

Browse files
committed
properly honour the isolate-flag by not adding the CWD to path
1 parent 18cd2c9 commit 2e99a26

File tree

3 files changed

+16
-9
lines changed

3 files changed

+16
-9
lines changed

graalpython/com.oracle.graal.python.shell/src/com/oracle/graal/python/shell/GraalPythonMain.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ public static void main(String[] args) {
6363
private ArrayList<String> programArgs = null;
6464
private String commandString = null;
6565
private String inputFile = null;
66-
private boolean ignoreScriptDir = false;
66+
private boolean isolateFlag = false;
6767
private boolean ignoreEnv = false;
6868
private boolean inspectFlag = false;
6969
private boolean verboseFlag = false;
@@ -132,7 +132,7 @@ protected List<String> preprocessArguments(List<String> givenArgs, Map<String, S
132132
case "-I":
133133
noUserSite = true;
134134
ignoreEnv = true;
135-
ignoreScriptDir = true;
135+
isolateFlag = true;
136136
break;
137137
case "-s":
138138
noUserSite = true;
@@ -402,6 +402,7 @@ protected void launch(Builder contextBuilder) {
402402
contextBuilder.option("python.AlwaysRunExcepthook", "true");
403403
contextBuilder.option("python.InspectFlag", Boolean.toString(inspectFlag));
404404
contextBuilder.option("python.VerboseFlag", Boolean.toString(verboseFlag));
405+
contextBuilder.option("python.IsolateFlag", Boolean.toString(isolateFlag));
405406
if (verboseFlag) {
406407
contextBuilder.option("log.python.level", "FINE");
407408
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/SysModuleBuiltins.java

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,6 @@ public void postInitialize(PythonCore core) {
180180
sys.setAttribute("graal_python_stdlib_home", PythonOptions.getOption(context, PythonOptions.StdLibHome));
181181
sys.setAttribute("graal_python_opaque_filesystem", PythonOptions.getOption(context, PythonOptions.OpaqueFilesystem));
182182
sys.setAttribute("graal_python_opaque_filesystem_prefix", PythonOptions.getOption(context, PythonOptions.OpaqueFilesystemPrefixes));
183-
sys.setAttribute("graal_python_unbuffered_io", PythonOptions.getOption(context, PythonOptions.UnbufferedIO));
184183
sys.setAttribute("__flags__", core.factory().createTuple(new Object[]{
185184
false, // bytes_warning
186185
!PythonOptions.getFlag(context, PythonOptions.PythonOptimizeFlag), // debug
@@ -189,7 +188,7 @@ public void postInitialize(PythonCore core) {
189188
PythonOptions.getFlag(context, PythonOptions.IgnoreEnvironmentFlag), // ignore_environment
190189
PythonOptions.getFlag(context, PythonOptions.InspectFlag), // inspect
191190
PythonOptions.getFlag(context, PythonOptions.TerminalIsInteractive), // interactive
192-
!context.isExecutableAccessAllowed(), // isolated
191+
PythonOptions.getFlag(context, PythonOptions.IsolateFlag), // isolated
193192
PythonOptions.getFlag(context, PythonOptions.NoSiteFlag), // no_site
194193
PythonOptions.getFlag(context, PythonOptions.NoUserSiteFlag), // no_user_site
195194
PythonOptions.getFlag(context, PythonOptions.PythonOptimizeFlag), // optimize
@@ -203,17 +202,21 @@ public void postInitialize(PythonCore core) {
203202
String option = PythonOptions.getOption(context, PythonOptions.PythonPath);
204203
Object[] path;
205204
int pathIdx = 0;
205+
boolean doIsolate = PythonOptions.getOption(context, PythonOptions.IsolateFlag);
206+
int defaultPaths = doIsolate ? 2 : 3;
206207
if (option.length() > 0) {
207208
String[] split = option.split(PythonCore.PATH_SEPARATOR);
208-
path = new Object[split.length + 3];
209+
path = new Object[split.length + defaultPaths];
209210
System.arraycopy(split, 0, path, 0, split.length);
210211
pathIdx = split.length;
211212
} else {
212-
path = new Object[3];
213+
path = new Object[defaultPaths];
213214
}
214-
path[pathIdx] = getScriptPath(env, args);
215-
path[pathIdx + 1] = PythonCore.getStdlibHome(env);
216-
path[pathIdx + 2] = PythonCore.getCoreHome(env) + PythonCore.FILE_SEPARATOR + "modules";
215+
if (!doIsolate) {
216+
path[pathIdx++] = getScriptPath(env, args);
217+
}
218+
path[pathIdx++] = PythonCore.getStdlibHome(env);
219+
path[pathIdx++] = PythonCore.getCoreHome(env) + PythonCore.FILE_SEPARATOR + "modules";
217220
PList sysPaths = core.factory().createList(path);
218221
sys.setAttribute("path", sysPaths);
219222
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/runtime/PythonOptions.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,9 @@ private PythonOptions() {
8888
@Option(category = OptionCategory.USER, help = "Equivalent to the Python -u flag. Force stdout and stderr to be unbuffered.", stability = OptionStability.STABLE) //
8989
public static final OptionKey<Boolean> UnbufferedIO = new OptionKey<>(false);
9090

91+
@Option(category = OptionCategory.USER, help = "Equivalent to the Python -I flag. Isolate from the users environment by not adding the cwd to the path", stability = OptionStability.STABLE) //
92+
public static final OptionKey<Boolean> IsolateFlag = new OptionKey<>(false);
93+
9194
@Option(category = OptionCategory.INTERNAL, help = "Expose internal sources as normal sources, so they will show up in the debugger and stacks") //
9295
public static final OptionKey<Boolean> ExposeInternalSources = new OptionKey<>(false);
9396

0 commit comments

Comments
 (0)