Using `m` as a package name leads to invalid code
#10,834 创建于 2022年10月28日
仓库指标
- Star
- (71,223 star)
- PR 合并指标
- (平均合并 2天 11小时) (30 天内合并 185 个 PR)
描述
What version of protobuf and what language are you using? Version: v3.19.6 - latest 3.20 and 3.21 are impacted as well. Language: Java
What operating system (Linux, Windows, ...) and version? Linux
What runtime / compiler are you using (e.g., python version or gcc version) OpenJDK 11
What did you do?
The following proto leads to a Java code that doesn't compile:
syntax = "proto2";
package m;
message Foo {}
message Msg {
repeated Foo foo = 1;
}
Error:
[error] Test.java:862:1: cannot find symbol
[error] symbol: variable Test
[error] location: variable m of type m.Test.Foo
The breakage appears to have been introduced in this change: https://github.com/protocolbuffers/protobuf/pull/10667/files#diff-1f7aa0e2fe4f343ea4da9e797d4e55c69af1ee6a7778ea5aafc2f0a35195a646R1310-R1316 - where the variable used is m rather than $name_ which was meant to resolve name clashes. I know a package named name m is quite contrived, but maybe there are additional scenarios where this change could lead to name clashes. This issue was discovered by ScalaPB's test framework which generates random protocol buffers.