Memory leaks from dc_field_add_string
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
- 72/100
Hướng nghiên cứu
Start in libdivecomputer/src/field-cache.c and trace dc_parser_deallocate through the three parsers that use dc_field_cache, including shearwater_predator_parser.c. Reproduce the download with dctool under ASAN, inspect each parser's destroy path, and verify that cached strings are released without leaks.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
When doing a download, with example dctool, built with asan, one can clearly see the memory leaks from the strdup happening in the field-cache:
#0 0x7d4d7b32478c in strdup ../../../../src/libsanitizer/asan/asan_interceptors.cpp:617
#1 0x645f8c5da40f in dc_field_add_string ../../libdivecomputer/src/field-cache.c:26
#2 0x645f8c5da654 in dc_field_add_string_fmt ../../libdivecomputer/src/field-cache.c:52
#3 0x645f8c561ad9 in add_sensor_state ../../libdivecomputer/src/shearwater_predator_parser.c:461
#4 0x645f8c567043 in shearwater_predator_parser_cache ../../libdivecomputer/src/shearwater_predator_parser.c:973
#5 0x645f8c560f4a in shearwater_predator_parser_get_datetime ../../libdivecomputer/src/shearwater_predator_parser.c:349
#6 0x645f8c4b52e3 in dc_parser_get_datetime ../../libdivecomputer/src/parser.c:380
#7 0x645f8c4a7cbe in dctool_xml_output_write ../../libdivecomputer/examples/output_xml.c:255
#8 0x645f8c4a62d5 in dctool_output_write ../../libdivecomputer/examples/output.c:61
#9 0x645f8c49ef5c in dive_cb ../../libdivecomputer/examples/dctool_download.c:92
#10 0x645f8c56cefd in shearwater_petrel_device_foreach ../../libdivecomputer/src/shearwater_petrel.c:339
#11 0x645f8c4b30b0 in dc_device_foreach ../../libdivecomputer/src/device.c:423
#12 0x645f8c49fddd in download ../../libdivecomputer/examples/dctool_download.c:227
#13 0x645f8c4a0de6 in dctool_download_run ../../libdivecomputer/examples/dctool_download.c:360
#14 0x645f8c49d0af in main ../../libdivecomputer/examples/dctool.c:312
#15 0x7d4d7ae2a600 in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:59
#16 0x7d4d7ae2a717 in __libc_start_main_impl ../csu/libc-start.c:360
#17 0x645f8c499234 in _start (libdivecomputer-build/examples/dctool+0x66234) (BuildId: 506f83238fb80c0b06b6bbd4ec421c6fec390b98)
This is because the dc_parser_deallocate has no clue about the value strings kept in the struct dc_field_cache, and thus can't free them.
The 3 parsers using the dc_field_cache should either have a destroy function added to them which frees the cached strings or have their existing destroy function updated to free the cached strings.
- Ngôn ngữ chính
- C
- Star
- 126
- Fork
- 116
- Merge trung bình
- 2 ngày 13 giờ
- Pull request đã merge (30 ngày)
- 13
Hướng dẫn đóng góp
Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này
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 subsurface/libdc
-
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 45/100
subsurface/libdc#110 ·
-
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 35/100
subsurface/libdc#91 · 2 bình luận ·
Tất cả issue của subsurface/libdc
Issue tương tự
-
task
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 70/100
vsanthanam/JBird#429 ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 70/100
-
bug documentation
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100
es-ude/OnDeviceTraining#459 ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 65/100
bilelmoussaoui/gobject-linter#199 · 1 bình luận ·
-
bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100
bradcypert/plum#53 ·