#1056048 Memory leak in dcm2json

#1056048#5
Date:
2023-11-16 11:05:55 UTC
From:
To:
Looks like there is a memory leak using the new citrus/oficonv lib:

curl -O https://dclunie.com/images/charset/charsettests.20070405.tar.bz2
tar xf charsettests.20070405.tar.bz2
valgrind  --leak-check=full --show-leak-kinds=all dcm2json
charsettests/SCSARAB  output.json

I cannot reproduce the symptoms using default glibc/iconv (dcmtk 3.6.7-9).

Reports:

==1688197== Memcheck, a memory error detector
==1688197== Copyright (C) 2002-2022, and GNU GPL'd, by Julian Seward et al.
==1688197== Using Valgrind-3.19.0 and LibVEX; rerun with -h for copyright info
==1688197== Command: dcm2json charsettests/SCSARAB output.json
==1688197==
==1688197==
==1688197== HEAP SUMMARY:
==1688197==     in use at exit: 1,562 bytes in 18 blocks
==1688197==   total heap usage: 80,067 allocs, 80,049 frees, 2,124,652
bytes allocated
==1688197==
==1688197== 8 bytes in 1 blocks are still reachable in loss record 1 of 18
==1688197==    at 0x48455EF: calloc (in
/usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==1688197==    by 0x4F594EA: _citrus_UTF8_stdenc_init
(citrus_stdenc_template.h:84)
==1688197==    by 0x4F4E301: _citrus_stdenc_open (citrus_stdenc.c:118)
==1688197==    by 0x4F55A69: _citrus_iconv_std_iconv_init_shared
(citrus_iconv_std.c:374)
==1688197==    by 0x4F56B83: UnknownInlinedFun (citrus_iconv.c:201)
==1688197==    by 0x4F56B83: UnknownInlinedFun (citrus_iconv.c:265)
==1688197==    by 0x4F56B83: _citrus_iconv_open (citrus_iconv.c:349)
==1688197==    by 0x4F59117: _iconv_open (oficonv_iconv.c:107)
==1688197==    by 0x4AE71E2: UnknownInlinedFun (ofchrenc.cc:337)
==1688197==    by 0x4AE71E2:
OFCharacterEncoding::selectEncoding(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&) (ofchrenc.cc:785)
==1688197==    by 0x49B5F63:
DcmSpecificCharacterSet::selectCharacterSetWithoutCodeExtensions()
(dcspchrs.cc:338)
==1688197==    by 0x49B6797:
DcmSpecificCharacterSet::selectCharacterSet(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&) (dcspchrs.cc:189)
==1688197==    by 0x498F5A6:
DcmItem::convertCharacterSet(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&, unsigned long, bool) (dcitem.cc:4403)
==1688197==    by 0x498CB96:
DcmItem::convertCharacterSet(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&, unsigned long,
bool) (dcitem.cc:4442)
==1688197==    by 0x498A83C: DcmItem::convertToUTF8() (dcitem.cc:4465)
==1688197==
==1688197== 15 bytes in 1 blocks are still reachable in loss record 2 of 18
==1688197==    at 0x48407B4: malloc (in
/usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==1688197==    by 0x4E037F9: strdup (strdup.c:42)
==1688197==    by 0x4F56F9F: _citrus_mapper_open (citrus_mapper.c:370)
==1688197==    by 0x4F5C6F1: _citrus_csmapper_open.constprop.0
(citrus_csmapper.c:411)
==1688197==    by 0x4F55B54: UnknownInlinedFun (citrus_iconv_std.c:186)
==1688197==    by 0x4F55B54: UnknownInlinedFun (citrus_iconv_std.c:225)
==1688197==    by 0x4F55B54: UnknownInlinedFun (citrus_iconv_std.c:283)
==1688197==    by 0x4F55B54: _citrus_iconv_std_iconv_init_shared
(citrus_iconv_std.c:382)
==1688197==    by 0x4F56B83: UnknownInlinedFun (citrus_iconv.c:201)
==1688197==    by 0x4F56B83: UnknownInlinedFun (citrus_iconv.c:265)
==1688197==    by 0x4F56B83: _citrus_iconv_open (citrus_iconv.c:349)
==1688197==    by 0x4F59117: _iconv_open (oficonv_iconv.c:107)
==1688197==    by 0x4AE71E2: UnknownInlinedFun (ofchrenc.cc:337)
==1688197==    by 0x4AE71E2:
OFCharacterEncoding::selectEncoding(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&) (ofchrenc.cc:785)
==1688197==    by 0x49B5F63:
DcmSpecificCharacterSet::selectCharacterSetWithoutCodeExtensions()
(dcspchrs.cc:338)
==1688197==    by 0x49B6797:
DcmSpecificCharacterSet::selectCharacterSet(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&) (dcspchrs.cc:189)
==1688197==    by 0x498F5A6:
DcmItem::convertCharacterSet(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&, unsigned long, bool) (dcitem.cc:4403)
==1688197==    by 0x498CB96:
DcmItem::convertCharacterSet(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&, unsigned long,
bool) (dcitem.cc:4442)
==1688197==
==1688197== 24 bytes in 1 blocks are still reachable in loss record 3 of 18
==1688197==    at 0x48407B4: malloc (in
/usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==1688197==    by 0x4F4E2EA: _citrus_stdenc_open (citrus_stdenc.c:112)
==1688197==    by 0x4F55A69: _citrus_iconv_std_iconv_init_shared
(citrus_iconv_std.c:374)
==1688197==    by 0x4F56B83: UnknownInlinedFun (citrus_iconv.c:201)
==1688197==    by 0x4F56B83: UnknownInlinedFun (citrus_iconv.c:265)
==1688197==    by 0x4F56B83: _citrus_iconv_open (citrus_iconv.c:349)
==1688197==    by 0x4F59117: _iconv_open (oficonv_iconv.c:107)
==1688197==    by 0x4AE71E2: UnknownInlinedFun (ofchrenc.cc:337)
==1688197==    by 0x4AE71E2:
OFCharacterEncoding::selectEncoding(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&) (ofchrenc.cc:785)
==1688197==    by 0x49B5F63:
DcmSpecificCharacterSet::selectCharacterSetWithoutCodeExtensions()
(dcspchrs.cc:338)
==1688197==    by 0x49B6797:
DcmSpecificCharacterSet::selectCharacterSet(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&) (dcspchrs.cc:189)
==1688197==    by 0x498F5A6:
DcmItem::convertCharacterSet(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&, unsigned long, bool) (dcitem.cc:4403)
==1688197==    by 0x498CB96:
DcmItem::convertCharacterSet(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&, unsigned long,
bool) (dcitem.cc:4442)
==1688197==    by 0x498A83C: DcmItem::convertToUTF8() (dcitem.cc:4465)
==1688197==    by 0x10C7D3: main (dcm2json.cc:281)
==1688197==
==1688197== 24 bytes in 1 blocks are still reachable in loss record 4 of 18
==1688197==    at 0x48407B4: malloc (in
/usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==1688197==    by 0x4F5313F: mapper_open.lto_priv.0 (citrus_mapper.c:274)
==1688197==    by 0x4F56F7B: _citrus_mapper_open (citrus_mapper.c:366)
==1688197==    by 0x4F5C6F1: _citrus_csmapper_open.constprop.0
(citrus_csmapper.c:411)
==1688197==    by 0x4F55B54: UnknownInlinedFun (citrus_iconv_std.c:186)
==1688197==    by 0x4F55B54: UnknownInlinedFun (citrus_iconv_std.c:225)
==1688197==    by 0x4F55B54: UnknownInlinedFun (citrus_iconv_std.c:283)
==1688197==    by 0x4F55B54: _citrus_iconv_std_iconv_init_shared
(citrus_iconv_std.c:382)
==1688197==    by 0x4F56B83: UnknownInlinedFun (citrus_iconv.c:201)
==1688197==    by 0x4F56B83: UnknownInlinedFun (citrus_iconv.c:265)
==1688197==    by 0x4F56B83: _citrus_iconv_open (citrus_iconv.c:349)
==1688197==    by 0x4F59117: _iconv_open (oficonv_iconv.c:107)
==1688197==    by 0x4AE71E2: UnknownInlinedFun (ofchrenc.cc:337)
==1688197==    by 0x4AE71E2:
OFCharacterEncoding::selectEncoding(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&) (ofchrenc.cc:785)
==1688197==    by 0x49B5F63:
DcmSpecificCharacterSet::selectCharacterSetWithoutCodeExtensions()
(dcspchrs.cc:338)
==1688197==    by 0x49B6797:
DcmSpecificCharacterSet::selectCharacterSet(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&) (dcspchrs.cc:189)
==1688197==    by 0x498F5A6:
DcmItem::convertCharacterSet(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&, unsigned long, bool) (dcitem.cc:4403)
==1688197==    by 0x498CB96:
DcmItem::convertCharacterSet(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&, unsigned long,
bool) (dcitem.cc:4442)
==1688197==
==1688197== 24 bytes in 1 blocks are still reachable in loss record 5 of 18
==1688197==    at 0x48407B4: malloc (in
/usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==1688197==    by 0x4F4FE96: UnknownInlinedFun (citrus_mapper_std.c:167)
==1688197==    by 0x4F4FE96: rowcol_init (citrus_mapper_std.c:274)
==1688197==    by 0x4F560F4: _citrus_mapper_std_mapper_init.part.0
(citrus_mapper_std.c:391)
==1688197==    by 0x4F53173: mapper_open.lto_priv.0 (citrus_mapper.c:280)
==1688197==    by 0x4F56F7B: _citrus_mapper_open (citrus_mapper.c:366)
==1688197==    by 0x4F5C6F1: _citrus_csmapper_open.constprop.0
(citrus_csmapper.c:411)
==1688197==    by 0x4F55B54: UnknownInlinedFun (citrus_iconv_std.c:186)
==1688197==    by 0x4F55B54: UnknownInlinedFun (citrus_iconv_std.c:225)
==1688197==    by 0x4F55B54: UnknownInlinedFun (citrus_iconv_std.c:283)
==1688197==    by 0x4F55B54: _citrus_iconv_std_iconv_init_shared
(citrus_iconv_std.c:382)
==1688197==    by 0x4F56B83: UnknownInlinedFun (citrus_iconv.c:201)
==1688197==    by 0x4F56B83: UnknownInlinedFun (citrus_iconv.c:265)
==1688197==    by 0x4F56B83: _citrus_iconv_open (citrus_iconv.c:349)
==1688197==    by 0x4F59117: _iconv_open (oficonv_iconv.c:107)
==1688197==    by 0x4AE71E2: UnknownInlinedFun (ofchrenc.cc:337)
==1688197==    by 0x4AE71E2:
OFCharacterEncoding::selectEncoding(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&) (ofchrenc.cc:785)
==1688197==    by 0x49B5F63:
DcmSpecificCharacterSet::selectCharacterSetWithoutCodeExtensions()
(dcspchrs.cc:338)
==1688197==    by 0x49B6797:
DcmSpecificCharacterSet::selectCharacterSet(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&) (dcspchrs.cc:189)
==1688197==
==1688197== 26 bytes in 1 blocks are still reachable in loss record 6 of 18
==1688197==    at 0x48407B4: malloc (in
/usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==1688197==    by 0x4E037F9: strdup (strdup.c:42)
==1688197==    by 0x4F5C7F1: UnknownInlinedFun (citrus_mapper.c:119)
==1688197==    by 0x4F5C7F1: _citrus_csmapper_open.constprop.0
(citrus_csmapper.c:388)
==1688197==    by 0x4F55B54: UnknownInlinedFun (citrus_iconv_std.c:186)
==1688197==    by 0x4F55B54: UnknownInlinedFun (citrus_iconv_std.c:225)
==1688197==    by 0x4F55B54: UnknownInlinedFun (citrus_iconv_std.c:283)
==1688197==    by 0x4F55B54: _citrus_iconv_std_iconv_init_shared
(citrus_iconv_std.c:382)
==1688197==    by 0x4F56B83: UnknownInlinedFun (citrus_iconv.c:201)
==1688197==    by 0x4F56B83: UnknownInlinedFun (citrus_iconv.c:265)
==1688197==    by 0x4F56B83: _citrus_iconv_open (citrus_iconv.c:349)
==1688197==    by 0x4F59117: _iconv_open (oficonv_iconv.c:107)
==1688197==    by 0x4AE71E2: UnknownInlinedFun (ofchrenc.cc:337)
==1688197==    by 0x4AE71E2:
OFCharacterEncoding::selectEncoding(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&) (ofchrenc.cc:785)
==1688197==    by 0x49B5F63:
DcmSpecificCharacterSet::selectCharacterSetWithoutCodeExtensions()
(dcspchrs.cc:338)
==1688197==    by 0x49B6797:
DcmSpecificCharacterSet::selectCharacterSet(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&) (dcspchrs.cc:189)
==1688197==    by 0x498F5A6:
DcmItem::convertCharacterSet(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&, unsigned long, bool) (dcitem.cc:4403)
==1688197==    by 0x498CB96:
DcmItem::convertCharacterSet(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&, unsigned long,
bool) (dcitem.cc:4442)
==1688197==    by 0x498A83C: DcmItem::convertToUTF8() (dcitem.cc:4465)
==1688197==
==1688197== 32 bytes in 1 blocks are still reachable in loss record 7 of 18
==1688197==    at 0x48407B4: malloc (in
/usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==1688197==    by 0x4F4E241: _citrus_stdenc_open (citrus_stdenc.c:65)
==1688197==    by 0x4F55A69: _citrus_iconv_std_iconv_init_shared
(citrus_iconv_std.c:374)
==1688197==    by 0x4F56B83: UnknownInlinedFun (citrus_iconv.c:201)
==1688197==    by 0x4F56B83: UnknownInlinedFun (citrus_iconv.c:265)
==1688197==    by 0x4F56B83: _citrus_iconv_open (citrus_iconv.c:349)
==1688197==    by 0x4F59117: _iconv_open (oficonv_iconv.c:107)
==1688197==    by 0x4AE71E2: UnknownInlinedFun (ofchrenc.cc:337)
==1688197==    by 0x4AE71E2:
OFCharacterEncoding::selectEncoding(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&) (ofchrenc.cc:785)
==1688197==    by 0x49B5F63:
DcmSpecificCharacterSet::selectCharacterSetWithoutCodeExtensions()
(dcspchrs.cc:338)
==1688197==    by 0x49B6797:
DcmSpecificCharacterSet::selectCharacterSet(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&) (dcspchrs.cc:189)
==1688197==    by 0x498F5A6:
DcmItem::convertCharacterSet(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&, unsigned long, bool) (dcitem.cc:4403)
==1688197==    by 0x498CB96:
DcmItem::convertCharacterSet(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&, unsigned long,
bool) (dcitem.cc:4442)
==1688197==    by 0x498A83C: DcmItem::convertToUTF8() (dcitem.cc:4465)
==1688197==    by 0x10C7D3: main (dcm2json.cc:281)
==1688197==
==1688197== 32 bytes in 1 blocks are still reachable in loss record 8 of 18
==1688197==    at 0x48407B4: malloc (in
/usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==1688197==    by 0x4F530FE: mapper_open.lto_priv.0 (citrus_mapper.c:256)
==1688197==    by 0x4F56F7B: _citrus_mapper_open (citrus_mapper.c:366)
==1688197==    by 0x4F5C6F1: _citrus_csmapper_open.constprop.0
(citrus_csmapper.c:411)
==1688197==    by 0x4F55B54: UnknownInlinedFun (citrus_iconv_std.c:186)
==1688197==    by 0x4F55B54: UnknownInlinedFun (citrus_iconv_std.c:225)
==1688197==    by 0x4F55B54: UnknownInlinedFun (citrus_iconv_std.c:283)
==1688197==    by 0x4F55B54: _citrus_iconv_std_iconv_init_shared
(citrus_iconv_std.c:382)
==1688197==    by 0x4F56B83: UnknownInlinedFun (citrus_iconv.c:201)
==1688197==    by 0x4F56B83: UnknownInlinedFun (citrus_iconv.c:265)
==1688197==    by 0x4F56B83: _citrus_iconv_open (citrus_iconv.c:349)
==1688197==    by 0x4F59117: _iconv_open (oficonv_iconv.c:107)
==1688197==    by 0x4AE71E2: UnknownInlinedFun (ofchrenc.cc:337)
==1688197==    by 0x4AE71E2:
OFCharacterEncoding::selectEncoding(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&) (ofchrenc.cc:785)
==1688197==    by 0x49B5F63:
DcmSpecificCharacterSet::selectCharacterSetWithoutCodeExtensions()
(dcspchrs.cc:338)
==1688197==    by 0x49B6797:
DcmSpecificCharacterSet::selectCharacterSet(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&) (dcspchrs.cc:189)
==1688197==    by 0x498F5A6:
DcmItem::convertCharacterSet(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&, unsigned long, bool) (dcitem.cc:4403)
==1688197==    by 0x498CB96:
DcmItem::convertCharacterSet(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&, unsigned long,
bool) (dcitem.cc:4442)
==1688197==
==1688197== 40 bytes in 1 blocks are still reachable in loss record 9 of 18
==1688197==    at 0x48407B4: malloc (in
/usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==1688197==    by 0x4F56B20: UnknownInlinedFun (citrus_iconv.c:182)
==1688197==    by 0x4F56B20: UnknownInlinedFun (citrus_iconv.c:265)
==1688197==    by 0x4F56B20: _citrus_iconv_open (citrus_iconv.c:349)
==1688197==    by 0x4F59117: _iconv_open (oficonv_iconv.c:107)
==1688197==    by 0x4AE71E2: UnknownInlinedFun (ofchrenc.cc:337)
==1688197==    by 0x4AE71E2:
OFCharacterEncoding::selectEncoding(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&) (ofchrenc.cc:785)
==1688197==    by 0x49B5F63:
DcmSpecificCharacterSet::selectCharacterSetWithoutCodeExtensions()
(dcspchrs.cc:338)
==1688197==    by 0x49B6797:
DcmSpecificCharacterSet::selectCharacterSet(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&) (dcspchrs.cc:189)
==1688197==    by 0x498F5A6:
DcmItem::convertCharacterSet(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&, unsigned long, bool) (dcitem.cc:4403)
==1688197==    by 0x498CB96:
DcmItem::convertCharacterSet(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&, unsigned long,
bool) (dcitem.cc:4442)
==1688197==    by 0x498A83C: DcmItem::convertToUTF8() (dcitem.cc:4465)
==1688197==    by 0x10C7D3: main (dcm2json.cc:281)
==1688197==
==1688197== 40 bytes in 1 blocks are still reachable in loss record 10 of 18
==1688197==    at 0x48407B4: malloc (in
/usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==1688197==    by 0x4F55988: _citrus_iconv_std_iconv_init_shared
(citrus_iconv_std.c:359)
==1688197==    by 0x4F56B83: UnknownInlinedFun (citrus_iconv.c:201)
==1688197==    by 0x4F56B83: UnknownInlinedFun (citrus_iconv.c:265)
==1688197==    by 0x4F56B83: _citrus_iconv_open (citrus_iconv.c:349)
==1688197==    by 0x4F59117: _iconv_open (oficonv_iconv.c:107)
==1688197==    by 0x4AE71E2: UnknownInlinedFun (ofchrenc.cc:337)
==1688197==    by 0x4AE71E2:
OFCharacterEncoding::selectEncoding(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&) (ofchrenc.cc:785)
==1688197==    by 0x49B5F63:
DcmSpecificCharacterSet::selectCharacterSetWithoutCodeExtensions()
(dcspchrs.cc:338)
==1688197==    by 0x49B6797:
DcmSpecificCharacterSet::selectCharacterSet(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&) (dcspchrs.cc:189)
==1688197==    by 0x498F5A6:
DcmItem::convertCharacterSet(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&, unsigned long, bool) (dcitem.cc:4403)
==1688197==    by 0x498CB96:
DcmItem::convertCharacterSet(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&, unsigned long,
bool) (dcitem.cc:4442)
==1688197==    by 0x498A83C: DcmItem::convertToUTF8() (dcitem.cc:4465)
==1688197==    by 0x10C7D3: main (dcm2json.cc:281)
==1688197==
==1688197== 40 bytes in 1 blocks are still reachable in loss record 11 of 18
==1688197==    at 0x48407B4: malloc (in
/usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==1688197==    by 0x4F55AA1: UnknownInlinedFun (citrus_iconv_std.c:276)
==1688197==    by 0x4F55AA1: _citrus_iconv_std_iconv_init_shared
(citrus_iconv_std.c:382)
==1688197==    by 0x4F56B83: UnknownInlinedFun (citrus_iconv.c:201)
==1688197==    by 0x4F56B83: UnknownInlinedFun (citrus_iconv.c:265)
==1688197==    by 0x4F56B83: _citrus_iconv_open (citrus_iconv.c:349)
==1688197==    by 0x4F59117: _iconv_open (oficonv_iconv.c:107)
==1688197==    by 0x4AE71E2: UnknownInlinedFun (ofchrenc.cc:337)
==1688197==    by 0x4AE71E2:
OFCharacterEncoding::selectEncoding(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&) (ofchrenc.cc:785)
==1688197==    by 0x49B5F63:
DcmSpecificCharacterSet::selectCharacterSetWithoutCodeExtensions()
(dcspchrs.cc:338)
==1688197==    by 0x49B6797:
DcmSpecificCharacterSet::selectCharacterSet(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&) (dcspchrs.cc:189)
==1688197==    by 0x498F5A6:
DcmItem::convertCharacterSet(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&, unsigned long, bool) (dcitem.cc:4403)
==1688197==    by 0x498CB96:
DcmItem::convertCharacterSet(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&, unsigned long,
bool) (dcitem.cc:4442)
==1688197==    by 0x498A83C: DcmItem::convertToUTF8() (dcitem.cc:4465)
==1688197==    by 0x10C7D3: main (dcm2json.cc:281)
==1688197==
==1688197== 40 bytes in 1 blocks are still reachable in loss record 12 of 18
==1688197==    at 0x48407B4: malloc (in
/usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==1688197==    by 0x4F55B01: UnknownInlinedFun (citrus_iconv_std.c:220)
==1688197==    by 0x4F55B01: UnknownInlinedFun (citrus_iconv_std.c:283)
==1688197==    by 0x4F55B01: _citrus_iconv_std_iconv_init_shared
(citrus_iconv_std.c:382)
==1688197==    by 0x4F56B83: UnknownInlinedFun (citrus_iconv.c:201)
==1688197==    by 0x4F56B83: UnknownInlinedFun (citrus_iconv.c:265)
==1688197==    by 0x4F56B83: _citrus_iconv_open (citrus_iconv.c:349)
==1688197==    by 0x4F59117: _iconv_open (oficonv_iconv.c:107)
==1688197==    by 0x4AE71E2: UnknownInlinedFun (ofchrenc.cc:337)
==1688197==    by 0x4AE71E2:
OFCharacterEncoding::selectEncoding(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&) (ofchrenc.cc:785)
==1688197==    by 0x49B5F63:
DcmSpecificCharacterSet::selectCharacterSetWithoutCodeExtensions()
(dcspchrs.cc:338)
==1688197==    by 0x49B6797:
DcmSpecificCharacterSet::selectCharacterSet(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&) (dcspchrs.cc:189)
==1688197==    by 0x498F5A6:
DcmItem::convertCharacterSet(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&, unsigned long, bool) (dcitem.cc:4403)
==1688197==    by 0x498CB96:
DcmItem::convertCharacterSet(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&, unsigned long,
bool) (dcitem.cc:4442)
==1688197==    by 0x498A83C: DcmItem::convertToUTF8() (dcitem.cc:4465)
==1688197==    by 0x10C7D3: main (dcm2json.cc:281)
==1688197==
==1688197== 40 bytes in 1 blocks are still reachable in loss record 13 of 18
==1688197==    at 0x48407B4: malloc (in
/usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==1688197==    by 0x4F5C148: _citrus_db_open.constprop.0 (citrus_db.c:77)
==1688197==    by 0x4F56072: _citrus_mapper_std_mapper_init.part.0
(citrus_mapper_std.c:370)
==1688197==    by 0x4F53173: mapper_open.lto_priv.0 (citrus_mapper.c:280)
==1688197==    by 0x4F56F7B: _citrus_mapper_open (citrus_mapper.c:366)
==1688197==    by 0x4F5C6F1: _citrus_csmapper_open.constprop.0
(citrus_csmapper.c:411)
==1688197==    by 0x4F55B54: UnknownInlinedFun (citrus_iconv_std.c:186)
==1688197==    by 0x4F55B54: UnknownInlinedFun (citrus_iconv_std.c:225)
==1688197==    by 0x4F55B54: UnknownInlinedFun (citrus_iconv_std.c:283)
==1688197==    by 0x4F55B54: _citrus_iconv_std_iconv_init_shared
(citrus_iconv_std.c:382)
==1688197==    by 0x4F56B83: UnknownInlinedFun (citrus_iconv.c:201)
==1688197==    by 0x4F56B83: UnknownInlinedFun (citrus_iconv.c:265)
==1688197==    by 0x4F56B83: _citrus_iconv_open (citrus_iconv.c:349)
==1688197==    by 0x4F59117: _iconv_open (oficonv_iconv.c:107)
==1688197==    by 0x4AE71E2: UnknownInlinedFun (ofchrenc.cc:337)
==1688197==    by 0x4AE71E2:
OFCharacterEncoding::selectEncoding(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&) (ofchrenc.cc:785)
==1688197==    by 0x49B5F63:
DcmSpecificCharacterSet::selectCharacterSetWithoutCodeExtensions()
(dcspchrs.cc:338)
==1688197==    by 0x49B6797:
DcmSpecificCharacterSet::selectCharacterSet(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&) (dcspchrs.cc:189)
==1688197==
==1688197== 64 bytes in 1 blocks are still reachable in loss record 14 of 18
==1688197==    at 0x48407B4: malloc (in
/usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==1688197==    by 0x4F53093: mapper_open.lto_priv.0 (citrus_mapper.c:233)
==1688197==    by 0x4F56F7B: _citrus_mapper_open (citrus_mapper.c:366)
==1688197==    by 0x4F5C6F1: _citrus_csmapper_open.constprop.0
(citrus_csmapper.c:411)
==1688197==    by 0x4F55B54: UnknownInlinedFun (citrus_iconv_std.c:186)
==1688197==    by 0x4F55B54: UnknownInlinedFun (citrus_iconv_std.c:225)
==1688197==    by 0x4F55B54: UnknownInlinedFun (citrus_iconv_std.c:283)
==1688197==    by 0x4F55B54: _citrus_iconv_std_iconv_init_shared
(citrus_iconv_std.c:382)
==1688197==    by 0x4F56B83: UnknownInlinedFun (citrus_iconv.c:201)
==1688197==    by 0x4F56B83: UnknownInlinedFun (citrus_iconv.c:265)
==1688197==    by 0x4F56B83: _citrus_iconv_open (citrus_iconv.c:349)
==1688197==    by 0x4F59117: _iconv_open (oficonv_iconv.c:107)
==1688197==    by 0x4AE71E2: UnknownInlinedFun (ofchrenc.cc:337)
==1688197==    by 0x4AE71E2:
OFCharacterEncoding::selectEncoding(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&) (ofchrenc.cc:785)
==1688197==    by 0x49B5F63:
DcmSpecificCharacterSet::selectCharacterSetWithoutCodeExtensions()
(dcspchrs.cc:338)
==1688197==    by 0x49B6797:
DcmSpecificCharacterSet::selectCharacterSet(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&) (dcspchrs.cc:189)
==1688197==    by 0x498F5A6:
DcmItem::convertCharacterSet(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&, unsigned long, bool) (dcitem.cc:4403)
==1688197==    by 0x498CB96:
DcmItem::convertCharacterSet(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&, unsigned long,
bool) (dcitem.cc:4442)
==1688197==
==1688197== 72 bytes in 1 blocks are still reachable in loss record 15 of 18
==1688197==    at 0x48407B4: malloc (in
/usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==1688197==    by 0x4F4E288: _citrus_stdenc_open (citrus_stdenc.c:88)
==1688197==    by 0x4F55A69: _citrus_iconv_std_iconv_init_shared
(citrus_iconv_std.c:374)
==1688197==    by 0x4F56B83: UnknownInlinedFun (citrus_iconv.c:201)
==1688197==    by 0x4F56B83: UnknownInlinedFun (citrus_iconv.c:265)
==1688197==    by 0x4F56B83: _citrus_iconv_open (citrus_iconv.c:349)
==1688197==    by 0x4F59117: _iconv_open (oficonv_iconv.c:107)
==1688197==    by 0x4AE71E2: UnknownInlinedFun (ofchrenc.cc:337)
==1688197==    by 0x4AE71E2:
OFCharacterEncoding::selectEncoding(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&) (ofchrenc.cc:785)
==1688197==    by 0x49B5F63:
DcmSpecificCharacterSet::selectCharacterSetWithoutCodeExtensions()
(dcspchrs.cc:338)
==1688197==    by 0x49B6797:
DcmSpecificCharacterSet::selectCharacterSet(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&) (dcspchrs.cc:189)
==1688197==    by 0x498F5A6:
DcmItem::convertCharacterSet(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&, unsigned long, bool) (dcitem.cc:4403)
==1688197==    by 0x498CB96:
DcmItem::convertCharacterSet(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&, unsigned long,
bool) (dcitem.cc:4442)
==1688197==    by 0x498A83C: DcmItem::convertToUTF8() (dcitem.cc:4465)
==1688197==    by 0x10C7D3: main (dcm2json.cc:281)
==1688197==
==1688197== 112 bytes in 1 blocks are still reachable in loss record 16 of 18
==1688197==    at 0x48407B4: malloc (in
/usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==1688197==    by 0x4F55FDD: _citrus_mapper_std_mapper_init.part.0
(citrus_mapper_std.c:357)
==1688197==    by 0x4F53173: mapper_open.lto_priv.0 (citrus_mapper.c:280)
==1688197==    by 0x4F56F7B: _citrus_mapper_open (citrus_mapper.c:366)
==1688197==    by 0x4F5C6F1: _citrus_csmapper_open.constprop.0
(citrus_csmapper.c:411)
==1688197==    by 0x4F55B54: UnknownInlinedFun (citrus_iconv_std.c:186)
==1688197==    by 0x4F55B54: UnknownInlinedFun (citrus_iconv_std.c:225)
==1688197==    by 0x4F55B54: UnknownInlinedFun (citrus_iconv_std.c:283)
==1688197==    by 0x4F55B54: _citrus_iconv_std_iconv_init_shared
(citrus_iconv_std.c:382)
==1688197==    by 0x4F56B83: UnknownInlinedFun (citrus_iconv.c:201)
==1688197==    by 0x4F56B83: UnknownInlinedFun (citrus_iconv.c:265)
==1688197==    by 0x4F56B83: _citrus_iconv_open (citrus_iconv.c:349)
==1688197==    by 0x4F59117: _iconv_open (oficonv_iconv.c:107)
==1688197==    by 0x4AE71E2: UnknownInlinedFun (ofchrenc.cc:337)
==1688197==    by 0x4AE71E2:
OFCharacterEncoding::selectEncoding(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&) (ofchrenc.cc:785)
==1688197==    by 0x49B5F63:
DcmSpecificCharacterSet::selectCharacterSetWithoutCodeExtensions()
(dcspchrs.cc:338)
==1688197==    by 0x49B6797:
DcmSpecificCharacterSet::selectCharacterSet(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&) (dcspchrs.cc:189)
==1688197==    by 0x498F5A6:
DcmItem::convertCharacterSet(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&, unsigned long, bool) (dcitem.cc:4403)
==1688197==
==1688197== 113 bytes in 1 blocks are still reachable in loss record 17 of 18
==1688197==    at 0x48407B4: malloc (in
/usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==1688197==    by 0x4F56A9D: UnknownInlinedFun (citrus_iconv.c:159)
==1688197==    by 0x4F56A9D: UnknownInlinedFun (citrus_iconv.c:265)
==1688197==    by 0x4F56A9D: _citrus_iconv_open (citrus_iconv.c:349)
==1688197==    by 0x4F59117: _iconv_open (oficonv_iconv.c:107)
==1688197==    by 0x4AE71E2: UnknownInlinedFun (ofchrenc.cc:337)
==1688197==    by 0x4AE71E2:
OFCharacterEncoding::selectEncoding(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&) (ofchrenc.cc:785)
==1688197==    by 0x49B5F63:
DcmSpecificCharacterSet::selectCharacterSetWithoutCodeExtensions()
(dcspchrs.cc:338)
==1688197==    by 0x49B6797:
DcmSpecificCharacterSet::selectCharacterSet(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&) (dcspchrs.cc:189)
==1688197==    by 0x498F5A6:
DcmItem::convertCharacterSet(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&, unsigned long, bool) (dcitem.cc:4403)
==1688197==    by 0x498CB96:
DcmItem::convertCharacterSet(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&, unsigned long,
bool) (dcitem.cc:4442)
==1688197==    by 0x498A83C: DcmItem::convertToUTF8() (dcitem.cc:4465)
==1688197==    by 0x10C7D3: main (dcm2json.cc:281)
==1688197==
==1688197== 816 bytes in 1 blocks are still reachable in loss record 18 of 18
==1688197==    at 0x48407B4: malloc (in
/usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==1688197==    by 0x4F5C7DD: UnknownInlinedFun (citrus_mapper.c:114)
==1688197==    by 0x4F5C7DD: _citrus_csmapper_open.constprop.0
(citrus_csmapper.c:388)
==1688197==    by 0x4F55B54: UnknownInlinedFun (citrus_iconv_std.c:186)
==1688197==    by 0x4F55B54: UnknownInlinedFun (citrus_iconv_std.c:225)
==1688197==    by 0x4F55B54: UnknownInlinedFun (citrus_iconv_std.c:283)
==1688197==    by 0x4F55B54: _citrus_iconv_std_iconv_init_shared
(citrus_iconv_std.c:382)
==1688197==    by 0x4F56B83: UnknownInlinedFun (citrus_iconv.c:201)
==1688197==    by 0x4F56B83: UnknownInlinedFun (citrus_iconv.c:265)
==1688197==    by 0x4F56B83: _citrus_iconv_open (citrus_iconv.c:349)
==1688197==    by 0x4F59117: _iconv_open (oficonv_iconv.c:107)
==1688197==    by 0x4AE71E2: UnknownInlinedFun (ofchrenc.cc:337)
==1688197==    by 0x4AE71E2:
OFCharacterEncoding::selectEncoding(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&) (ofchrenc.cc:785)
==1688197==    by 0x49B5F63:
DcmSpecificCharacterSet::selectCharacterSetWithoutCodeExtensions()
(dcspchrs.cc:338)
==1688197==    by 0x49B6797:
DcmSpecificCharacterSet::selectCharacterSet(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&) (dcspchrs.cc:189)
==1688197==    by 0x498F5A6:
DcmItem::convertCharacterSet(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&, unsigned long, bool) (dcitem.cc:4403)
==1688197==    by 0x498CB96:
DcmItem::convertCharacterSet(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&, unsigned long,
bool) (dcitem.cc:4442)
==1688197==    by 0x498A83C: DcmItem::convertToUTF8() (dcitem.cc:4465)
==1688197==    by 0x10C7D3: main (dcm2json.cc:281)
==1688197==
==1688197== LEAK SUMMARY:
==1688197==    definitely lost: 0 bytes in 0 blocks
==1688197==    indirectly lost: 0 bytes in 0 blocks
==1688197==      possibly lost: 0 bytes in 0 blocks
==1688197==    still reachable: 1,562 bytes in 18 blocks
==1688197==         suppressed: 0 bytes in 0 blocks
==1688197==
==1688197== For lists of detected and suppressed errors, rerun with: -s
==1688197== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)

#1056048#10
Date:
2023-11-20 08:57:08 UTC
From:
To:
As pointed out by upstream, one must export the following:

<quote>
You should set the environment variable ICONV_MAX_REUSE to zero
before running such tests:

   export ICONV_MAX_REUSE=0
   valgrind  --leak-check=full ...
<quote>

Which gives now the reduced set of leaks:

% valgrind  --leak-check=full --show-leak-kinds=all dcm2json
charsettests/SCSARAB  output.json
==1928491== Memcheck, a memory error detector
==1928491== Copyright (C) 2002-2022, and GNU GPL'd, by Julian Seward et al.
==1928491== Using Valgrind-3.19.0 and LibVEX; rerun with -h for copyright info
==1928491== Command: dcm2json charsettests/SCSARAB output.json
==1928491==
==1928491==
==1928491== HEAP SUMMARY:
==1928491==     in use at exit: 842 bytes in 2 blocks
==1928491==   total heap usage: 80,067 allocs, 80,065 frees, 2,124,652
bytes allocated
==1928491==
==1928491== 26 bytes in 1 blocks are still reachable in loss record 1 of 2
==1928491==    at 0x48407B4: malloc (in
/usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==1928491==    by 0x4E037F9: strdup (strdup.c:42)
==1928491==    by 0x4F5C7F1: UnknownInlinedFun (citrus_mapper.c:119)
==1928491==    by 0x4F5C7F1: _citrus_csmapper_open.constprop.0
(citrus_csmapper.c:388)
==1928491==    by 0x4F55B54: UnknownInlinedFun (citrus_iconv_std.c:186)
==1928491==    by 0x4F55B54: UnknownInlinedFun (citrus_iconv_std.c:225)
==1928491==    by 0x4F55B54: UnknownInlinedFun (citrus_iconv_std.c:283)
==1928491==    by 0x4F55B54: _citrus_iconv_std_iconv_init_shared
(citrus_iconv_std.c:382)
==1928491==    by 0x4F56B83: UnknownInlinedFun (citrus_iconv.c:201)
==1928491==    by 0x4F56B83: UnknownInlinedFun (citrus_iconv.c:265)
==1928491==    by 0x4F56B83: _citrus_iconv_open (citrus_iconv.c:349)
==1928491==    by 0x4F59117: _iconv_open (oficonv_iconv.c:107)
==1928491==    by 0x4AE71E2: UnknownInlinedFun (ofchrenc.cc:337)
==1928491==    by 0x4AE71E2:
OFCharacterEncoding::selectEncoding(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&) (ofchrenc.cc:785)
==1928491==    by 0x49B5F63:
DcmSpecificCharacterSet::selectCharacterSetWithoutCodeExtensions()
(dcspchrs.cc:338)
==1928491==    by 0x49B6797:
DcmSpecificCharacterSet::selectCharacterSet(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&) (dcspchrs.cc:189)
==1928491==    by 0x498F5A6:
DcmItem::convertCharacterSet(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&, unsigned long, bool) (dcitem.cc:4403)
==1928491==    by 0x498CB96:
DcmItem::convertCharacterSet(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&, unsigned long,
bool) (dcitem.cc:4442)
==1928491==    by 0x498A83C: DcmItem::convertToUTF8() (dcitem.cc:4465)
==1928491==
==1928491== 816 bytes in 1 blocks are still reachable in loss record 2 of 2
==1928491==    at 0x48407B4: malloc (in
/usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==1928491==    by 0x4F5C7DD: UnknownInlinedFun (citrus_mapper.c:114)
==1928491==    by 0x4F5C7DD: _citrus_csmapper_open.constprop.0
(citrus_csmapper.c:388)
==1928491==    by 0x4F55B54: UnknownInlinedFun (citrus_iconv_std.c:186)
==1928491==    by 0x4F55B54: UnknownInlinedFun (citrus_iconv_std.c:225)
==1928491==    by 0x4F55B54: UnknownInlinedFun (citrus_iconv_std.c:283)
==1928491==    by 0x4F55B54: _citrus_iconv_std_iconv_init_shared
(citrus_iconv_std.c:382)
==1928491==    by 0x4F56B83: UnknownInlinedFun (citrus_iconv.c:201)
==1928491==    by 0x4F56B83: UnknownInlinedFun (citrus_iconv.c:265)
==1928491==    by 0x4F56B83: _citrus_iconv_open (citrus_iconv.c:349)
==1928491==    by 0x4F59117: _iconv_open (oficonv_iconv.c:107)
==1928491==    by 0x4AE71E2: UnknownInlinedFun (ofchrenc.cc:337)
==1928491==    by 0x4AE71E2:
OFCharacterEncoding::selectEncoding(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&) (ofchrenc.cc:785)
==1928491==    by 0x49B5F63:
DcmSpecificCharacterSet::selectCharacterSetWithoutCodeExtensions()
(dcspchrs.cc:338)
==1928491==    by 0x49B6797:
DcmSpecificCharacterSet::selectCharacterSet(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&) (dcspchrs.cc:189)
==1928491==    by 0x498F5A6:
DcmItem::convertCharacterSet(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&, unsigned long, bool) (dcitem.cc:4403)
==1928491==    by 0x498CB96:
DcmItem::convertCharacterSet(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&, unsigned long,
bool) (dcitem.cc:4442)
==1928491==    by 0x498A83C: DcmItem::convertToUTF8() (dcitem.cc:4465)
==1928491==    by 0x10C7D3: main (dcm2json.cc:281)
==1928491==
==1928491== LEAK SUMMARY:
==1928491==    definitely lost: 0 bytes in 0 blocks
==1928491==    indirectly lost: 0 bytes in 0 blocks
==1928491==      possibly lost: 0 bytes in 0 blocks
==1928491==    still reachable: 842 bytes in 2 blocks
==1928491==         suppressed: 0 bytes in 0 blocks
==1928491==
==1928491== For lists of detected and suppressed errors, rerun with: -s
==1928491== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)

#1056048#15
Date:
2024-07-08 11:38:36 UTC
From:
To:
% valgrind  --leak-check=full --show-leak-kinds=all dcm2json
charsettests/SCSARAB  output.json
==58329== Memcheck, a memory error detector
==58329== Copyright (C) 2002-2022, and GNU GPL'd, by Julian Seward et al.
==58329== Using Valgrind-3.20.0 and LibVEX; rerun with -h for copyright info
==58329== Command: dcm2json charsettests/SCSARAB output.json
==58329==
==58329==
==58329== HEAP SUMMARY:
==58329==     in use at exit: 842 bytes in 2 blocks
==58329==   total heap usage: 80,063 allocs, 80,061 frees, 2,121,516
bytes allocated
==58329==
==58329== 26 bytes in 1 blocks are still reachable in loss record 1 of 2
==58329==    at 0x4840808: malloc (in
/usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==58329==    by 0x4E5EC19: strdup (strdup.c:42)
==58329==    by 0x4FB9CC9: ??? (in
/usr/lib/x86_64-linux-gnu/liboficonv.so.18.3.6.8)
==58329==    by 0x4FB454D: ??? (in
/usr/lib/x86_64-linux-gnu/liboficonv.so.18.3.6.8)
==58329==    by 0x4FB145B: ??? (in
/usr/lib/x86_64-linux-gnu/liboficonv.so.18.3.6.8)
==58329==    by 0x4FB75DF: ??? (in
/usr/lib/x86_64-linux-gnu/liboficonv.so.18.3.6.8)
==58329==    by 0x4AE71C6:
OFCharacterEncoding::selectEncoding(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&) (in
/usr/lib/x86_64-linux-gnu/libofstd.so.18.3.6.8)
==58329==    by 0x49B2337:
DcmSpecificCharacterSet::selectCharacterSetWithoutCodeExtensions() (in
/usr/lib/x86_64-linux-gnu/libdcmdata.so.18.3.6.8)
==58329==    by 0x49B291F:
DcmSpecificCharacterSet::selectCharacterSet(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&) (in
/usr/lib/x86_64-linux-gnu/libdcmdata.so.18.3.6.8)
==58329==    by 0x498BBBA:
DcmItem::convertCharacterSet(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&, unsigned long, bool) (in
/usr/lib/x86_64-linux-gnu/libdcmdata.so.18.3.6.8)
==58329==    by 0x498905A:
DcmItem::convertCharacterSet(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&, unsigned long,
bool) (in /usr/lib/x86_64-linux-gnu/libdcmdata.so.18.3.6.8)
==58329==    by 0x4986CF0: DcmItem::convertToUTF8() (in
/usr/lib/x86_64-linux-gnu/libdcmdata.so.18.3.6.8)
==58329==
==58329== 816 bytes in 1 blocks are still reachable in loss record 2 of 2
==58329==    at 0x4840808: malloc (in
/usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==58329==    by 0x4FB9CB5: ??? (in
/usr/lib/x86_64-linux-gnu/liboficonv.so.18.3.6.8)
==58329==    by 0x4FB454D: ??? (in
/usr/lib/x86_64-linux-gnu/liboficonv.so.18.3.6.8)
==58329==    by 0x4FB145B: ??? (in
/usr/lib/x86_64-linux-gnu/liboficonv.so.18.3.6.8)
==58329==    by 0x4FB75DF: ??? (in
/usr/lib/x86_64-linux-gnu/liboficonv.so.18.3.6.8)
==58329==    by 0x4AE71C6:
OFCharacterEncoding::selectEncoding(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&) (in
/usr/lib/x86_64-linux-gnu/libofstd.so.18.3.6.8)
==58329==    by 0x49B2337:
DcmSpecificCharacterSet::selectCharacterSetWithoutCodeExtensions() (in
/usr/lib/x86_64-linux-gnu/libdcmdata.so.18.3.6.8)
==58329==    by 0x49B291F:
DcmSpecificCharacterSet::selectCharacterSet(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&) (in
/usr/lib/x86_64-linux-gnu/libdcmdata.so.18.3.6.8)
==58329==    by 0x498BBBA:
DcmItem::convertCharacterSet(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&, unsigned long, bool) (in
/usr/lib/x86_64-linux-gnu/libdcmdata.so.18.3.6.8)
==58329==    by 0x498905A:
DcmItem::convertCharacterSet(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&, unsigned long,
bool) (in /usr/lib/x86_64-linux-gnu/libdcmdata.so.18.3.6.8)
==58329==    by 0x4986CF0: DcmItem::convertToUTF8() (in
/usr/lib/x86_64-linux-gnu/libdcmdata.so.18.3.6.8)
==58329==    by 0x10C248: ??? (in /usr/bin/dcm2json)
==58329==
==58329== LEAK SUMMARY:
==58329==    definitely lost: 0 bytes in 0 blocks
==58329==    indirectly lost: 0 bytes in 0 blocks
==58329==      possibly lost: 0 bytes in 0 blocks
==58329==    still reachable: 842 bytes in 2 blocks
==58329==         suppressed: 0 bytes in 0 blocks
==58329==
==58329== For lists of detected and suppressed errors, rerun with: -s
==58329== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)