VEX gemspec product detection reads commented-out `# spec.name =` / `# spec.version =` lines, so the document names the wrong product or version
Maintainer thường phản hồi trong vòng 1 ngày
Một pull request liên quan đã được merge.
- #1582 của @mikolalysenko — đã merge
Đánh giá
- Độ khó
- 2/5
- Thời gian dự kiến
- 1-3 giờ
- Mức phù hợp với người mới
- 70/100
Hướng nghiên cứu
Bộ phân tích gemspec là parse_gemspec trong crates/socket-patch-core/src/vex/product.rs (khoảng dòng 363-380), còn probe 9 được ghi lại trong vex.rs quanh dòng 66. Hãy đọc closure literal trước, sau đó chạy hai gemspec tái hiện từ issue qua nó để xác nhận các dòng bị comment # spec.version = và # spec.name = được khớp. Hoàn thành khi cả hai file đều cho ra pkg:gem/acme với phiên bản được tính toán bị loại bỏ, và có một test hồi quy bao phủ trường hợp dòng bị comment.
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 Bundler (RubyGems) bug-hunt routine (ledger #316).
Summary
vex (and scan/apply/vendor --vex without --vex-product) names the top-level product of a gem library project from its root *.gemspec (parse_gemspec, probe 9). The parser takes the first line whose =-left side ends in .name / .version and whose right side starts with a quote. It never skips Ruby comments, so a commented-out assignment wins over the live one:
# spec.version = "0.0.1"abovespec.version = Acme::VERSION→ productpkg:gem/[email protected](the real version is 2.3.4; a computed version should be dropped, givingpkg:gem/acme).# spec.name = "acme-legacy"abovespec.name = "acme"→ productpkg:gem/acme-legacy.
No warning is printed. Ruby (Gem::Specification.load) gives acme-2.3.4 for both files.
Impact
The OpenVEX document's products[].@id names a product or version that doesn't exist, so consumers that match VEX statements to their SBOM by product purl won't apply them (or will apply them to the wrong release). The run reports success. Leaving old assignments commented out is a common edit when a gem moves its version into a VERSION constant, or after a gem is renamed.
Repro (Linux, Ruby 3.3.6, Bundler 2.5.22 / 4.0.18; main e76cb9b)
mkdir -p acme/lib/acme && cd acme
echo 'module Acme; VERSION = "2.3.4"; end' > lib/acme/version.rb
cat > acme.gemspec <<'E'
require_relative "lib/acme/version"
Gem::Specification.new do |spec|
spec.name = "acme"
# spec.version = "0.0.1" # pinned before the VERSION constant existed
spec.version = Acme::VERSION
spec.authors = ["x"]
spec.summary = "x"
spec.files = []
spec.add_dependency "colorize", "0.8.1"
end
E
printf 'source "https://rubygems.org"\ngemspec\n' > Gemfile
bundle install
# any applied gem patch in .socket/manifest.json (hand-written [email protected] manifest + `apply --offline` here)
socket-patch apply --offline
socket-patch vex | grep '"@id": "pkg:gem/acme'
# "@id": "pkg:gem/[email protected]"
ruby -e 'puts Gem::Specification.load("acme.gemspec").full_name'
# acme-2.3.4
The name variant: put # spec.name = "acme-legacy" above Gem::Specification.new (and drop the commented version). vex then gives "@id": "pkg:gem/acme-legacy". Each shape reproduced twice.
Expected vs actual
- Expected:
parse_gemspec's own doc says the product comes "from literal<spec>.name = "…"/<spec>.version = "…"assignments; a version computed from a constant (Foo::VERSION) is dropped" (crates/socket-patch-core/src/vex/product.rs:363-366). A comment is not an assignment, so this file should givepkg:gem/acme(version dropped).vex.rs:66documents probe 9 aspkg:gem/<name>[@<version>]. - Actual:
pkg:gem/[email protected]/pkg:gem/acme-legacy.
Matrix
| OS | Ruby / Bundler | Commented version |
Commented name |
|---|---|---|---|
| Linux (sandbox) | 3.3.6 / 2.5.22 | reproduces (×2) | reproduces (×2) |
The parser is OS- and Bundler-independent (pure text), so macOS / Windows aren't probed.
Suspect code
crates/socket-patch-core/src/vex/product.rs:367-380: the literal closure trims the line and checks lhs.ends_with(".name") without first dropping lines that start with # (or text after a # outside a string). =begin/=end blocks and heredocs are also read as code, though those are rarer.
First bad version: not bisected (the sandbox clone is shallow). parse_gemspec has had this shape since gemspec detection was added.
- Ngôn ngữ chính
- Rust
- Star
- 8
- Fork
- 1
- Merge trung bình
- 16 giờ 18 phút
- Pull request đã merge (30 ngày)
- 587
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
-
agent:triaged bug bughunt pm:pipenv priority:p1
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
SocketDev/socket-patch#1608 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
agent:triaged bug bughunt pm:vlt priority:p1
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 62/100
SocketDev/socket-patch#1601 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
agent:triaged bug bughunt pm:npm priority:p3 ux
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100
SocketDev/socket-patch#1072 · 2 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
-
Vendored cargo warns cargo_multi_version_old_cargo ("declares no rust-version") when the root package inherits rust-version from [workspace.package]Có thể đã có người làm @mikolalysenko đã nhận 4 ngày trước. Đang mởagent:triaged bug bughunt pm:cargo priority:p2
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 84/100
SocketDev/socket-patch#651 · 3 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ự
-
bug: `shep kelpie finish all`Đang mởbug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 66/100
shep-pm/shep-kelpie#980 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
bug frontend rt sev-3
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
-
C-bug
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 88/100
-
[1.x Bug] run-operation --sql reports success but rolls back writes on transaction-capable adaptersĐang mởtriage
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 64/100
dbt-labs/dbt#16784 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
area:cli bug good first issue priority:medium
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 74/100
rtk-ai/rtk#4615 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày