plugin code-owners can't handle file name with Chinese characters

47 views
Skip to first unread message

Shuai Hu

unread,
Jun 1, 2026, 4:16:32 PM (10 days ago) Jun 1
to Repo and Gerrit Discussion
I delete a binary file with Chinese characters in my repo then send it to gerrit, it failed with following logs.

```log
[2026-05-29T09:45:05.622Z] [SSH git-receive-pack /group/project (username)] INFO  com.google.gerrit.server.permissions.DefaultRefFilter : Performing visibility check for all refs. This can be expensive. [CONTEXT ratelimit_period="1 SECONDS" skipped=1 ]

[2026-05-29T09:45:05.791Z] [ReceiveCommits-3[receive-commits]-for-SSH git-receive-pack /group/project (username)] INFO  com.google.gerrit.server.git.receive.ReceiveCommits : ReceiveCommits failed due to InvalidPathException

java.nio.file.InvalidPathException: Malformed input or input contains unmappable characters: /apps/my_app/P2P Mesh ???????????.pdf

        at java.base/sun.nio.fs.UnixPath.encode(UnixPath.java:129)

        at java.base/sun.nio.fs.UnixPath.<init>(UnixPath.java:76)

        at java.base/sun.nio.fs.UnixFileSystem.getPath(UnixFileSystem.java:313)

        at java.base/java.nio.file.Path.of(Path.java:148)

        at com.google.gerrit.plugins.codeowners.util.JgitPath.getAsAbsolutePath(JgitPath.java:64)

        at com.google.gerrit.plugins.codeowners.common.ChangedFile.lambda$convertPathFromFileDiffOutput$1(ChangedFile.java:198)

        at java.base/java.util.Optional.map(Optional.java:260)

        at com.google.gerrit.plugins.codeowners.common.ChangedFile.convertPathFromFileDiffOutput(ChangedFile.java:198)

        at com.google.gerrit.plugins.codeowners.common.ChangedFile.create(ChangedFile.java:191)

        at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)

        at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)

        at java.base/java.util.stream.SortedOps$RefSortingSink.end(SortedOps.java:395)

        at java.base/java.util.stream.Sink$ChainedReference.end(Sink.java:261)

        at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:510)

        at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)

        at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921)

        at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)

        at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682)

        at com.google.gerrit.plugins.codeowners.backend.ChangedFiles.getDuringCommitValidation(ChangedFiles.java:258)

        at com.google.gerrit.plugins.codeowners.validation.CodeOwnerConfigValidator.getModifiedCodeOwnerConfigFiles(CodeOwnerConfigValidator.java:596)

        at com.google.gerrit.plugins.codeowners.validation.CodeOwnerConfigValidator.validateCodeOwnerConfig(CodeOwnerConfigValidator.java:534)

        at com.google.gerrit.plugins.codeowners.validation.CodeOwnerConfigValidator.onCommitReceived(CodeOwnerConfigValidator.java:222)

        at com.google.gerrit.server.git.validators.CommitValidationListener.validateCommit(CommitValidationListener.java:75)

        at com.google.gerrit.server.git.validators.CommitValidators$Factory$1.validateCommit(CommitValidators.java:258)

        at com.google.gerrit.server.git.validators.CommitValidators.validate(CommitValidators.java:328)

        at com.google.gerrit.server.git.receive.BranchCommitValidator.validateCommit(BranchCommitValidator.java:206)

        at com.google.gerrit.server.git.receive.BranchCommitValidator.validateCommit(BranchCommitValidator.java:131)

        at com.google.gerrit.server.git.receive.ReceiveCommits.selectNewAndReplacedChangesFromMagicBranch(ReceiveCommits.java:2752)

        at com.google.gerrit.server.git.receive.ReceiveCommits.processCommandsUnsafe(ReceiveCommits.java:940)

        at com.google.gerrit.server.git.receive.ReceiveCommits.processCommands(ReceiveCommits.java:758)

        at com.google.gerrit.server.git.receive.AsyncReceiveCommits.lambda$preReceive$4(AsyncReceiveCommits.java:461)

        at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)

        at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)

        at com.google.gerrit.server.util.RequestScopePropagator.lambda$cleanup$1(RequestScopePropagator.java:187)

        at com.google.gerrit.server.util.RequestScopePropagator.lambda$context$0(RequestScopePropagator.java:174)

        at com.google.gerrit.server.util.ThreadLocalRequestScopePropagator.lambda$wrapImpl$0(ThreadLocalRequestScopePropagator.java:47)

        at com.google.gerrit.server.util.RequestScopePropagator$1.call(RequestScopePropagator.java:85)

        at com.google.gerrit.server.util.RequestScopePropagator$2.run(RequestScopePropagator.java:116)

        at com.google.gerrit.server.logging.LoggingContextAwareRunnable.run(LoggingContextAwareRunnable.java:126)

        at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)

        at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)

        at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)

        at com.google.gerrit.server.git.WorkQueue$Task.run(WorkQueue.java:960)

        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)

        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)

        at java.base/java.lang.Thread.run(Thread.java:1583)

[2026-05-29T09:45:06.287Z] [SSH git-receive-pack /group/project (username) WARN  com.google.gerrit.server.git.MultiProgressMonitor : MultiProgressMonitor worker did not call end() before returning

[2026-05-29T09:45:06.287Z] [SSH git-receive-pack /group/project (username) ERROR com.google.gerrit.server.git.receive.AsyncReceiveCommits : error while processing push

java.util.concurrent.ExecutionException: java.nio.file.InvalidPathException: Malformed input or input contains unmappable characters: /apps/my_app/P2P Mesh ???????????.pdf

        at java.base/java.util.concurrent.FutureTask.report(FutureTask.java:122)

        at java.base/java.util.concurrent.FutureTask.get(FutureTask.java:191)

        at com.google.gerrit.server.git.receive.AsyncReceiveCommits.preReceive(AsyncReceiveCommits.java:482)

        at com.google.gerrit.server.git.receive.AsyncReceiveCommits.lambda$asHook$2(AsyncReceiveCommits.java:420)

        at org.eclipse.jgit.transport.ReceivePack.service(ReceivePack.java:2260)

        at org.eclipse.jgit.transport.ReceivePack.receive(ReceivePack.java:2173)

        at com.google.gerrit.sshd.commands.Receive.runImpl(Receive.java:100)

        at com.google.gerrit.sshd.AbstractGitCommand.service(AbstractGitCommand.java:110)

        at com.google.gerrit.sshd.AbstractGitCommand$1.run(AbstractGitCommand.java:75)

        at com.google.gerrit.sshd.BaseCommand$TaskThunk.run(BaseCommand.java:504)

        at com.google.gerrit.server.logging.LoggingContextAwareRunnable.run(LoggingContextAwareRunnable.java:126)

        at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)

        at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)

        at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)

        at com.google.gerrit.server.git.WorkQueue$Task.run(WorkQueue.java:960)

        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)

        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)

        at java.base/java.lang.Thread.run(Thread.java:1583)

Caused by: java.nio.file.InvalidPathException: Malformed input or input contains unmappable characters: /apps/my_app/P2P Mesh ???????????.pdf

        at java.base/sun.nio.fs.UnixPath.encode(UnixPath.java:129)

        at java.base/sun.nio.fs.UnixPath.<init>(UnixPath.java:76)

        at java.base/sun.nio.fs.UnixFileSystem.getPath(UnixFileSystem.java:313)

        at java.base/java.nio.file.Path.of(Path.java:148)

        at com.google.gerrit.plugins.codeowners.util.JgitPath.getAsAbsolutePath(JgitPath.java:64)

        at com.google.gerrit.plugins.codeowners.common.ChangedFile.lambda$convertPathFromFileDiffOutput$1(ChangedFile.java:198)

        at java.base/java.util.Optional.map(Optional.java:260)

        at com.google.gerrit.plugins.codeowners.common.ChangedFile.convertPathFromFileDiffOutput(ChangedFile.java:198)

        at com.google.gerrit.plugins.codeowners.common.ChangedFile.create(ChangedFile.java:191)

        at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)

        at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)

        at java.base/java.util.stream.SortedOps$RefSortingSink.end(SortedOps.java:395)

        at java.base/java.util.stream.Sink$ChainedReference.end(Sink.java:261)

        at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:510)

        at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)

        at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921)

        at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)

        at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682)

        at com.google.gerrit.plugins.codeowners.backend.ChangedFiles.getDuringCommitValidation(ChangedFiles.java:258)

        at com.google.gerrit.plugins.codeowners.validation.CodeOwnerConfigValidator.getModifiedCodeOwnerConfigFiles(CodeOwnerConfigValidator.java:596)

        at com.google.gerrit.plugins.codeowners.validation.CodeOwnerConfigValidator.validateCodeOwnerConfig(CodeOwnerConfigValidator.java:534)

        at com.google.gerrit.plugins.codeowners.validation.CodeOwnerConfigValidator.onCommitReceived(CodeOwnerConfigValidator.java:222)

        at com.google.gerrit.server.git.validators.CommitValidationListener.validateCommit(CommitValidationListener.java:75)

        at com.google.gerrit.server.git.validators.CommitValidators$Factory$1.validateCommit(CommitValidators.java:258)

        at com.google.gerrit.server.git.validators.CommitValidators.validate(CommitValidators.java:328)

        at com.google.gerrit.server.git.receive.BranchCommitValidator.validateCommit(BranchCommitValidator.java:206)

        at com.google.gerrit.server.git.receive.BranchCommitValidator.validateCommit(BranchCommitValidator.java:131)

        at com.google.gerrit.server.git.receive.ReceiveCommits.selectNewAndReplacedChangesFromMagicBranch(ReceiveCommits.java:2752)

        at com.google.gerrit.server.git.receive.ReceiveCommits.processCommandsUnsafe(ReceiveCommits.java:940)

        at com.google.gerrit.server.git.receive.ReceiveCommits.processCommands(ReceiveCommits.java:758)

        at com.google.gerrit.server.git.receive.AsyncReceiveCommits.lambda$preReceive$4(AsyncReceiveCommits.java:461)

        at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)

        at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)

        at com.google.gerrit.server.util.RequestScopePropagator.lambda$cleanup$1(RequestScopePropagator.java:187)

        at com.google.gerrit.server.util.RequestScopePropagator.lambda$context$0(RequestScopePropagator.java:174)

        at com.google.gerrit.server.util.ThreadLocalRequestScopePropagator.lambda$wrapImpl$0(ThreadLocalRequestScopePropagator.java:47)

        at com.google.gerrit.server.util.RequestScopePropagator$1.call(RequestScopePropagator.java:85)

        at com.google.gerrit.server.util.RequestScopePropagator$2.run(RequestScopePropagator.java:116)

        ... 8 more
```

Matthias Sohn

unread,
Jun 1, 2026, 4:19:04 PM (10 days ago) Jun 1
to Shuai Hu, Repo and Gerrit Discussion
On Mon, Jun 1, 2026 at 10:16 PM Shuai Hu <retu...@gmail.com> wrote:
I delete a binary file with Chinese characters in my repo then send it to gerrit, it failed with following logs.

Which gerrit version do you use ? 

--
--
To unsubscribe, email repo-discuss...@googlegroups.com
More info at http://groups.google.com/group/repo-discuss?hl=en

---
You received this message because you are subscribed to the Google Groups "Repo and Gerrit Discussion" group.
To unsubscribe from this group and stop receiving emails from it, send an email to repo-discuss...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/repo-discuss/4a1fa920-55b5-4fbf-a383-43dc1d705100n%40googlegroups.com.
Reply all
Reply to author
Forward
0 new messages