Skip to content

Commit

Permalink
Fix encoding of non-ascii contents written to parameter files.
Browse files Browse the repository at this point in the history
  • Loading branch information
zhengwei143 committed Jul 18, 2023
1 parent d39cf07 commit 55ac165
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 3 deletions.
1 change: 1 addition & 0 deletions src/main/java/com/google/devtools/build/lib/actions/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -192,6 +192,7 @@ java_library(
"//src/main/java/com/google/devtools/build/lib/util:filetype",
"//src/main/java/com/google/devtools/build/lib/util:os",
"//src/main/java/com/google/devtools/build/lib/util:shell_escaper",
"//src/main/java/com/google/devtools/build/lib/util:string",
"//src/main/java/com/google/devtools/build/lib/util:var_int",
"//src/main/java/com/google/devtools/build/lib/util/io",
"//src/main/java/com/google/devtools/build/lib/vfs",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
import com.google.devtools.build.lib.util.GccParamFileEscaper;
import com.google.devtools.build.lib.util.ShellEscaper;
import com.google.devtools.build.lib.vfs.PathFragment;
import com.google.devtools.build.lib.util.StringUtil;
import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.OutputStream;
Expand All @@ -33,6 +34,7 @@
import java.nio.CharBuffer;
import java.nio.charset.Charset;
import java.nio.charset.CharsetEncoder;
import java.util.stream.StreamSupport;

/**
* Support for parameter file generation (as used by gcc and other tools, e.g.
Expand Down Expand Up @@ -116,14 +118,16 @@ public static void writeParameterFile(

private static void writeContent(
OutputStream outputStream, Iterable<String> arguments, Charset charset) throws IOException {
ImmutableList<String> args = StreamSupport.stream(arguments.spliterator(), false)
.map(StringUtil::decodeBytestringUtf8).collect(ImmutableList.toImmutableList());
if (charset.equals(ISO_8859_1)) {
writeContentLatin1(outputStream, arguments);
writeContentLatin1(outputStream, args);
} else if (charset.equals(UTF_8)) {
writeContentUtf8(outputStream, arguments);
writeContentUtf8(outputStream, args);
} else {
// Generic charset support
OutputStreamWriter out = new OutputStreamWriter(outputStream, charset);
for (String line : arguments) {
for (String line : args) {
out.write(line);
out.write('\n');
}
Expand Down

0 comments on commit 55ac165

Please sign in to comment.