protocolbuffers/protobuf

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

Open

#10.834 aberto em 28 de out. de 2022

Ver no GitHub
 (1 comment) (0 reactions) (1 assignee)C++ (16.128 forks)batch import
help wantedjava

Métricas do repositório

Stars
 (71.223 stars)
Métricas de merge de PR
 (Mesclagem média 2d 11h) (185 fundiu PRs em 30d)

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.

Guia do colaborador