protocolbuffers/protobuf

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

Open

#10.834 geöffnet am 28. Okt. 2022

Auf GitHub ansehen
 (1 Kommentar) (0 Reaktionen) (1 zugewiesene Person)C++ (16.128 Forks)batch import
help wantedjava

Repository-Metriken

Stars
 (71.223 Stars)
PR-Merge-Metriken
 (Durchschn. Merge 2T 11h) (185 gemergte PRs in 30 T)

Beschreibung

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