Public bug reported:

I'm basically copying and pasting the following paragraphs from
https://bugzilla.redhat.com/show_bug.cgi?format=multiple&id=1018527
where andreas describes the problem in detail and provides a patch.  The
leak currently exists on Ubuntu 14.04 package libxdg-basedir1_1.2.0-1.

Description of problem:

libxdg-basedir has an internal state allocated by xdgInitHandle() and
deallocated by calling xdgWipeHandle(). xdgWipeHandle() calls
xdgFreeData(), which is supposed to free all memory allocated to the
handle.

Unfortunately, it does not free the string cache->runtimeDirectory,
leading to a memory leak of the length of $XDG_RUNTIME_DIR bytes.

This bug seems to have been introduced in upstream commit
648873a319772abf08891f1031e8faaf4b1f2b4c "Added support for Basedir
0.7's XDG_RUNTIME_DIRECTORY." (included in libxdg-basedir 1.2.0):

http://repo.or.cz/w/libxdg-
basedir.git/blobdiff/ea242ddf49d385440f9d0bd42fe2c8e9d5841a91..648873a319772abf08891f1031e8faaf4b1f2b4c:/src/basedir.c

Unfortunately, the upstream project at
http://n.ethz.ch/student/nevillm/download/libxdg-basedir just throws an
HTTP 404 error.

I have attached a simple patch as "basedir.c.patch" that frees
cache->runtimeDirectory() in xdgFreeData() in the same way as it frees
the other internal data structures. I have compiled and tested it, and
it seems to work for me.


Version-Release number of selected component (if applicable):

libxdg-basedir-1.2.0-3.fc19


How reproducible:

Every time. The cleanup function xdgFreeData() does not properly free
cache->runtimeDirectory, which is always allocated in
xdgUpdateHomeDirectories(), called by xdgUpdateData(), in turn called by
xdgInitHandle().


Steps to Reproduce:

1. Compile the test program listed under "additional info" by "gcc -o foo foo.c 
-l xdg-basedir"
2. Run program through valgrind
3. Observe memory leak


Actual results:

xdgFreeData() does not free cache->runtimeDirectory. valgrind catches
this error:

[snip]
==777== 15 bytes in 1 blocks are definitely lost in loss record 11 of 15
==777==    at 0x4C28409: malloc (in 
/usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
==777==    by 0x5BF4429: strdup (in /usr/lib64/libc-2.17.so)
==777==    by 0x504176D: xdgUpdateData (in /usr/lib64/libxdg-basedir.so.1.2.0)
==777==    by 0x50419C4: xdgInitHandle (in /usr/lib64/libxdg-basedir.so.1.2.0)
[snap]


Expected results:

xdgFreeData() should free cache->runtimeDirectory.


Additional info:

Here's a small test program that triggers this bug:

#include <basedir.h>

int main()
{
        xdgHandle xdg_handle;

        xdgInitHandle(&xdg_handle);
        xdgWipeHandle(&xdg_handle);

        return 0;
}

** Affects: libxdg-basedir (Ubuntu)
     Importance: Undecided
         Status: New

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1516828

Title:
  memory leak in libxdg-basedir 1.2.0 (xdgFreeData() does not free
  cache->runtimeDirectory)

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/libxdg-basedir/+bug/1516828/+subscriptions

-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to