Skip to content

Commit 58fe0dd

Browse files
committed
PanasonicV8Decompressor: more reachable assertion fixes
1 parent 8cafeac commit 58fe0dd

File tree

1 file changed

+14
-11
lines changed

1 file changed

+14
-11
lines changed

src/librawspeed/decompressors/PanasonicV8Decompressor.cpp

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@
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) {
163162
void 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

Comments
 (0)