Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

--source passes --make, --jobs and --load-average to the shell unquoted

Đang mở
#430 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 1 ngày

@jihtsan đang làm issue này rồi.

Từ ngày 13/10/2026.

  • #432 của @jihtsan — đang mở

Đá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
35/100
Loại issue
Lỗi
Độ rõ ràng
Đặc tả rõ ràng
Mức độ hoạt động
Đình trệ
Công nghệ
node.js, python
Lĩnh vực
build-system, security

Hướng nghiên cứu

Start with build_node_from_src and callit, where the issue shows the make command being passed through the shell; inspect how _quote handles env_dir and review the tests for source builds. Reproduce with a make path containing spaces and a jobs value containing shell syntax. Done means both values are passed as intended and the reproduction no longer splits the path or executes injected shell syntax; pull request #432 is already open.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

build_node_from_src runs the make steps through the shell (callit(..., in_shell=True) joins the list with spaces and calls Popen(..., shell=True)), but only env_dir goes through _quote:

    make_opts = [
        '--{0}={1}'.format(name, value)
        if len(value) > 0 else '--{0}'.format(name)
        for name, value in zip(make_param_names, make_param_values)
        if value is not None
    ]
    ...
    make_cmd = args.make_path

    callit([make_cmd] + make_opts, args.verbose, True, node_src_dir, env)
    ...
    callit([make_cmd + ' install'], args.verbose, True, node_src_dir, env)

make_path comes from --make or make in the [nodeenv] section of ./tox.ini, ./setup.cfg or ~/.nodeenvrc, jobs from --jobs or jobs there, and load_average from --load-average. As a result:

  • a make path with a space is split by the shell: --make '/opt/my tools/make' runs /opt/my
  • shell syntax in these values is executed: jobs = 2; echo INJECTED in ~/.nodeenvrc runs echo INJECTED after make
Reproduce

On master (ecb4b74), with a fake configure and a fake make that prints its arguments:

mkdir -p /tmp/x/node-src '/tmp/x/my tools' /tmp/x/tools
printf '#!/bin/sh\nexit 0\n' > /tmp/x/node-src/configure
printf '#!/bin/sh\necho "make called with: $*"\n' > /tmp/x/tools/make
cp /tmp/x/tools/make '/tmp/x/my tools/make'
chmod +x /tmp/x/node-src/configure /tmp/x/tools/make '/tmp/x/my tools/make'
import types
from unittest import mock
import nodeenv

for make_path, jobs in [('/tmp/x/my tools/make', '2'),
                        ('/tmp/x/tools/make', '2; echo INJECTED')]:
    args = types.SimpleNamespace(load_average=None, jobs=jobs, without_ssl=False,
        debug=False, profile=False, make_path=make_path, verbose=True)
    # pretend python2 exists so the build gets past #419
    with mock.patch.object(nodeenv.shutil, 'which', return_value='/usr/bin/false'):
        try:
            nodeenv.build_node_from_src('/tmp/x/env', '/tmp/x', '/tmp/x/node-src', args)
        except OSError as e:
            print('OSError:', e)

The make path with a space:

/bin/sh: /tmp/x/my: No such file or directory
OSError: Command "/tmp/x/my tools/make" --jobs=2 failed with error code 127

jobs = '2; echo INJECTED':

make called with: --jobs=2
INJECTED
make called with: install
Ngôn ngữ chính
Python
Star
1.8k
Fork
225
Merge trung bình
17 giờ 18 phút
Pull request đã merge (30 ngày)
26

Chuẩn bị môi trường

Dự án này không cung cấp dev container, Dockerfile hay hướng dẫn đóng góp, nên bạn cần tự thiết lập môi trường: hãy bắt đầu từ README và xem hướng dẫn đóng góp lần đầu của chúng tôi để biết các bước chung.

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. 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.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của ekalinin/nodeenv

Tất cả issue của ekalinin/nodeenv

Issue tương tự

Thêm issue về Python

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.