From ee7c8c3f37698651ae57e2aea979b3dba1c8b39a Mon Sep 17 00:00:00 2001 From: Lei Zhang Date: Fri, 6 Jul 2018 21:11:39 +0000 Subject: Fix regression in CJBig2_TRDProc. Commit 7695dd0f mistakenly changed a signed integer to unsigned. This is incorrect because right shifts for negative integers behave differently. BUG=chromium:859284 Change-Id: Id9c54848b15ace1de080c174f261dd2c064018e0 Reviewed-on: https://pdfium-review.googlesource.com/37230 Reviewed-by: Henrique Nakashima Commit-Queue: Lei Zhang --- core/fxcodec/jbig2/JBig2_TrdProc.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'core/fxcodec') diff --git a/core/fxcodec/jbig2/JBig2_TrdProc.cpp b/core/fxcodec/jbig2/JBig2_TrdProc.cpp index 4790f6657c..79b2142a9f 100644 --- a/core/fxcodec/jbig2/JBig2_TrdProc.cpp +++ b/core/fxcodec/jbig2/JBig2_TrdProc.cpp @@ -27,11 +27,11 @@ Optional CheckTRDDimension(uint32_t dimension, int32_t delta) { return {result.ValueOrDie()}; } -Optional CheckTRDReferenceDimension(uint32_t dimension, - uint32_t divisor, +Optional CheckTRDReferenceDimension(int32_t dimension, + uint32_t shift, int32_t offset) { FX_SAFE_INT32 result = offset; - result += dimension / divisor; + result += dimension >> shift; if (!result.IsValid()) return {}; return {result.ValueOrDie()}; @@ -162,9 +162,9 @@ std::unique_ptr CJBig2_TRDProc::DecodeHuffman( return nullptr; Optional GRREFERENCEDX = - CheckTRDReferenceDimension(RDWI, 4, RDXI); + CheckTRDReferenceDimension(RDWI, 2, RDXI); Optional GRREFERENCEDY = - CheckTRDReferenceDimension(RDHI, 4, RDYI); + CheckTRDReferenceDimension(RDHI, 2, RDYI); if (!GRREFERENCEDX || !GRREFERENCEDY) return nullptr; @@ -342,9 +342,9 @@ std::unique_ptr CJBig2_TRDProc::DecodeArith( return nullptr; Optional GRREFERENCEDX = - CheckTRDReferenceDimension(RDWI, 2, RDXI); + CheckTRDReferenceDimension(RDWI, 1, RDXI); Optional GRREFERENCEDY = - CheckTRDReferenceDimension(RDHI, 2, RDYI); + CheckTRDReferenceDimension(RDHI, 1, RDYI); if (!GRREFERENCEDX || !GRREFERENCEDY) return nullptr; -- cgit v1.2.3