protocolbuffers / protocolbuffers/protobuf
Using `m` as a package name leads to invalid code
@googleberg is already working on this.
Since Nov 3, 2022.
- Dominant language
- C++
- Stars
- 72k
- Forks
- 16.3k
- Avg merge
- 1d 17h
- Merged PRs (30d)
- 140
Description
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.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.