Vendored Maven reactor reads -D properties from commented-out .mvn/maven.config lines, so a 1.11.0 build is silently downgraded to 1.10.0-socket.* (or a valid patch is refused)
Maintainer thường phản hồi trong vòng 1 ngày
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 3/5
- Thời gian dự kiến
- 1-2 ngày
- Mức phù hợp với người mới
- 76/100
- Loại issue
- Lỗi
- Độ rõ ràng
- Đặc tả rõ ràng
- Mức độ hoạt động
- Sôi nổi
- Công nghệ
- rust
- Lĩnh vực
- build-system, cli
Hướng nghiên cứu
Start in crates/socket-patch-core/src/vendor/jvm/maven_reactor.rs at cli_properties around line 1250, then inspect the e2e_vendor_jvm_build::maven_reactor fixture and its existing controls. Reproduce the commented .mvn/maven.config cases, and add regression coverage showing commented-out properties are ignored while real Maven properties still behave correctly. Done means the fixture no longer downgrades or refuses the dependency because of a commented line.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
[agent] Found by the scheduled Maven bug-hunt routine (ledger #318).
Summary
Since Maven 3.9.0, a .mvn/maven.config line that starts with # is a comment, and Maven 4 keeps that rule. The reactor planner's cli_properties doesn't skip comments. It splits the whole file on whitespace and keeps every token that starts with -D and contains =:
So # -Dct.version=1.10.0 (an old pin someone commented out) still becomes the user property ct.version=1.10.0. Because lookup lets user properties beat model properties (maven_reactor.rs:939), that phantom value overrides the pom's real <ct.version>.
This is the reverse of #535. There, the parser misses properties that Maven applies. Here, it invents properties that Maven ignores. The cause sits in the same function, but the inputs and the regression test are different.
Impact
- Silent downgrade (the main case). A pom with
<ct.version>1.11.0</ct.version>and a commented-out# -Dct.version=1.10.0line builds 1.11.0. Aftervendor,${ct.version}in the module is replaced by the literal1.10.0-socket.<hex>.vendorexits 0 withapplied: 1, and the only warnings are the genericmaven_f_outside_root/maven_mirror_of_all.vendor --checkreportsvendor_check_ok, andvexattestsnot_affected. Every fix in 1.11.0 outside the patch is lost, and a later bump of the property no longer takes effect. - Spurious refusal (the reverse case). A pom with
<ct.version>1.10.0</ct.version>and a commented-out# -Dct.version=1.11.0line getsconflicting_literal_version, so nothing is pinned and the build keeps Central's unpatched 1.10.0. This direction fails closed (warned, andvendor --checkfails), but the patch is refused when it should apply.
Repro
This is the e2e_vendor_jvm_build::maven_reactor fixture (aggregator, corp-parent/, modules a and b), with:
corp-parent/pom.xml<properties>holding<ct.version>1.11.0</ct.version>.a/pom.xmldeclaring commons-text at<version>${ct.version}</version>.b/pom.xmlwithrelativePath../corp-parent/pom.xml, to stay clear of #534 for thevexstep.
mkdir -p .mvn && printf '# -Dct.version=1.10.0\n' > .mvn/maven.config
mvn -B package org.apache.maven.plugins:maven-dependency-plugin:3.5.0:build-classpath -Dmdep.outputFile=target/cp.txt
# a/target/cp.txt → commons-text-1.11.0.jar (Maven ignores the comment)
# stage the commons-text 1.10.0 patch manifest (as the capstone does), then
socket-patch vendor --json --offline
# applied: 1, warnings only maven_f_outside_root / maven_mirror_of_all
# a/pom.xml: <version>${ct.version}</version> → <version>1.10.0-socket.1d3c1fd2</version>
mvn -B package ...build-classpath...
# a/ and b/ cp.txt → .socket/vendor/maven2/.../commons-text-1.10.0-socket.1d3c1fd2.jar ← downgraded
socket-patch vendor --check --offline --json # verified: 1, vendor_check_ok
socket-patch vex --offline --output vex.json # not_affected / inline_mitigations_already_exist
# -Dct.version=1.10.0 old pin (extra spaces and trailing words) behaves the same way.
Controls:
- The same project without
.mvn/maven.configgetsconflicting_literal_version, no pin, and the build stays on 1.11.0. # just a notewith the pom at 1.10.0 is patched correctly.
Expected vs actual
- Expected: the planner models Maven's own user properties (
lookup: "User properties win over model properties, as in Maven"), so lines that Maven treats as comments define nothing.docs/design/maven-vendoring.mdsays that conflicting explicit versions "produce specific warnings; the backend does not silently claim those unsupported declarations are patched." With the comment ignored, the main case is aconflicting_literal_version(1.11.0 ≠ 1.10.0) with no pin, exactly like the no-config control. - Actual: the commented-out value is used. The resolved 1.11.0 is rewritten to
1.10.0-socket.*, andvendor --checkand VEX both confirm it.
Matrix (Linux, JDK 21, main 61cfb9b)
| Maven | pom 1.11.0 + # -Dct.version=1.10.0 |
pom 1.10.0 + # -Dct.version=1.11.0 |
no config / # just a note (controls) |
|---|---|---|---|
| 3.6.3 | n/a: Maven rejects # lines itself |
n/a | — |
| 3.8.8 | n/a: Maven rejects # lines itself |
n/a | — |
| 3.9.11 | fail: 1.11.0 → 1.10.0-socket.* (reproduced 3×) | fail: refused, unpatched | pass |
| 3.9.16 | fail (2×, one with the old pin variant) |
fail | pass |
| 4.0.0-rc-7 | fail (2×) | fail | pass |
macOS and Windows weren't probed. The parsing is OS-independent.
First bad commit
2463257 (#277, the v5 consolidation that added the reactor planner and cli_properties). It isn't in any release yet (latest release 4.0.0).
Suspect code: crates/socket-patch-core/src/vendor/jvm/maven_reactor.rs:1250 (cli_properties, which drops no # lines before tokenising). A fix there would naturally handle #535 too: parse per line, skip # lines, and accept --define= / -D k=v.
- Ngôn ngữ chính
- Rust
- Star
- 8
- Fork
- 0
- Merge trung bình
- 1 ngày 1 giờ
- Pull request đã merge (30 ngày)
- 211
Chuẩn bị môi trường
- Không có Dockerfile hay tệp Docker Compose
- Không có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của SocketDev/socket-patch
-
arch-audit refactor
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 82/100
SocketDev/socket-patch#1011 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
agent:triaged arch-audit bug priority:p3
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 74/100
SocketDev/socket-patch#982 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Hosted yarn classic pins give no berry-migration warning, so a yarn 2+ install silently drops them (vendored warns about the same trap)Có thể đã có người làm @mikolalysenko đã nhận 1 ngày trước. Đang mởagent:claimed agent:triaged bug bughunt pm:yarn-classic priority:p1
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 85/100
SocketDev/socket-patch#907 · 2 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
agent:triaged bug bughunt pm:bundler priority:p1
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 85/100
SocketDev/socket-patch#896 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
agent:triaged bug bughunt pm:yarn-berry priority:p1
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 73/100
SocketDev/socket-patch#783 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
Tất cả issue của SocketDev/socket-patch
Issue tương tự
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 88/100
Maintainer thường phản hồi trong vòng 4 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 62/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Update dusk-bls12_381 to 0.16Có thể đã có người làm @HDauven đã nhận hôm nay. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
-
`TcpListenerService` shares one `Extensions` store across all accepted connectionsCó thể đã có người làm Có pull request liên kết đang mở hoặc đã được merge. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
googlefonts/fontquant#43 ·