From: Junio C Hamano <gitster@pobox.com>
To: git@vger.kernel.org
Subject: [PATCH 3/6] zlib: wrap inflateInit2 used to accept only for gzip format
Date: Fri, 10 Jun 2011 13:15:45 -0700 [thread overview]
Message-ID: <1307736948-16956-4-git-send-email-gitster@pobox.com> (raw)
In-Reply-To: <1307736948-16956-1-git-send-email-gitster@pobox.com>
http-backend.c uses inflateInit2() to tell the library that it wants to
accept only gzip format. Wrap it in a helper function so that readers do
not have to wonder what the magic numbers 15 and 16 are for.
Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
cache.h | 1 +
http-backend.c | 5 +----
zlib.c | 15 +++++++++++++++
3 files changed, 17 insertions(+), 4 deletions(-)
diff --git a/cache.h b/cache.h
index ce73e1f..50f09d0 100644
--- a/cache.h
+++ b/cache.h
@@ -21,6 +21,7 @@
#endif
void git_inflate_init(z_streamp strm);
+void git_inflate_init_gzip_only(z_streamp strm);
void git_inflate_end(z_streamp strm);
int git_inflate(z_streamp strm, int flush);
diff --git a/http-backend.c b/http-backend.c
index c74cb03..ab5015d 100644
--- a/http-backend.c
+++ b/http-backend.c
@@ -275,12 +275,9 @@ static void inflate_request(const char *prog_name, int out)
unsigned char in_buf[8192];
unsigned char out_buf[8192];
unsigned long cnt = 0;
- int ret;
memset(&stream, 0, sizeof(stream));
- ret = inflateInit2(&stream, (15 + 16));
- if (ret != Z_OK)
- die("cannot start zlib inflater, zlib err %d", ret);
+ git_inflate_init_gzip_only(&stream);
while (1) {
ssize_t n = xread(0, in_buf, sizeof(in_buf));
diff --git a/zlib.c b/zlib.c
index be9d7e9..b613cbd 100644
--- a/zlib.c
+++ b/zlib.c
@@ -32,6 +32,21 @@ void git_inflate_init(z_streamp strm)
strm->msg ? strm->msg : "no message");
}
+void git_inflate_init_gzip_only(z_streamp strm)
+{
+ /*
+ * Use default 15 bits, +16 is to accept only gzip and to
+ * yield Z_DATA_ERROR when fed zlib format.
+ */
+ const int windowBits = 15 + 16;
+ int status = inflateInit2(strm, windowBits);
+
+ if (status == Z_OK)
+ return;
+ die("inflateInit2: %s (%s)", zerr_to_string(status),
+ strm->msg ? strm->msg : "no message");
+}
+
void git_inflate_end(z_streamp strm)
{
int status = inflateEnd(strm);
--
1.7.6.rc1.118.ge175b4a
next prev parent reply other threads:[~2011-06-10 20:16 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-06-10 20:15 [PATCH 0/6] zlib only processes 4GB at a time Junio C Hamano
2011-06-10 20:15 ` [PATCH 1/6] zlib: refactor error message formatter Junio C Hamano
2011-06-10 20:15 ` [PATCH 2/6] zlib: wrap remaining calls to direct inflate/inflateEnd Junio C Hamano
2011-06-10 20:15 ` Junio C Hamano [this message]
2011-06-10 20:15 ` [PATCH 4/6] zlib: wrap deflate side of the API Junio C Hamano
2011-06-10 22:23 ` Thiago Farina
2011-06-10 23:00 ` Junio C Hamano
2011-06-10 20:15 ` [PATCH 5/6] zlib: wrap deflateBound() too Junio C Hamano
2011-06-10 20:15 ` [PATCH 6/6] zlib: zlib can only process 4GB at a time Junio C Hamano
2011-06-12 20:43 ` Erik Faye-Lund
2011-06-12 21:33 ` Junio C Hamano
2011-06-12 21:46 ` Matthieu Moy
2011-06-13 11:17 ` Erik Faye-Lund
2011-06-13 11:52 ` Jonathan Nieder
2011-06-13 11:56 ` Junio C Hamano
2011-06-10 23:47 ` [PATCH 7/6] zlib: allow feeding more than 4GB in one go Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1307736948-16956-4-git-send-email-gitster@pobox.com \
--to=gitster@pobox.com \
--cc=git@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.