Skip to content

Commit 90b9db6

Browse files
committed
PanasonicV8Decompressor: take image size, not image rectangle
1 parent a928b8e commit 90b9db6

File tree

4 files changed

+12
-16
lines changed

4 files changed

+12
-16
lines changed

fuzz/librawspeed/decompressors/PanasonicV8Decompressor.cpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -112,10 +112,8 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t* Data, size_t Size) {
112112
auto stripHeights = stripHeightsInput.getVector<uint16_t>(numStripHeights);
113113
stripHeights.reserve(1); // Array1DRef does not like nullptr's.
114114

115-
const auto imgDim = iRectangle2D({0, 0}, mRaw->dim);
116-
117115
PanasonicV8Decompressor::DecompressorParamsBuilder builder(
118-
imgDim, initialPrediction, getAsArray1DRef(strips),
116+
mRaw->dim, initialPrediction, getAsArray1DRef(strips),
119117
getAsArray1DRef(stripLineOffsets), getAsArray1DRef(stripWidths),
120118
getAsArray1DRef(stripHeights), defineCodes);
121119

src/librawspeed/decoders/Rw2Decoder.cpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -250,10 +250,8 @@ RawImage Rw2Decoder::decodeRawV8(const TiffIFD& raw) const {
250250
const std::vector<Array1DRef<const uint8_t>> mStrips =
251251
getInputStrips(mParams, mFile);
252252

253-
const auto imgDim = iRectangle2D({0, 0}, mRaw->dim);
254-
255253
PanasonicV8Decompressor::DecompressorParamsBuilder b(
256-
imgDim, mParams.initialPrediction, getAsArray1DRef(mStrips),
254+
mRaw->dim, mParams.initialPrediction, getAsArray1DRef(mStrips),
257255
getAsArray1DRef(mParams.stripLineOffsets),
258256
getAsArray1DRef(mParams.stripWidths),
259257
getAsArray1DRef(mParams.stripHeights),

src/librawspeed/decompressors/PanasonicV8Decompressor.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -167,10 +167,9 @@ evaluateConsecutiveTiles(const iRectangle2D rect, const iRectangle2D nextRect) {
167167
return Invalid;
168168
}
169169

170-
void isValidImageGrid(iRectangle2D imgDim,
171-
Array1DRef<const iRectangle2D> rects) {
172-
auto outPos = imgDim.pos;
173-
invariant(outPos.x == 0 && outPos.y == 0);
170+
void isValidImageGrid(iPoint2D imgSize, Array1DRef<const iRectangle2D> rects) {
171+
auto outPos = iPoint2D(0, 0);
172+
const auto imgDim = iRectangle2D(outPos, imgSize);
174173

175174
iRectangle2D rect = rects(0);
176175
if (rect.pos != outPos)
@@ -296,10 +295,10 @@ PanasonicV8Decompressor::DecompressorParamsBuilder::getDecoderLUT(
296295

297296
std::vector<iRectangle2D>
298297
PanasonicV8Decompressor::DecompressorParamsBuilder::getOutRects(
299-
iRectangle2D imgDim, Array1DRef<const uint32_t> stripLineOffsets,
298+
iPoint2D imgSize, Array1DRef<const uint32_t> stripLineOffsets,
300299
Array1DRef<const uint16_t> stripWidths,
301300
Array1DRef<const uint16_t> stripHeights) {
302-
if (!imgDim.hasPositiveArea())
301+
if (!imgSize.hasPositiveArea())
303302
ThrowRDE("Empty image requested");
304303
const int totalStrips = stripLineOffsets.size();
305304
if (stripWidths.size() != totalStrips || stripHeights.size() != totalStrips)
@@ -317,6 +316,7 @@ PanasonicV8Decompressor::DecompressorParamsBuilder::getOutRects(
317316

318317
const auto rect = iRectangle2D(iPoint2D(stripOutputX, stripOutputY),
319318
iPoint2D(stripWidth, stripHeight));
319+
const auto imgDim = iRectangle2D({0, 0}, imgSize);
320320

321321
if (!rect.isThisInside(imgDim))
322322
ThrowRDE("Tile isn't fully within the output image");
@@ -326,7 +326,7 @@ PanasonicV8Decompressor::DecompressorParamsBuilder::getOutRects(
326326
mOutRects.emplace_back(rect);
327327
}
328328

329-
isValidImageGrid(imgDim, getAsArray1DRef(mOutRects));
329+
isValidImageGrid(imgSize, getAsArray1DRef(mOutRects));
330330
return mOutRects;
331331
}
332332

src/librawspeed/decompressors/PanasonicV8Decompressor.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -98,20 +98,20 @@ class PanasonicV8Decompressor final : public AbstractDecompressor {
9898
ByteStream bs);
9999

100100
std::vector<iRectangle2D> static getOutRects(
101-
iRectangle2D imgDim, Array1DRef<const uint32_t> stripLineOffsets,
101+
iPoint2D imgSize, Array1DRef<const uint32_t> stripLineOffsets,
102102
Array1DRef<const uint16_t> stripWidths,
103103
Array1DRef<const uint16_t> stripHeights);
104104

105105
// NOLINTNEXTLINE(readability-function-size)
106106
DecompressorParamsBuilder(
107-
iRectangle2D imgDim, Bayer2x2 initialPrediction_,
107+
iPoint2D imgSize, Bayer2x2 initialPrediction_,
108108
Array1DRef<const Array1DRef<const uint8_t>> mStrips_,
109109
Array1DRef<const uint32_t> stripLineOffsets,
110110
Array1DRef<const uint16_t> stripWidths,
111111
Array1DRef<const uint16_t> stripHeights, ByteStream defineCodes)
112112
: mDecoderLUT(getDecoderLUT(defineCodes)), mStrips(mStrips_),
113113
initialPrediction(initialPrediction_),
114-
mOutRects(getOutRects(imgDim, stripLineOffsets, stripWidths,
114+
mOutRects(getOutRects(imgSize, stripLineOffsets, stripWidths,
115115
stripHeights)) {
116116
if (mStrips.size() != implicit_cast<int>(mOutRects.size()))
117117
ThrowRDE("Got different number of input strips vs output tiles");

0 commit comments

Comments
 (0)