diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2010-04-14 20:34:10 +0300 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2010-04-14 20:34:10 +0300 |
commit | 76c508f88d9026915072af5ebb4055dc121154d5 (patch) | |
tree | 42fafbf63a667e3a0226b466704feca141bea5c3 | |
parent | 16ea05b703d50a78dc017ebf0d9355257dc6e8a2 (diff) | |
download | mailutils-76c508f88d9026915072af5ebb4055dc121154d5.tar.gz mailutils-76c508f88d9026915072af5ebb4055dc121154d5.tar.bz2 |
Fix indirect memory leak in mu_decode_filter.
* include/mailutils/stream.h (mu_stream_clr_flags): New function.
* mailbox/stream.c (mu_stream_clr_flags): New function.
* mailbox/mapfile_stream.c (_mapfile_open): Avoid unnecessary
boolean operation.
* mailbox/mutil.c (mu_decode_filter): Use mu_stream_clr_flags
to clear bits.
-rw-r--r-- | include/mailutils/stream.h | 1 | ||||
-rw-r--r-- | mailbox/mapfile_stream.c | 2 | ||||
-rw-r--r-- | mailbox/mutil.c | 5 | ||||
-rw-r--r-- | mailbox/stream.c | 11 |
4 files changed, 13 insertions, 6 deletions
diff --git a/include/mailutils/stream.h b/include/mailutils/stream.h index 59c8b2539..9625dae7e 100644 --- a/include/mailutils/stream.h +++ b/include/mailutils/stream.h @@ -129,6 +129,7 @@ extern void mu_stream_set_owner (mu_stream_t, void* owner); extern int mu_stream_get_flags (mu_stream_t, int *pflags); extern int mu_stream_set_flags (mu_stream_t, int flags); +extern int mu_stream_clr_flags (mu_stream_t, int flags); extern int mu_stream_get_property (mu_stream_t, mu_property_t *); extern int mu_stream_set_property (mu_stream_t, mu_property_t, void *); diff --git a/mailbox/mapfile_stream.c b/mailbox/mapfile_stream.c index 29a6f06ac..e70d701e0 100644 --- a/mailbox/mapfile_stream.c +++ b/mailbox/mapfile_stream.c @@ -335,7 +335,7 @@ _mapfile_open (mu_stream_t stream) else mfs->ptr = NULL; mfs->flags = mflag; - mu_stream_set_flags (stream, flags |MU_STREAM_NO_CHECK); + mu_stream_set_flags (stream, MU_STREAM_NO_CHECK); return 0; } diff --git a/mailbox/mutil.c b/mailbox/mutil.c index 70bce589e..656a31f19 100644 --- a/mailbox/mutil.c +++ b/mailbox/mutil.c @@ -1337,10 +1337,7 @@ mu_decode_filter (mu_stream_t *pfilter, mu_stream_t input, mu_stream_destroy (&cvt, mu_stream_get_owner (cvt)); else { - int flags; - mu_stream_get_flags (cvt, &flags); - flags &= ~MU_STREAM_NO_CLOSE; - mu_stream_set_flags (cvt, flags); + mu_stream_clr_flags (cvt, MU_STREAM_NO_CLOSE); filter = cvt; } } diff --git a/mailbox/stream.c b/mailbox/stream.c index bdb44daff..79a077ae4 100644 --- a/mailbox/stream.c +++ b/mailbox/stream.c @@ -80,7 +80,7 @@ mu_stream_destroy (mu_stream_t *pstream, void *owner) mu_stream_t stream = *pstream; if ((stream->flags & MU_STREAM_NO_CHECK) || stream->owner == owner) { - mu_stream_close(stream); + mu_stream_close (stream); if (stream->rbuffer.base) free (stream->rbuffer.base); @@ -815,6 +815,15 @@ mu_stream_set_flags (mu_stream_t stream, int fl) } int +mu_stream_clr_flags (mu_stream_t stream, int fl) +{ + if (stream == NULL) + return EINVAL; + stream->flags &= ~fl; + return 0; +} + +int mu_stream_set_strerror (mu_stream_t stream, int (*fp) (mu_stream_t, const char **), void *owner) { |