Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

Elliotte reported bugs

オープン
#16 コメント 1 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 5 日以内に返信

まだ誰も着手していません。

評価

難易度
5/5
見積もり時間
1週間以上
初心者へのやさしさ
20/100
issue の種類
バグ
明瞭さ
説明が足りない
活発さ
静か
技術スタック
java

調査の方向性

まず17件の報告を個別のissueに分け、次にExecutorRequest.java、MavenToolProvider.java、ForkedMavenExecutor.javaなどの名前が挙がっているファイルと、参照されている行範囲、および関連するテストを調査します。変更を提案する前に、各報告を既存のテストとプロジェクトの動作に照らして検証します。完了とは、独立して再現できた1件のバグに対して、対象を絞った修正と回帰テストがあることを意味します。

索引モデルが issue の本文から書いたものです。

説明

bug
Affected version

1.0.0

These were all pulled out by throwing the code at an LLM. This issue lists multiple independent bugs. If anyone wants to work on any of these, note it here and open a new issue just for that bug. Be careful that some of these are likely false reports, though closing those is also useful work.

Bug description

Bug Report: maven-executor

HIGH SEVERITY

  1. toBuilder().argument(String) throws UnsupportedOperationException
    ExecutorRequest.java:150-165, 249-255
    toBuilder() passes arguments() (an unmodifiable list from Impl)
    into the Builder constructor,
    which stores the reference directly. When argument(String) is
    called, it invokes
    this.arguments.add(...) on the unmodifiable list, crashing at runtime.

  2. MAVEN_ARGS leaks to child process in ForkedMavenExecutor
    ForkedMavenExecutor.java:109, 143, 149-153
    Line 109 reads System.getenv("MAVEN_ARGS") from the parent process.
    Line 143 does
    env.remove("MAVEN_ARGS"), but env is a local HashMap containing
    only request-specified
    variables, not the parent process environment. Line 152 calls
    pb.environment().putAll(env)
    but MAVEN_ARGS from the parent is never removed from the inherited
    environment, so the
    child process also inherits it.

  3. extractMTPSingleArgument throws StringIndexOutOfBoundsException
    MavenToolProvider.java (java9):146
    When an argument like -MEX-mavenHome is passed without = and a value,
    argument.substring(key.length() + 1) throws StringIndexOutOfBoundsException.

  4. Null values from extractMTPMapArgument produce string "null" in output
    MavenToolProvider.java (java9):165-169 ->
    ForkedMavenExecutor.java:127 -> DockerExeExecutor.java:91
    When -MEX-env=MY_VAR is passed without a =value, the map stores
    null. This propagates to
    "MY_VAR=null" in DockerExeExecutor and "-Dkey=null" in ForkedMavenExecutor.

  5. ToolboxExecutorTool.doExecute() uses request.stdOut() (an
    OutputStream reference) instead
    of result.stdOutString() in error messages
    ToolboxExecutorTool.java:144-146
    The error message prints request.stdOut().orElse(null) which
    returns the OutputStream object
    (e.g., java.io.ByteArrayOutputStream@123456), not the captured
    output. The actual stdout/stderr
    content is in result.stdOutString()/result.stdErrString() but is never read.

MEDIUM SEVERITY

  1. stdIn InputStream is never closed (resource leak)
    ProcessBuilderExecutorSupport.java:149-158
    In the stdinPump thread, the stdIn InputStream is read from but
    never closed. The
    try-with-resources only closes in (the process's OutputStream). The
    Javadoc says
    "The stream is closed once tool execution is finished" but this
    does not happen.

  2. fs4WithDollar test uses MAVEN3_HOME instead of MAVEN4_HOME (copy-paste error)
    MavenExecutorTestSupport.java:329
    The @Disabled test fs4WithDollar (intended for Maven 4) references
    Environment.MAVEN3_HOME
    at line 329.

  3. System.setProperties(null) creates thread-safety window
    EmbeddedMavenExecutor.java:383
    prepareProperties() calls System.setProperties(null) followed by
    properties.putAll(System.getProperties()). Between these two calls,
    any concurrent thread
    accessing System.getProperties() may get null or empty properties.

  4. ExecutorHelperImpl.close() does not catch RuntimeException from
    executor close()
    ExecutorHelperImpl.java:88-109
    Only ExecutorException is caught when closing executors. If an
    executor's close() throws
    a RuntimeException (e.g., NullPointerException), it propagates
    immediately and prevents
    subsequent executors from being closed.

  5. UncheckedIOException not wrapped as ExecutorException in
    TestContainersExecutor
    TestContainersExecutor.java:161-166
    detectUid() wraps IOException in UncheckedIOException (a
    RuntimeException). The execute()
    method's catch blocks only catch IOException. The
    UncheckedIOException propagates uncaught.

  6. NPE if resource files are missing in TestProjects.createSimpleProject
    TestProjects.java:37, 40
    TestProjects.class.getResourceAsStream(...) can return null, and
    Files.copy(InputStream, Path)
    will throw NullPointerException instead of a clear "resource not
    found" message.

LOW SEVERITY

  1. extractMTPSingleArgument removes ALL matching arguments, not just the first
    MavenToolProvider.java (java9):145
    allArguments.removeIf(s -> s.equals(argument)) removes every
    occurrence, silently
    discarding duplicates.

  2. Builder.stdOut()/stdErr() don't clear the other stream
    ExecutorRequest.java:324-334
    Setting stdOut(...) sets grabOutputAsString = false but does not
    clear this.stdErr,
    and vice versa.

  3. Temp directory deletion may fail in ForkedMavenExecutor.mavenVersion()
    ForkedMavenExecutor.java:74, 93
    Files.createTempDirectory(...) is deleted in finally via
    Files.deleteIfExists(cwd), but
    if the Maven process creates files inside this directory, the
    delete fails with
    DirectoryNotEmptyException.

  4. nullInputStream.read(byte[], int, int) violates InputStream contract
    IOTools.java:83-89
    The read(byte[], int, int) contract requires throwing
    IndexOutOfBoundsException if off is
    negative, len is negative, or off + len > b.length. No bounds
    validation is performed.

  5. Deprecated ToolboxExecutorTool(Executor) hardcodes 0.15.8 vs current 0.15.14
    ToolboxExecutorTool.java:53-56
    The deprecated constructor uses an old cemented version while the
    POM defines
    version.toolbox as 0.15.14.

  6. @DisabledOnOs comment vs annotation mismatch in Docker provider tests
    TestContainersExecutorTest.java:38, DockerExeExecutorTest.java:38
    Comment says "not supported on Windows" but annotation also
    disables on OS.MAC.

主要言語
Java
スター
5
フォーク
4
平均マージ
3日 2時間
マージ済み PR(30日)
4

環境構築

  • Dockerfile・Docker Compose ファイルなし
  • プルリクエストのテンプレートあり
  • コントリビューションガイドなし

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

apache/maven-executor のほかの issue

apache/maven-executor の issue をすべて見る

似ている issue

Java の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。