HADOOP-17096. Fix ZStandardCompressor input buffer offset (#2104). Contributed by Stephen Jung (Stripe).
(cherry picked from commit 45434c93e8
)
This commit is contained in:
parent
9a3f2bb545
commit
0712505b59
@ -159,7 +159,7 @@ public boolean needsInput() {
|
||||
}
|
||||
|
||||
// have we consumed all input
|
||||
if (keepUncompressedBuf && uncompressedDirectBufLen > 0) {
|
||||
if (keepUncompressedBuf && uncompressedDirectBufLen - uncompressedDirectBufOff > 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -223,7 +223,7 @@ public int compress(byte[] b, int off, int len) throws IOException {
|
||||
compressedDirectBuf.limit(n);
|
||||
|
||||
// Check if we have consumed all input buffer
|
||||
if (uncompressedDirectBufLen <= 0) {
|
||||
if (uncompressedDirectBufLen - uncompressedDirectBufOff <= 0) {
|
||||
// consumed all input buffer
|
||||
keepUncompressedBuf = false;
|
||||
uncompressedDirectBuf.clear();
|
||||
|
@ -219,13 +219,13 @@ JNIEXPORT jint Java_org_apache_hadoop_io_compress_zstd_ZStandardCompressor_defla
|
||||
return (jint) 0;
|
||||
}
|
||||
|
||||
bytes_read += input.pos;
|
||||
bytes_read += input.pos - uncompressed_direct_buf_off;
|
||||
bytes_written += output.pos;
|
||||
(*env)->SetLongField(env, this, ZStandardCompressor_bytesRead, bytes_read);
|
||||
(*env)->SetLongField(env, this, ZStandardCompressor_bytesWritten, bytes_written);
|
||||
|
||||
(*env)->SetIntField(env, this, ZStandardCompressor_uncompressedDirectBufOff, input.pos);
|
||||
(*env)->SetIntField(env, this, ZStandardCompressor_uncompressedDirectBufLen, input.size - input.pos);
|
||||
(*env)->SetIntField(env, this, ZStandardCompressor_uncompressedDirectBufLen, input.size);
|
||||
return (jint) output.pos;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user