Merge master code and fix conflict

Signed-off-by: xiaolong.ran <ranxiaolong716@gmail.com>
diff --git a/Dockerfile b/Dockerfile
index dcf6010..ae4b56b 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -25,10 +25,12 @@
 
 RUN wget --no-cookies --no-check-certificate \
     --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"
+
 # make a new directory to store the jdk files
 RUN mkdir -p /usr/local/java
 RUN tar zxvf jdk-8u141-linux-x64.tar.gz
 RUN mv jdk1.8.0_141 /usr/local/java/
+
 # make a symbol link
 RUN ln -s /usr/local/java/jdk1.8.0_141 /usr/local/java/jdk
 
@@ -43,7 +45,6 @@
 COPY --from=pulsar /pulsar /pulsar
 
 ### Add test scripts
-
 COPY integration-tests/certs /pulsar/certs
 COPY integration-tests/tokens /pulsar/tokens
 COPY integration-tests/standalone.conf /pulsar/conf
diff --git a/pkg/compression/zlib.go b/pkg/compression/zlib.go
index 4c3fba8..d5c575f 100644
--- a/pkg/compression/zlib.go
+++ b/pkg/compression/zlib.go
@@ -20,6 +20,7 @@
 import (
 	"bytes"
 	"compress/zlib"
+	"io"
 )
 
 type zlibProvider struct{}
@@ -36,21 +37,31 @@
 func (zlibProvider) Compress(data []byte) []byte {
 	var b bytes.Buffer
 	w := zlib.NewWriter(&b)
-	w.Write(data)
-	w.Close()
+
+	if _, err := w.Write(data); err != nil {
+		return nil
+	}
+	if err := w.Close(); err != nil {
+		return nil
+	}
 
 	return b.Bytes()
 }
 
 func (zlibProvider) Decompress(compressedData []byte, originalSize int) ([]byte, error) {
-	r, err := zlib.NewReader(bytes.NewBuffer(compressedData))
+	r, err := zlib.NewReader(bytes.NewReader(compressedData))
 	if err != nil {
 		return nil, err
 	}
 
 	uncompressed := make([]byte, originalSize)
-	r.Read(uncompressed)
-	r.Close()
+	if _, err = io.ReadFull(r, uncompressed); err != nil {
+		return nil, err
+	}
+
+	if err = r.Close(); err != nil {
+		return nil, err
+	}
 
 	return uncompressed, nil
 }