From e1d8f468b9da830f8fc25c9190adf2183bf53330 Mon Sep 17 00:00:00 2001 From: James Le Cuirot Date: Mon, 10 Feb 2014 13:47:49 +0000 Subject: [PATCH 1/2] Revert "Revert "Revert "fix memory leaks in bz_reader_read""" ;) This reverts commit e58f154624ff2d770e92a70e0d8fb1a9e6564720 because the "fix" is causing double frees when piped through ruby-gpgme. See issue #12. --- ext/bzip2/reader.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/ext/bzip2/reader.c b/ext/bzip2/reader.c index c535799..1eedacc 100644 --- a/ext/bzip2/reader.c +++ b/ext/bzip2/reader.c @@ -316,7 +316,6 @@ VALUE bz_reader_read(int argc, VALUE *argv, VALUE obj) { OBJ_TAINT(res); } if (n == 0) { - free(bzf->buf); return res; } while (1) { @@ -326,14 +325,12 @@ VALUE bz_reader_read(int argc, VALUE *argv, VALUE obj) { res = rb_str_cat(res, bzf->bzs.next_out, n); bzf->bzs.next_out += n; bzf->bzs.avail_out -= n; - free(bzf->buf); return res; } if (total) { res = rb_str_cat(res, bzf->bzs.next_out, total); } if (bz_next_available(bzf, 0) == BZ_STREAM_END) { - free(bzf->buf); return res; } } From 92d492c2b40c32a5c039314666655ebc2f52a817 Mon Sep 17 00:00:00 2001 From: James Le Cuirot Date: Mon, 10 Feb 2014 14:04:22 +0000 Subject: [PATCH 2/2] This code breaks Ruby 2.1 as well as Rubinius The Rubinius maintainer says this code isn't even needed anyway so... --- ext/bzip2/writer.c | 5 ----- 1 file changed, 5 deletions(-) diff --git a/ext/bzip2/writer.c b/ext/bzip2/writer.c index 6c999ea..85bd543 100644 --- a/ext/bzip2/writer.c +++ b/ext/bzip2/writer.c @@ -161,11 +161,6 @@ VALUE bz_writer_close(VALUE obj) { Get_BZ2(obj, bzf); res = bz_writer_internal_close(bzf); -#ifndef RUBINIUS - if (!NIL_P(res) && (bzf->flags & BZ2_RB_INTERNAL)) { - RBASIC(res)->klass = rb_cString; - } -#endif return res; }