diff --git a/deps/libgit2.mk b/deps/libgit2.mk index 5553848fcfb1f..fef135defe4ec 100644 --- a/deps/libgit2.mk +++ b/deps/libgit2.mk @@ -73,6 +73,10 @@ $(SRCDIR)/srccache/$(LIBGIT2_SRC_DIR)/libgit2-openssl-hang.patch-applied: $(SRCD cd $(SRCDIR)/srccache/$(LIBGIT2_SRC_DIR) && patch -p1 -f < $(SRCDIR)/patches/libgit2-openssl-hang.patch echo 1 > $@ +$(SRCDIR)/srccache/$(LIBGIT2_SRC_DIR)/libgit2-mbedtls-writer-fix.patch-applied: $(SRCDIR)/srccache/$(LIBGIT2_SRC_DIR)/source-extracted + cd $(SRCDIR)/srccache/$(LIBGIT2_SRC_DIR) && patch -p1 -f < $(SRCDIR)/patches/libgit2-mbedtls-writer-fix.patch + echo 1 > $@ + $(build_datarootdir)/julia/cert.pem: $(CERTFILE) mkdir -p $(build_datarootdir)/julia -cp $(CERTFILE) $@ @@ -81,7 +85,8 @@ $(BUILDDIR)/$(LIBGIT2_SRC_DIR)/build-configured: \ $(SRCDIR)/srccache/$(LIBGIT2_SRC_DIR)/libgit2-mbedtls.patch-applied \ $(SRCDIR)/srccache/$(LIBGIT2_SRC_DIR)/libgit2-openssl-hang.patch-applied \ $(SRCDIR)/srccache/$(LIBGIT2_SRC_DIR)/libgit2-ssh.patch-applied \ - $(SRCDIR)/srccache/$(LIBGIT2_SRC_DIR)/libgit2-agent-nonfatal.patch-applied + $(SRCDIR)/srccache/$(LIBGIT2_SRC_DIR)/libgit2-agent-nonfatal.patch-applied \ + $(SRCDIR)/srccache/$(LIBGIT2_SRC_DIR)/libgit2-mbedtls-writer-fix.patch-applied ifneq ($(CERTFILE),) $(BUILDDIR)/$(LIBGIT2_SRC_DIR)/build-configured: $(build_datarootdir)/julia/cert.pem diff --git a/deps/patches/libgit2-mbedtls-writer-fix.patch b/deps/patches/libgit2-mbedtls-writer-fix.patch new file mode 100644 index 0000000000000..d80a637a3996f --- /dev/null +++ b/deps/patches/libgit2-mbedtls-writer-fix.patch @@ -0,0 +1,30 @@ +diff -rup libgit2-211e117a0590583a720c53172406f34186c543bd/src/mbedtls_stream.c libgit2-211e117a0590583a720c53172406f34186c543bd-fix-write/src/mbedtls_stream.c +--- libgit2-211e117a0590583a720c53172406f34186c543bd/src/mbedtls_stream.c 2016-10-24 17:10:21.000000000 -0400 ++++ libgit2-211e117a0590583a720c53172406f34186c543bd-fix-write/src/mbedtls_stream.c 2016-10-24 17:04:26.000000000 -0400 +@@ -368,16 +368,20 @@ static int mbedtls_set_proxy(git_stream + + ssize_t mbedtls_stream_write(git_stream *stream, const char *data, size_t len, int flags) + { ++ size_t read = 0; + mbedtls_stream *st = (mbedtls_stream *) stream; +- int ret; + + GIT_UNUSED(flags); + +- if ((ret = mbedtls_ssl_write(st->ssl, (const unsigned char *)data, len)) <= 0) { +- return ssl_set_error(st->ssl, ret); +- } ++ do { ++ int error = mbedtls_ssl_write(st->ssl, (const unsigned char *)data + read, len - read); ++ if (error <= 0) { ++ return ssl_set_error(st->ssl, error); ++ } ++ read += error; ++ } while (read < len); + +- return ret; ++ return read; + } + + ssize_t mbedtls_stream_read(git_stream *stream, void *data, size_t len) +