Skip to content

Commit 189e7da

Browse files
committed
[native_assets_builder] Don't pass in the whole environment
1 parent 8ef5115 commit 189e7da

File tree

1 file changed

+32
-2
lines changed

1 file changed

+32
-2
lines changed

pkgs/native_assets_builder/lib/src/build_runner/build_runner.dart

+32-2
Original file line numberDiff line numberDiff line change
@@ -434,6 +434,7 @@ class NativeAssetsBuildRunner {
434434
null,
435435
hookKernelFile,
436436
packageLayout!,
437+
_filteredEnvironment(_environmentVariablesFilter),
437438
),
438439
);
439440
if (buildOutput == null) return null;
@@ -489,6 +490,7 @@ class NativeAssetsBuildRunner {
489490
final environmentFile = File.fromUri(
490491
config.outputDirectory.resolve('../environment.json'),
491492
);
493+
final environment = _filteredEnvironment(_environmentVariablesFilter);
492494
if (buildOutputFile.existsSync() &&
493495
dependenciesHashFile.existsSync() &&
494496
environmentFile.existsSync()) {
@@ -512,7 +514,7 @@ ${e.message}
512514
!const MapEquality<String, String>().equals(
513515
(json.decode(await environmentFile.readAsString()) as Map)
514516
.cast<String, String>(),
515-
Platform.environment);
517+
environment);
516518
if (!dependenciesOutdated && !environmentChanged) {
517519
logger.info(
518520
[
@@ -535,14 +537,15 @@ ${e.message}
535537
resources,
536538
hookKernelFile,
537539
packageLayout,
540+
environment,
538541
);
539542
if (result == null) {
540543
if (await dependenciesHashFile.exists()) {
541544
await dependenciesHashFile.delete();
542545
}
543546
} else {
544547
await environmentFile.writeAsString(
545-
json.encode(Platform.environment),
548+
json.encode(environment),
546549
);
547550
final modifiedDuringBuild = await dependenciesHashes.hashFiles(
548551
[
@@ -561,6 +564,22 @@ ${e.message}
561564
);
562565
}
563566

567+
/// Limit the environment that hook invocations get to see.
568+
///
569+
/// This allowlist lists environment variables needed to run mainstream
570+
/// compilers.
571+
static const _environmentVariablesFilter = {
572+
'ANDROID_HOME',
573+
'HOME',
574+
'PATH',
575+
'PROGRAMDATA',
576+
'SYSTEMROOT',
577+
'TEMP',
578+
'TMP',
579+
'TMPDIR',
580+
'USER_PROFILE',
581+
};
582+
564583
Future<HookOutput?> _runHookForPackage(
565584
Hook hook,
566585
HookConfig config,
@@ -570,6 +589,7 @@ ${e.message}
570589
Uri? resources,
571590
File hookKernelFile,
572591
PackageLayout packageLayout,
592+
Map<String, String> environment,
573593
) async {
574594
final configFile = config.outputDirectory.resolve('../config.json');
575595
final configFileContents =
@@ -594,6 +614,8 @@ ${e.message}
594614
executable: dartExecutable,
595615
arguments: arguments,
596616
logger: logger,
617+
includeParentEnvironment: false,
618+
environment: environment,
597619
);
598620

599621
var deleteOutputIfExists = false;
@@ -650,6 +672,12 @@ ${e.message}
650672
}
651673
}
652674

675+
Map<String, String> _filteredEnvironment(Set<String> allowList) => {
676+
for (final entry in Platform.environment.entries)
677+
if (allowList.contains(entry.key.toUpperCase()))
678+
entry.key: entry.value,
679+
};
680+
653681
/// Compiles the hook to kernel and caches the kernel.
654682
///
655683
/// If any of the Dart source files, or the package config changed after
@@ -752,6 +780,8 @@ ${e.message}
752780
executable: dartExecutable,
753781
arguments: compileArguments,
754782
logger: logger,
783+
includeParentEnvironment: false,
784+
environment: _filteredEnvironment({'HOME', 'PUB_CACHE', 'SYSTEMROOT'}),
755785
);
756786
var success = true;
757787
if (compileResult.exitCode != 0) {

0 commit comments

Comments
 (0)