RPM Community Forums

Mailing List Message of <popt-devel>

Re: Memory leak with poptGetNextOpt

From: Jeffrey Johnson <n3npq@me.com>
Date: Fri 03 May 2013 - 18:11:19 CEST
Message-id: <78F5B8B9-DBE4-4C53-9547-F8337311D262@me.com>

On May 2, 2013, at 5:56 PM, Karl Lindén wrote:

> Hello!
> 
> I am memory checking a program using the popt library but it seems as
> there is some kind of memory leak in poptGetNextOpt. I have written a
> small test program to show the issue. The program will basically just
> take an integer argument and print the integer to the prompt. Of
> course, the program works as expected, but valgrind records a leak.
> 
> I am attaching the test program. The valgrind output I will post
> further down this mail.
> 
> I'm using popt version 1.16.
> 
> The program was compiled with the following command:
> $ gcc -lpopt popt_test.c -o popt_test
> 
> $ valgrind --leak-check=full ./popt_test -i 890
> ==1170== Memcheck, a memory error detector
> ==1170== Copyright (C) 2002-2012, and GNU GPL'd, by Julian Seward et al.
> ==1170== Using Valgrind-3.8.1 and LibVEX; rerun with -h for copyright info
> ==1170== Command: ./popt_test -i 890
> ==1170==
> integer = 890
> ==1170==
> ==1170== HEAP SUMMARY:
> ==1170==     in use at exit: 4 bytes in 1 blocks
> ==1170==   total heap usage: 6 allocs, 5 frees, 882 bytes allocated
> ==1170==
> ==1170== 4 bytes in 1 blocks are definitely lost in loss record 1 of 1
> ==1170==    at 0x4A099EB: malloc (in
> /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
> ==1170==    by 0x4C3372D: expandNextArg (popt.c:696)
> ==1170==    by 0x4C34FD4: poptGetNextOpt (popt.c:1498)
> ==1170==    by 0x400873: main (in /home/kalle/popt_test)
> ==1170==
> ==1170== LEAK SUMMARY:
> ==1170==    definitely lost: 4 bytes in 1 blocks
> ==1170==    indirectly lost: 0 bytes in 0 blocks
> ==1170==      possibly lost: 0 bytes in 0 blocks
> ==1170==    still reachable: 0 bytes in 0 blocks
> ==1170==         suppressed: 0 bytes in 0 blocks
> ==1170==
> ==1170== For counts of detected and suppressed errors, rerun with: -v
> ==1170== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 2 from 2)
> 
> Should I do something to free the memory or is it some kind of bug?
> 

The "leak" is actually a side effect of a design flaw returning strings to applications.

A proper fix would involve changing how returned option value memory is managed.

I'm not sure there's sufficient interest to justify a proper fix.

73 de Jeff
Received on Fri May 3 19:11:27 2013
Driven by Jeff Johnson and the RPM project team.
Hosted by OpenPKG and Ralf S. Engelschall.
Powered by FreeBSD and OpenPKG.