This is an automated email from the ASF dual-hosted git repository.

markt-asf pushed a commit to branch 9.0.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git


The following commit(s) were added to refs/heads/9.0.x by this push:
     new 382a52fdda Use Files API to create temporary docBase with 
antiLockingDocBase
382a52fdda is described below

commit 382a52fdda12b6ef68ff3f529b8465a44216546d
Author: Mark Thomas <[email protected]>
AuthorDate: Fri Jun 26 15:20:48 2026 +0100

    Use Files API to create temporary docBase with antiLockingDocBase
---
 .../org/apache/catalina/startup/ContextConfig.java | 22 +++++++++++-----------
 .../catalina/startup/LocalStrings.properties       |  2 +-
 .../catalina/startup/LocalStrings_fr.properties    |  1 -
 .../catalina/startup/LocalStrings_ja.properties    |  1 -
 .../catalina/startup/LocalStrings_ko.properties    |  1 -
 .../catalina/startup/LocalStrings_zh_CN.properties |  1 -
 webapps/docs/changelog.xml                         |  4 ++++
 7 files changed, 16 insertions(+), 16 deletions(-)

diff --git a/java/org/apache/catalina/startup/ContextConfig.java 
b/java/org/apache/catalina/startup/ContextConfig.java
index 049b055747..f734ea9005 100644
--- a/java/org/apache/catalina/startup/ContextConfig.java
+++ b/java/org/apache/catalina/startup/ContextConfig.java
@@ -27,6 +27,7 @@ import java.net.URI;
 import java.net.URISyntaxException;
 import java.net.URL;
 import java.net.URLConnection;
+import java.nio.file.Files;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
@@ -958,19 +959,18 @@ public class ContextConfig implements LifecycleListener {
                 return;
             }
             ContextName cn = new ContextName(path, context.getWebappVersion());
-            docBase = cn.getBaseName();
 
-            String tmp = System.getProperty("java.io.tmpdir");
-            File tmpFile = new File(tmp);
-            if (!tmpFile.isDirectory()) {
-                log.error(sm.getString("contextConfig.noAntiLocking", tmp, 
context.getName()));
-                return;
-            }
+            String prefix = "tomcat-" + deploymentCount++ + "-" + 
cn.getBaseName();
 
-            if (originalDocBase.toLowerCase(Locale.ENGLISH).endsWith(".war")) {
-                antiLockingDocBase = new File(tmpFile, deploymentCount++ + "-" 
+ docBase + ".war");
-            } else {
-                antiLockingDocBase = new File(tmpFile, deploymentCount++ + "-" 
+ docBase);
+            try {
+                if 
(originalDocBase.toLowerCase(Locale.ENGLISH).endsWith(".war")) {
+                    antiLockingDocBase = Files.createTempFile(prefix, 
".war").toFile();
+                } else {
+                    antiLockingDocBase = 
Files.createTempDirectory(prefix).toFile();
+                }
+            } catch (IOException ioe) {
+                log.error(sm.getString("contextConfig.noAntiLocking", 
context.getName()), ioe);
+                return;
             }
             antiLockingDocBase = antiLockingDocBase.getAbsoluteFile();
 
diff --git a/java/org/apache/catalina/startup/LocalStrings.properties 
b/java/org/apache/catalina/startup/LocalStrings.properties
index 03a334c8ba..2051212dd8 100644
--- a/java/org/apache/catalina/startup/LocalStrings.properties
+++ b/java/org/apache/catalina/startup/LocalStrings.properties
@@ -79,7 +79,7 @@ contextConfig.jspFile.error=JSP file [{0}] must start with a 
''/''
 contextConfig.jspFile.warning=WARNING: JSP file [{0}] must start with a ''/'' 
in Servlet 2.4
 contextConfig.loadError=Error loading generated code
 contextConfig.missingRealm=No Realm has been configured to authenticate against
-contextConfig.noAntiLocking=The value [{0}] configured for java.io.tmpdir does 
not point to a valid directory. The antiResourceLocking setting for the web 
application [{1}] will be ignored.
+contextConfig.noAntiLocking=Failed to create temporary docBase for [{0}]. The 
antiResourceLocking setting will be ignored.
 contextConfig.noJsp=Skipping JSP property group for URL [{0}], no JSP Servlet 
found for name [{1}]
 contextConfig.processAnnotationsDir.debug=Scanning directory for class files 
with annotations [{0}]
 contextConfig.processAnnotationsInParallelFailure=Parallel execution failed
diff --git a/java/org/apache/catalina/startup/LocalStrings_fr.properties 
b/java/org/apache/catalina/startup/LocalStrings_fr.properties
index b282fb898c..58a16a18dc 100644
--- a/java/org/apache/catalina/startup/LocalStrings_fr.properties
+++ b/java/org/apache/catalina/startup/LocalStrings_fr.properties
@@ -77,7 +77,6 @@ contextConfig.jspFile.error=Le fichier JSP [{0}] doit 
commencer par un ''/''
 contextConfig.jspFile.warning=WARNING : Le fichier JSP [{0}] doit commencer 
par un  ''/'' dans l''API Servlet 2.4
 contextConfig.loadError=Erreur lors du chargement du code généré
 contextConfig.missingRealm=Aucun royaume (realm) n'a été configuré pour 
réaliser l'authentification
-contextConfig.noAntiLocking=La valeur [{0}] configurée pour java.io.tmpdir ne 
correspond pas à un répertoire valide, le paramètre antiResourceLocking 
configuré pour l''application [{1}] sera ignoré
 contextConfig.noJsp=Le groupe de propriétés JSP pour l''URL [{0}] sera sauté, 
le Servlet JSP avec le nom [{1}] n''a pas été trouvé
 contextConfig.processAnnotationsDir.debug=Balayage du répertoire pour trouver 
des fichiers de classe avec annotations [{0}]
 contextConfig.processAnnotationsInParallelFailure=L'exécution en parallèle a 
échoué
diff --git a/java/org/apache/catalina/startup/LocalStrings_ja.properties 
b/java/org/apache/catalina/startup/LocalStrings_ja.properties
index add4aa4ddb..9c08153dd0 100644
--- a/java/org/apache/catalina/startup/LocalStrings_ja.properties
+++ b/java/org/apache/catalina/startup/LocalStrings_ja.properties
@@ -77,7 +77,6 @@ contextConfig.jspFile.error=JSPファイル [{0}] は''/''で始まらなけれ
 contextConfig.jspFile.warning=警告: Servlet 2.4ではJSPファイル [{0}] 
は''/''で始まらなければいけません
 contextConfig.loadError=生成されたコードのロード中にエラーが発生しました
 contextConfig.missingRealm=認証するためにレルムが設定されていません
-contextConfig.noAntiLocking=java.io.tmpdirに設定された値[{0}]が有効なディレクトリを指していません。 
Webアプリケーション[{1}]のantiResourceLocking設定は無視されます。
 contextConfig.noJsp=URL [{0}] の JSP プロパティ グループをスキップしています。名前 [{1}] の JSP 
サーブレットが見つかりません
 contextConfig.processAnnotationsDir.debug=[{0}] 配下のディレクトリからクラスファイルをスキャンします
 contextConfig.processAnnotationsInParallelFailure=並列実行に失敗しました
diff --git a/java/org/apache/catalina/startup/LocalStrings_ko.properties 
b/java/org/apache/catalina/startup/LocalStrings_ko.properties
index 92b47cbadf..d92459bd09 100644
--- a/java/org/apache/catalina/startup/LocalStrings_ko.properties
+++ b/java/org/apache/catalina/startup/LocalStrings_ko.properties
@@ -71,7 +71,6 @@ contextConfig.jarFile=Annotation들을 위해 Jar [{0}]을(를) 처리할 수 
 contextConfig.jspFile.error=JSP 파일 [{0}]은(는) 반드시 ''/''로 시작해야 합니다.
 contextConfig.jspFile.warning=경고: Servlet 2.4에서 JSP 파일 [{0}]은(는) 반드시 ''/''로 
시작해야 합니다.
 contextConfig.missingRealm=인증 처리 시 사용할 Realm이 설정되지 않았습니다.
-contextConfig.noAntiLocking=java.io.tmpdir 프로퍼티 값 [{0}]이(가) 유효한 디렉토리 경로가 아닙니다. 
해당 웹 애플리케이션 [{1}]을(를) 위한 antiResourceLocking 설정은 무시됩니다.
 contextConfig.processAnnotationsDir.debug=Annotation들을 가진 클래스 파일들을 찾기 위해 디렉토리 
[{0}]을(를) 스캔합니다.
 contextConfig.processAnnotationsInParallelFailure=병렬 처리 실패
 contextConfig.processAnnotationsJar.debug=Annotation들, [{0}]을(를) 가진 클래스 파일들을 
찾기 위해, JAR 파일을 스캔합니다.
diff --git a/java/org/apache/catalina/startup/LocalStrings_zh_CN.properties 
b/java/org/apache/catalina/startup/LocalStrings_zh_CN.properties
index c1f79125ee..6e53f0c8a9 100644
--- a/java/org/apache/catalina/startup/LocalStrings_zh_CN.properties
+++ b/java/org/apache/catalina/startup/LocalStrings_zh_CN.properties
@@ -71,7 +71,6 @@ contextConfig.jspFile.error=JSP文件[{0}]必须以''/''开头。
 contextConfig.jspFile.warning=警告:在Servlet 2.4 中,JSP文件[{0}]必须以‘/’开头
 contextConfig.loadError=加载生成的代码错误
 contextConfig.missingRealm=对应的认证领域未配置
-contextConfig.noAntiLocking=配置 
java.io.tmpdir的值[{0}]未指向有效路径。Web应用[{1}]antiResourceLocking配置将被忽略
 contextConfig.processAnnotationsDir.debug=使用注解 [{0}]扫描目录中的类文件
 contextConfig.processAnnotationsInParallelFailure=并行执行失败
 contextConfig.processAnnotationsJar.debug=扫描jar文件中注解[{0}]的类文件
diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml
index 60b5d797c7..a4a86f52c3 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -133,6 +133,10 @@
         Align DIGEST authentication with RFC 7616 and require clients to 
provide
         a valid <code>qop</code> parameter. (markt)
       </fix>
+      <fix>
+        Use <code>Files</code> API to create temporary docBase when
+        <code>antiLockingDocBase</code> is enabled. (markt)
+      </fix>
     </changelog>
   </subsection>
   <subsection name="Coyote">


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to