8290313: Produce warning when user specified java.io.tmpdir directory doesn't exist

Reviewed-by: rriggs, naoto, coffeys
This commit is contained in:
Weibing Xiao 2022-11-23 17:10:05 +00:00 committed by Sean Coffey
parent 086763a629
commit 8df3bc4ec5
4 changed files with 140 additions and 4 deletions

View file

@ -35,7 +35,7 @@ import java.nio.file.Path;
import java.security.SecureRandom;
import java.util.ArrayList;
import java.util.List;
import sun.security.action.GetPropertyAction;
import jdk.internal.util.StaticProperty;
/**
* An abstract representation of file and directory pathnames.
@ -1986,8 +1986,8 @@ public class File
private TempDirectory() { }
// temporary directory location
private static final File tmpdir = new File(
GetPropertyAction.privilegedGetProperty("java.io.tmpdir"));
private static final File tmpdir = new File(StaticProperty.javaIoTmpDir());
static File location() {
return tmpdir;
}

View file

@ -2244,6 +2244,12 @@ public final class System {
// SecurityManager
Unsafe.getUnsafe().ensureClassInitialized(StringConcatFactory.class);
// Emit a warning if java.io.tmpdir is set via the command line
// to a directory that doesn't exist
if (SystemProps.isBadIoTmpdir()) {
System.err.println("WARNING: java.io.tmpdir directory does not exist");
}
String smProp = System.getProperty("java.security.manager");
boolean needWarning = false;
if (smProp != null) {

View file

@ -1,5 +1,5 @@
/*
* Copyright (c) 2018, 2021, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2018, 2022, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -28,6 +28,7 @@ package jdk.internal.util;
import java.lang.annotation.Native;
import java.util.HashMap;
import java.util.Map;
import java.io.File;
/**
* System Property initialization for internal use only
@ -40,6 +41,18 @@ public final class SystemProps {
// no instances
private SystemProps() {}
// Custom java.io.tmpdir via command line.
private static String customTmpdir;
/**
* Check if warning for custom java.io.tmpdir is required.
*
* @return a boolean value
*/
public static boolean isBadIoTmpdir() {
return customTmpdir != null && !(new File(customTmpdir).isDirectory());
}
/**
* Create and initialize the system properties from the native properties
* and command line properties.
@ -95,6 +108,8 @@ public final class SystemProps {
putIfAbsent(props, "line.separator", raw.propDefault(Raw._line_separator_NDX));
putIfAbsent(props, "file.separator", raw.propDefault(Raw._file_separator_NDX));
putIfAbsent(props, "path.separator", raw.propDefault(Raw._path_separator_NDX));
customTmpdir = props.get("java.io.tmpdir");
putIfAbsent(props, "java.io.tmpdir", raw.propDefault(Raw._java_io_tmpdir_NDX));
putIfAbsent(props, "http.proxyHost", raw.propDefault(Raw._http_proxyHost_NDX));
putIfAbsent(props, "http.proxyPort", raw.propDefault(Raw._http_proxyPort_NDX));