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

JingsongLi pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/paimon.git


The following commit(s) were added to refs/heads/master by this push:
     new ad4e62d003 [api] Use Locale.ROOT in DLFOpenApiV4Signer (#10087)
ad4e62d003 is described below

commit ad4e62d003ff9a520779351555c9a985b8da6dab
Author: Ran Tao <[email protected]>
AuthorDate: Thu Sep 24 14:40:08 2026 +0800

    [api] Use Locale.ROOT in DLFOpenApiV4Signer (#10087)
---
 .../paimon/rest/auth/DLFOpenApiV4Signer.java       |  3 ++-
 .../paimon/rest/auth/DLFOpenApiV4SignerTest.java   | 22 ++++++++++++++++++++++
 2 files changed, 24 insertions(+), 1 deletion(-)

diff --git 
a/paimon-api/src/main/java/org/apache/paimon/rest/auth/DLFOpenApiV4Signer.java 
b/paimon-api/src/main/java/org/apache/paimon/rest/auth/DLFOpenApiV4Signer.java
index 4c090c7a8b..1b7e833210 100644
--- 
a/paimon-api/src/main/java/org/apache/paimon/rest/auth/DLFOpenApiV4Signer.java
+++ 
b/paimon-api/src/main/java/org/apache/paimon/rest/auth/DLFOpenApiV4Signer.java
@@ -34,6 +34,7 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 import java.util.UUID;
 
@@ -252,7 +253,7 @@ public class DLFOpenApiV4Signer implements DLFRequestSigner 
{
         Map<String, String> valueMap = new HashMap<>();
 
         for (Map.Entry<String, String> entry : headers.entrySet()) {
-            String lowerKey = entry.getKey().toLowerCase();
+            String lowerKey = entry.getKey().toLowerCase(Locale.ROOT);
             if (lowerKey.startsWith("x-acs-")
                     || lowerKey.equals(HOST_HEADER)
                     || lowerKey.equals(CONTENT_TYPE_HEADER)) {
diff --git 
a/paimon-api/src/test/java/org/apache/paimon/rest/auth/DLFOpenApiV4SignerTest.java
 
b/paimon-api/src/test/java/org/apache/paimon/rest/auth/DLFOpenApiV4SignerTest.java
index a81358aa88..67d40499de 100644
--- 
a/paimon-api/src/test/java/org/apache/paimon/rest/auth/DLFOpenApiV4SignerTest.java
+++ 
b/paimon-api/src/test/java/org/apache/paimon/rest/auth/DLFOpenApiV4SignerTest.java
@@ -25,6 +25,7 @@ import java.time.ZoneOffset;
 import java.time.ZonedDateTime;
 import java.util.HashMap;
 import java.util.LinkedHashMap;
+import java.util.Locale;
 import java.util.Map;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -164,6 +165,27 @@ public class DLFOpenApiV4SignerTest {
         assertEquals(auth1, auth2);
     }
 
+    @Test
+    public void testAuthorizationWithTurkishLocale() throws Exception {
+        Locale originalLocale = Locale.getDefault();
+        try {
+            Locale.setDefault(Locale.US);
+            DLFOpenApiV4Signer signer = new DLFOpenApiV4Signer(REGION);
+            DLFToken token = new DLFToken("TestAKId", "TestAKSecret", null, 
null);
+            RESTAuthParameter restAuthParameter =
+                    new RESTAuthParameter("/test/path", new HashMap<>(), 
"GET", null);
+            Map<String, String> headers = signer.signHeaders(null, NOW, null, 
HOST);
+            headers.put("x-acs-signature-nonce", "fixed-nonce-for-test");
+            headers.put("X-ACS-SIGNATURE-NONCE", 
headers.remove("x-acs-signature-nonce"));
+
+            String expected = signer.authorization(restAuthParameter, token, 
HOST, headers);
+            Locale.setDefault(new Locale("tr", "TR"));
+            assertEquals(expected, signer.authorization(restAuthParameter, 
token, HOST, headers));
+        } finally {
+            Locale.setDefault(originalLocale);
+        }
+    }
+
     @Test
     public void testSignatureCoversQueryParameters() throws Exception {
         DLFOpenApiV4Signer signer = new DLFOpenApiV4Signer(REGION);

Reply via email to