Skip to content

Commit

Permalink
Windows - Fix handling of utf8 command line arguments (#17854)
Browse files Browse the repository at this point in the history
This relates to:

Issues:
- #17036
- grpc/grpc#36518
PRs:
- #15519

The fix in #15519 has one line missing that breaks `Grpc.Tools` and doesn't actually fix the problem it proports to fix.

This PR fixes this.

This fix needs to  also be applied to the version of protobuf that is used by gRPC.

There are various scenarios that need to be tested on Windows:

**A. Non-ascii command line arguments, e.g.**
```
protoc.exe --csharp_out=out --proto_path=E:\work\grpc\protoctest\test-Dré E:\work\grpc\protoctest\test-Dré\helloworld.proto
```

Failed output:
```
E:\work\grpc\protoctest\test-DrΘ: warning: directory does not exist.
Could not make proto path relative: E:\work\grpc\protoctest\test-DrΘ\helloworld.proto: No such file or directory
```

Success output:
- no errors printed
- generated `.cs` file in the `out` directory

**B. Non-ascii arguments in a file containing the protoc arguments (no path to file) e.g.:**
```
protoc.exe @test.rsp
```
where `test.rsp` contains:
```
--plugin=protoc-gen-grpc=E:\work\grpc\protoctest\tools\grpc_csharp_plugin.exe
--csharp_out=E:\work\grpc\protoctest\test-Dré\out
--grpc_out=E:\work\grpc\protoctest\test-Dré\out
--proto_path=E:\work\grpc\protoctest\test-Dré
helloworld.proto
```

Success output for both old and fixed code:
- no errors printed
- generated `.cs` file in the `out` directory

**C. Non-ascii arguments in a file containing the protoc arguments (with non-ascii path to file).**

(This is what `Grpc.Tools` uses.) e.g.
```
protoc.exe @e:\work\grpc\protoctest\test-Dré\test.rsp
```

Failed output:
```
Failed to open argument file: E:\work\grpc\protoctest\test-DrΘ\test.rsp
```

Success output:
- no errors printed
- generated `.cs` file in the `out` directory

Closes #17854

COPYBARA_INTEGRATE_REVIEW=#17854 from tonydnewell:windows-utf8-command-fix de9ec54
PiperOrigin-RevId: 669083804
  • Loading branch information
tonydnewell authored and copybara-github committed Aug 29, 2024
1 parent eec827d commit b9d1800
Showing 1 changed file with 1 addition and 1 deletion.
2 changes: 1 addition & 1 deletion src/google/protobuf/compiler/main.cc
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ int main(int argc, char* argv[]) {
std::string* multibyte_string = new auto(ToMultiByteUtf8String(wargv[i]));
argv_mbcs[i] = const_cast<char*>(multibyte_string->c_str());
}
return google::protobuf::compiler::ProtobufMain(argc, argv);
return google::protobuf::compiler::ProtobufMain(argc, argv_mbcs);
}
#else
int main(int argc, char* argv[]) {
Expand Down

0 comments on commit b9d1800

Please sign in to comment.