kopia lustrzana https://gitlab.com/sane-project/backends
Merge branch 'genesys-crash-bugs' into 'master'
genesys: Fix several bugs that can potentially crash the backend See merge request sane-project/backends!459merge-requests/463/merge
commit
d7f930252b
|
@ -349,7 +349,8 @@ bool ImagePipelineNodeInvert::get_next_row_data(std::uint8_t* out_data)
|
||||||
}
|
}
|
||||||
case 1: {
|
case 1: {
|
||||||
auto* data = out_data;
|
auto* data = out_data;
|
||||||
for (std::size_t i = 0; i < num_values; ++i) {
|
auto num_bytes = (num_values + 7) / 8;
|
||||||
|
for (std::size_t i = 0; i < num_bytes; ++i) {
|
||||||
*data = ~*data;
|
*data = ~*data;
|
||||||
data++;
|
data++;
|
||||||
}
|
}
|
||||||
|
@ -499,6 +500,12 @@ ImagePipelineNodeComponentShiftLines::ImagePipelineNodeComponentShiftLines(
|
||||||
static_cast<unsigned>(source.get_format()));
|
static_cast<unsigned>(source.get_format()));
|
||||||
}
|
}
|
||||||
extra_height_ = *std::max_element(channel_shifts_.begin(), channel_shifts_.end());
|
extra_height_ = *std::max_element(channel_shifts_.begin(), channel_shifts_.end());
|
||||||
|
height_ = source_.get_height();
|
||||||
|
if (extra_height_ > height_) {
|
||||||
|
height_ = 0;
|
||||||
|
} else {
|
||||||
|
height_ -= extra_height_;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ImagePipelineNodeComponentShiftLines::get_next_row_data(std::uint8_t* out_data)
|
bool ImagePipelineNodeComponentShiftLines::get_next_row_data(std::uint8_t* out_data)
|
||||||
|
@ -547,6 +554,12 @@ ImagePipelineNodePixelShiftLines::ImagePipelineNodePixelShiftLines(
|
||||||
}
|
}
|
||||||
|
|
||||||
extra_height_ = *std::max_element(pixel_shifts_.begin(), pixel_shifts_.end());
|
extra_height_ = *std::max_element(pixel_shifts_.begin(), pixel_shifts_.end());
|
||||||
|
height_ = source_.get_height();
|
||||||
|
if (extra_height_ > height_) {
|
||||||
|
height_ = 0;
|
||||||
|
} else {
|
||||||
|
height_ -= extra_height_;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ImagePipelineNodePixelShiftLines::get_next_row_data(std::uint8_t* out_data)
|
bool ImagePipelineNodePixelShiftLines::get_next_row_data(std::uint8_t* out_data)
|
||||||
|
|
|
@ -393,7 +393,7 @@ public:
|
||||||
unsigned shift_r, unsigned shift_g, unsigned shift_b);
|
unsigned shift_r, unsigned shift_g, unsigned shift_b);
|
||||||
|
|
||||||
std::size_t get_width() const override { return source_.get_width(); }
|
std::size_t get_width() const override { return source_.get_width(); }
|
||||||
std::size_t get_height() const override { return source_.get_height() - extra_height_; }
|
std::size_t get_height() const override { return height_; }
|
||||||
PixelFormat get_format() const override { return source_.get_format(); }
|
PixelFormat get_format() const override { return source_.get_format(); }
|
||||||
|
|
||||||
bool eof() const override { return source_.eof(); }
|
bool eof() const override { return source_.eof(); }
|
||||||
|
@ -403,6 +403,7 @@ public:
|
||||||
private:
|
private:
|
||||||
ImagePipelineNode& source_;
|
ImagePipelineNode& source_;
|
||||||
std::size_t extra_height_ = 0;
|
std::size_t extra_height_ = 0;
|
||||||
|
std::size_t height_ = 0;
|
||||||
|
|
||||||
std::array<unsigned, 3> channel_shifts_;
|
std::array<unsigned, 3> channel_shifts_;
|
||||||
|
|
||||||
|
@ -419,7 +420,7 @@ public:
|
||||||
const std::vector<std::size_t>& shifts);
|
const std::vector<std::size_t>& shifts);
|
||||||
|
|
||||||
std::size_t get_width() const override { return source_.get_width(); }
|
std::size_t get_width() const override { return source_.get_width(); }
|
||||||
std::size_t get_height() const override { return source_.get_height() - extra_height_; }
|
std::size_t get_height() const override { return height_; }
|
||||||
PixelFormat get_format() const override { return source_.get_format(); }
|
PixelFormat get_format() const override { return source_.get_format(); }
|
||||||
|
|
||||||
bool eof() const override { return source_.eof(); }
|
bool eof() const override { return source_.eof(); }
|
||||||
|
@ -429,6 +430,7 @@ public:
|
||||||
private:
|
private:
|
||||||
ImagePipelineNode& source_;
|
ImagePipelineNode& source_;
|
||||||
std::size_t extra_height_ = 0;
|
std::size_t extra_height_ = 0;
|
||||||
|
std::size_t height_ = 0;
|
||||||
|
|
||||||
std::vector<std::size_t> pixel_shifts_;
|
std::vector<std::size_t> pixel_shifts_;
|
||||||
|
|
||||||
|
|
|
@ -146,7 +146,7 @@ struct SetupParams {
|
||||||
|
|
||||||
ColorFilter color_filter = static_cast<ColorFilter>(NOT_SET);
|
ColorFilter color_filter = static_cast<ColorFilter>(NOT_SET);
|
||||||
|
|
||||||
ScanFlag flags;
|
ScanFlag flags = ScanFlag::NONE;
|
||||||
|
|
||||||
unsigned get_requested_pixels() const
|
unsigned get_requested_pixels() const
|
||||||
{
|
{
|
||||||
|
|
Ładowanie…
Reference in New Issue