4040#include " io/IOException.h"
4141#include < algorithm>
4242#include < array>
43- #include < cassert>
4443#include < cstddef>
4544#include < cstdint>
4645#include < limits>
@@ -163,14 +162,13 @@ evaluateConsecutiveTiles(const iRectangle2D rect, const iRectangle2D nextRect) {
163162void isValidImageGrid (iRectangle2D imgDim,
164163 Array1DRef<const iRectangle2D> rects) {
165164 auto outPos = imgDim.pos ;
165+ invariant (outPos.x == 0 && outPos.y == 0 );
166166
167167 iRectangle2D rect = rects (0 );
168168 if (rect.pos != outPos)
169- ThrowRDE (" FIrst tile is out-of-order" );
170- if (!rect.isThisInside (imgDim))
171- ThrowRDE (" Tile isn't fully within the output image" );
172- if (!rect.hasPositiveArea ())
173- ThrowRDE (" Got empty tile?" );
169+ ThrowRDE (" First tile is out-of-order" );
170+ invariant (rect.isThisInside (imgDim));
171+ invariant (rect.hasPositiveArea ());
174172 outPos.x += rect.getWidth ();
175173 for (int tileIdx = 1 ; tileIdx != rects.size (); ++tileIdx) {
176174 iRectangle2D nextRect = rects (tileIdx);
@@ -182,13 +180,13 @@ void isValidImageGrid(iRectangle2D imgDim,
182180 rect = nextRect;
183181 continue ;
184182 case TileSequenceStatus::BeginsNewRow:
185- assert (outPos.x == imgDim.getRight ());
183+ if (outPos.x != imgDim.getRight ())
184+ ThrowRDE (" Previous row has not been fully filled yet" );
186185 outPos.x = 0 ;
187186 outPos.y += nextRect.getHeight ();
188187 rect = nextRect;
189188 continue ;
190189 case TileSequenceStatus::Invalid:
191- __builtin_unreachable ();
192190 ThrowRDE (" Invalid tiling config" );
193191 }
194192 }
@@ -219,10 +217,15 @@ PanasonicV8Decompressor::DecompressorParamsBuilder::getOutRects(
219217 const uint32_t stripOutputX = stripLineOffsets (stripIdx) & 0xFFFF ;
220218 const uint32_t stripOutputY = stripLineOffsets (stripIdx) >> 16 ;
221219
222- const auto out = iRectangle2D (iPoint2D (stripOutputX, stripOutputY),
223- iPoint2D (stripWidth, stripHeight));
220+ const auto rect = iRectangle2D (iPoint2D (stripOutputX, stripOutputY),
221+ iPoint2D (stripWidth, stripHeight));
222+
223+ if (!rect.isThisInside (imgDim))
224+ ThrowRDE (" Tile isn't fully within the output image" );
225+ if (!rect.hasPositiveArea ())
226+ ThrowRDE (" The tile is empty" );
224227
225- mOutRects .emplace_back (out );
228+ mOutRects .emplace_back (rect );
226229 }
227230
228231 isValidImageGrid (imgDim, getAsArray1DRef (mOutRects ));
0 commit comments