diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2009-07-17 14:11:58 +0200 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2009-07-17 14:11:58 +0200 |
commit | 27967b17597a24e76f06871332d7a44eeb790a80 (patch) | |
tree | 4972820dc16ae5379dc75896edc98b5ae48e9e8f /src/Daemon | |
parent | 264b636f2687ebc48743e895ccbf816898c136ed (diff) | |
download | abrt-27967b17597a24e76f06871332d7a44eeb790a80.tar.gz abrt-27967b17597a24e76f06871332d7a44eeb790a80.tar.xz abrt-27967b17597a24e76f06871332d7a44eeb790a80.zip |
prevent leaking buf in some cases
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'src/Daemon')
-rw-r--r-- | src/Daemon/CrashWatcher.cpp | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/src/Daemon/CrashWatcher.cpp b/src/Daemon/CrashWatcher.cpp index 9b677079..e21d57a4 100644 --- a/src/Daemon/CrashWatcher.cpp +++ b/src/Daemon/CrashWatcher.cpp @@ -47,7 +47,8 @@ to_string( T x ) } */ -gboolean CCrashWatcher::handle_event_cb(GIOChannel *gio, GIOCondition condition, gpointer daemon){ +gboolean CCrashWatcher::handle_event_cb(GIOChannel *gio, GIOCondition condition, gpointer daemon) +{ GIOError err; char *buf = new char[INOTIFY_BUFF_SIZE]; gsize len; @@ -56,8 +57,9 @@ gboolean CCrashWatcher::handle_event_cb(GIOChannel *gio, GIOCondition condition, CCrashWatcher *cc = (CCrashWatcher*)daemon; if (err != G_IO_ERROR_NONE) { - cc->Warning("Error reading inotify fd."); - return FALSE; + cc->Warning("Error reading inotify fd."); + delete[] buf; + return FALSE; } /* reconstruct each event and send message to the dbus */ while (i < len) @@ -67,7 +69,7 @@ gboolean CCrashWatcher::handle_event_cb(GIOChannel *gio, GIOCondition condition, event = (struct inotify_event *) &buf[i]; if (event->len) - name = &buf[i] + sizeof (struct inotify_event); + name = &buf[i] + sizeof (struct inotify_event); i += sizeof (struct inotify_event) + event->len; cc->Debug(std::string("Created file: ") + name); @@ -114,9 +116,15 @@ gboolean CCrashWatcher::handle_event_cb(GIOChannel *gio, GIOCondition condition, cc->Warning(e.what()); if (e.type() == EXCEP_FATAL) { + delete[] buf; return -1; } } + catch (...) + { + delete[] buf; + throw; + } } else { |