Skip to content

ASAN detects memory leak in PARSE_SCFG_STRING #1

Description

@MasterAler

Что делал:

extern "C" {
// clang-format off
#define SCFG_APP_CONFIG(XX)                                                    \
XX((input),         SCFG_STRING, 'i', SCFG_NO_DEFAULT, "input video path")     \
/**/
// clang-format on
#include "scfg/scfg.h"
}

int main(int argc, char *argv[])
{  
// init config
if (!scfg_init(argc, argv))
    exit(1);
return 0;
}           

Собрал c ASAN, получаю:

=================================================================
==10000==ERROR: LeakSanitizer: detected memory leaks

Direct leak of 13 byte(s) in 1 object(s) allocated from:
    #0 0x7f0ed8af6538 in strdup (/usr/lib/x86_64-linux-gnu/libasan.so.4+0x77538)
    #1 0x5643b445cfec in scfg_parse_argv bazel-out/k8-opt/bin/external/com_github_cdump_scfg/_virtual_includes/scfg/scfg/scfg.h:257
    #2 0x5643b445d3db in scfg_init bazel-out/k8-opt/bin/external/com_github_cdump_scfg/_virtual_includes/scfg/scfg/scfg.h:386
    #3 0x5643b445ddc2 in main video-detector/tools/turntable.cc:21
    #4 0x7f0ed794dbf6 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x21bf6)
SUMMARY: AddressSanitizer: 13 byte(s) leaked in 1 allocation(s).

Ругается на scfg/scfg.h:36

#define PARSE_SCFG_STRING(name, val) cfg.name = strdup(val ? val : "")

Предложения: не клонировать строку.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions