stack overflow in array/sanitizer
Đang mở
Chưa có ai nhận issue này.
Bug
Extension: standard
Status: Needs Triage
- Ngôn ngữ chính
- C
- Star
- 40.4k
- Fork
- 8.1k
- Merge trung bình
- 2 ngày 13 giờ
- Pull request đã merge (30 ngày)
- 96
Mô tả
Description
The following code:
<?php
$a=[]; for($i=0;$i<1000000;$i++){$a=['k'=>$a];}
$b=array_merge_recursive($a,$a);
Resulted in this output:
#226 0x55fe77cec009 in php_array_merge_recursive /home/php-src/ext/standard/array.c:3975
#227 0x55fe77cec009 in php_array_merge_recursive /home/php-src/ext/standard/array.c:3975
#228 0x55fe77cec009 in php_array_merge_recursive /home/php-src/ext/standard/array.c:3975
#229 0x55fe77cec009 in php_array_merge_recursive /home/php-src/ext/standard/array.c:3975
#230 0x55fe77cec009 in php_array_merge_recursive /home/php-src/ext/standard/array.c:3975
#231 0x55fe77cec009 in php_array_merge_recursive /home/php-src/ext/standard/array.c:3975
#232 0x55fe77cec009 in php_array_merge_recursive /home/php-src/ext/standard/array.c:3975
#233 0x55fe77cec009 in php_array_merge_recursive /home/php-src/ext/standard/array.c:3975
#234 0x55fe77cec009 in php_array_merge_recursive /home/php-src/ext/standard/array.c:3975
#235 0x55fe77cec009 in php_array_merge_recursive /home/php-src/ext/standard/array.c:3975
#236 0x55fe77cec009 in php_array_merge_recursive /home/php-src/ext/standard/array.c:3975
#237 0x55fe77cec009 in php_array_merge_recursive /home/php-src/ext/standard/array.c:3975
#238 0x55fe77cec009 in php_array_merge_recursive /home/php-src/ext/standard/array.c:3975
#239 0x55fe77cec009 in php_array_merge_recursive /home/php-src/ext/standard/array.c:3975
#240 0x55fe77cec009 in php_array_merge_recursive /home/php-src/ext/standard/array.c:3975
#241 0x55fe77cec009 in php_array_merge_recursive /home/php-src/ext/standard/array.c:3975
#242 0x55fe77cec009 in php_array_merge_recursive /home/php-src/ext/standard/array.c:3975
#243 0x55fe77cec009 in php_array_merge_recursive /home/php-src/ext/standard/array.c:3975
#244 0x55fe77cec009 in php_array_merge_recursive /home/php-src/ext/standard/array.c:3975
#245 0x55fe77cec009 in php_array_merge_recursive /home/php-src/ext/standard/array.c:3975
#246 0x55fe77cec009 in php_array_merge_recursive /home/php-src/ext/standard/array.c:3975
#247 0x55fe77cec009 in php_array_merge_recursive /home/php-src/ext/standard/array.c:3975
#248 0x55fe77cec009 in php_array_merge_recursive /home/php-src/ext/standard/array.c:3975
#249 0x55fe77cec009 in php_array_merge_recursive /home/php-src/ext/standard/array.c:3975
SUMMARY: AddressSanitizer: stack-overflow ../../../../src/libsanitizer/asan/asan_stack.cpp:63 in __sanitizer::BufferedStackTrace::UnwindImpl(unsigned long, unsigned long, void*, bool, unsigned int)
==26==ABORTING
USE_ZEND_ALLOC=0 php poc.php
PHP Version
8.6.0
Operating System
ubuntu 22.04
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.
Hướng nghiên cứu
Bắt đầu với reproducer trong issue và kiểm tra php_array_merge_recursive tại ext/standard/array.c:3975. Chạy nó với AddressSanitizer và USE_ZEND_ALLOC=0, sau đó thêm một bài kiểm thử hồi quy bao quát trường hợp array_merge_recursive lồng nhau; hoàn thành khi reproducer không còn gây ra lỗi tràn ngăn xếp.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- c, php
- Lĩnh vực
- backend, testing-qa
- Loại issue
- Lỗi
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức độ hoạt động
- Ít trao đổi
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 52/100