From 1ba34004bd0013d627dd83c99a12c89abc8d7454 Mon Sep 17 00:00:00 2001 From: Fabian Meumertzheim Date: Thu, 9 Mar 2023 08:13:34 -0800 Subject: [PATCH] Force the Bazel server Java runtime to use the root locale This ensures consistent behavior of string operations even if the individual operations do not set a locale. Without this change, Bazel can't operate in e.g. a Turkish locale, where it fails with error messages such as: In rule 'test', size 'medium' is not a valid size. This is because Turkish case mapping rules make it so that a capital ASCII 'I' lowercases to a non-ASCII variant of 'i'. Fixes #17541 Closes #17702. PiperOrigin-RevId: 515339563 Change-Id: I8417d0befd76ba6d140588be5f7e50529af3f6c7 --- src/main/cpp/blaze.cc | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/cpp/blaze.cc b/src/main/cpp/blaze.cc index ee0b32268bf47d..459dd524c62dc8 100644 --- a/src/main/cpp/blaze.cc +++ b/src/main/cpp/blaze.cc @@ -402,6 +402,13 @@ static vector GetServerExeArgs(const blaze_util::Path &jvm_path, // Force use of latin1 for file names. result.push_back("-Dfile.encoding=ISO-8859-1"); + // Force into the root locale to ensure consistent behavior of string + // operations across machines (e.g. in the tr_TR locale, capital ASCII 'I' + // turns into a special Unicode 'i' when converted to lower case). + // https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Locale.html#ROOT + result.push_back("-Duser.country="); + result.push_back("-Duser.language="); + result.push_back("-Duser.variant="); if (startup_options.host_jvm_debug) { BAZEL_LOG(USER)