Potential integer overflow when using atoi() In cgi-bin/var.c
Maintainer thường phản hồi trong vòng 1 ngày
@lynayur đang làm issue này rồi.
Từ ngày 8/10/2026.
Đá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
- 76/100
Hướng nghiên cứu
Bắt đầu với đoạn mã phân tích hậu tố trong cgi-bin/var.c quanh các dòng 990-992, nơi atoi() chuyển số sau dấu - cuối cùng thành chỉ số mảng, rồi kiểm tra phép thử phạm vi trong cgiSetArray() gần dòng 459. Thay các lệnh gọi atoi() bằng strtol(), đặt lại errno trước khi gọi, và từ chối các giá trị mà errno là ERANGE hoặc kết quả nằm ngoài phạm vi chỉ số được chấp nhận, trước khi ép kiểu sang int. Hoàn thành khi không còn atoi() nào trên đường xử lý này và các hậu tố ngoài phạm vi bị từ chối trước mọi phép chuyển đổi.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Potential problem
In cgi-bin/var.c, the numeric suffix of a form field name (the part after the last -) is converted with atoi() and used as an array index:
If the value exceeds INT_MAX, converting it with atoi() results in undefined behavior. The subsequent atoi(ptr) - 1 may also overflow.
The practical impact appears limited because cgiSetArray() rejects indexes outside the 0..100000 range:
However, this check is performed only after atoi() has already processed the input, so it cannot make the conversion itself safe. Since the behavior of an out-of-range atoi() conversion is undefined, the result cannot be reliably validated by the subsequent range check and could potentially fall within the accepted range.
Possible solution
Replace atoi() with strtol(), reset errno before the conversion, and validate both errno != ERANGE and the parsed value against the expected range before converting it to int.
Found by Linux Verification Center (portal.linuxtesting.ru) with SVACE.
Author: Stanislav Pichugin <[email protected]>.
- Ngôn ngữ chính
- C
- Star
- 1.8k
- Fork
- 352
- Merge trung bình
- 2 ngày 5 giờ
- Pull request đã merge (30 ngày)
- 14
Chuẩn bị môi trường
- Có Dockerfile hoặc 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 OpenPrinting/cups
-
Don't use xgettext sort option (-s) when generating POT fileCó thể đã có người làm @michaelrsweet đã nhận 6 ngày trước. Đang mởinvestigating
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
OpenPrinting/cups#1721 · 4 bình luận · 1 người được giao ·
Maintainer thường phản hồi trong vòng 1 ngày
-
`lp` (and other libcups clients) send `print-color-mode=<default>` alongside `ColorModel=Gray`, defeating the b0f1a00 "Don't override ColorModel" fixCó thể đã có người làm @michaelrsweet đã nhận hôm nay. Đang mởinvestigating
Độ khó 4/5 1-2 ngày Mức phù hợp với người mới 55/100
OpenPrinting/cups#1778 · 1 người được giao ·
Maintainer thường phản hồi trong vòng 1 ngày
-
investigating platform issue printer specific issue
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 65/100
OpenPrinting/cups#1727 · 5 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 30/100
OpenPrinting/cups#1726 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
ippeveprinter: collection-valued job attributes are never exported to the command (IPP_MEDIA_COL always empty)Có thể đã có người làm @michaelrsweet đã nhận 24 ngày trước. Đang mởbug documentation priority-low
OpenPrinting/cups#1725 · 2 bình luận · 1 người được giao ·
Maintainer thường phản hồi trong vòng 1 ngày
Tất cả issue của OpenPrinting/cups
Issue tương tự
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 74/100
libsdl-org/SDL#16577 ·
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 66/100
Maintainer thường phản hồi trong vòng 1 ngày
-
halt_error adds a trailing newline for non-string input, contrary to the manualCó thể đã có người làm @Huang-404-Q đã nhận hôm nay. Đang mở
Độ khó 1/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 2 ngày
-
GEODIFF_changesCount aborts the process on a truncated changeset (uncaught GeoDiffException)Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
MerginMaps/geodiff#272 ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 74/100
open-quantum-safe/liboqs#2644 ·
Maintainer thường phản hồi trong vòng 1 ngày