protocolbuffers/protobuf

Using `m` as a package name leads to invalid code

Open

#10,834 建立於 2022年10月28日

在 GitHub 查看
 (1 留言) (0 反應) (1 負責人)C++ (16,128 fork)batch import
help wantedjava

倉庫指標

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.

貢獻者指南