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

Memory leaks from dc_field_add_string

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

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
Loại issue
Lỗi
Độ rõ ràng
Khá rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
c
Lĩnh vực
backend

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

  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 subsurface/libdc

Tất cả issue của subsurface/libdc

Issue tương tự

Thêm issue về C

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.