From 5519352661a948f91232b52ec2146c398020dbbe Mon Sep 17 00:00:00 2001 From: Eugene Kliuchnikov Date: Thu, 2 Jul 2020 17:57:40 +0200 Subject: [PATCH] Add workaround for lying feof. (#814) Should fix #812 --- c/tools/brotli.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/c/tools/brotli.c b/c/tools/brotli.c index 04606a8..3db34f2 100644 --- a/c/tools/brotli.c +++ b/c/tools/brotli.c @@ -803,6 +803,8 @@ static void InitializeBuffers(Context* context) { context->total_out = 0; } +/* This method might give the false-negative result. + However, after an empty / incomplete read it should tell the truth. */ static BROTLI_BOOL HasMoreInput(Context* context) { return feof(context->fin) ? BROTLI_FALSE : BROTLI_TRUE; } @@ -883,7 +885,9 @@ static BROTLI_BOOL DecompressFile(Context* context, BrotliDecoderState* s) { if (!ProvideOutput(context)) return BROTLI_FALSE; } else if (result == BROTLI_DECODER_RESULT_SUCCESS) { if (!FlushOutput(context)) return BROTLI_FALSE; - if (context->available_in != 0 || HasMoreInput(context)) { + int has_more_input = + (context->available_in != 0) || (fgetc(context->fin) != EOF); + if (has_more_input) { fprintf(stderr, "corrupt input [%s]\n", PrintablePath(context->current_input_path)); return BROTLI_FALSE;