Skip to content

Commit

Permalink
Fix crash when opening image in editor
Browse files Browse the repository at this point in the history
Do not access uninitialized raw image data. The raw data is requested
when the demosaic mode is set to None and the cursor is moved over the
image in the editor. It can occur before the raw data is loaded.
  • Loading branch information
Lawrence37 committed Nov 4, 2023
1 parent 0e835e8 commit 831a9bb
Showing 1 changed file with 15 additions and 1 deletion.
16 changes: 15 additions & 1 deletion rtengine/rawimagesource.cc
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
* You should have received a copy of the GNU General Public License
* along with RawTherapee. If not, see <https://www.gnu.org/licenses/>.
*/
#include <cassert>
#include <cmath>
#include <cstdlib>
#include <iostream>
Expand Down Expand Up @@ -743,6 +744,8 @@ void RawImageSource::getWBMults(const ColorTemp &ctemp, const RAWParams &raw, st

void RawImageSource::getImage(const ColorTemp &ctemp, int tran, Imagefloat* image, const PreviewProps &pp, const ToneCurveParams &hrp, const RAWParams &raw)
{
assert(rawData.getHeight() == H && rawData.getWidth() == W);

MyMutex::MyLock lock(getImageMutex);

tran = defTransform(ri, tran);
Expand Down Expand Up @@ -1744,6 +1747,8 @@ void RawImageSource::preprocess(const RAWParams &raw, const LensProfParams &lens

void RawImageSource::demosaic(const RAWParams &raw, bool autoContrast, double &contrastThreshold, bool cache)
{
assert(rawData.getHeight() == H && rawData.getWidth() == W);

MyTime t1, t2;
t1.set();

Expand Down Expand Up @@ -3837,6 +3842,8 @@ void RawImageSource::hlRecovery(const std::string &method, float* red, float* gr

void RawImageSource::getAutoExpHistogram(LUTu & histogram, int& histcompr)
{
assert(rawData.getHeight() == H && rawData.getWidth() == W);

// BENCHFUN
histcompr = 3;

Expand Down Expand Up @@ -7481,6 +7488,8 @@ void RawImageSource::getrgbloc(int begx, int begy, int yEn, int xEn, int cx, int

void RawImageSource::getAutoWBMultipliersitc(bool extra, double & tempref, double & greenref, double & tempitc, double & greenitc, float &temp0, float &delta, int &bia, int &dread, int &kcam, int &nocam, float &studgood, float &minchrom, int &kmin, float &minhist, float &maxhist, int begx, int begy, int yEn, int xEn, int cx, int cy, int bf_h, int bf_w, double & rm, double & gm, double & bm, const WBParams & wbpar, const ColorManagementParams & cmp, const RAWParams & raw, const ToneCurveParams &hrp)
{
assert(rawData.getHeight() == H && rawData.getWidth() == W);

// BENCHFUN
constexpr double clipHigh = 64000.0;

Expand Down Expand Up @@ -7710,6 +7719,8 @@ void RawImageSource::getAutoWBMultipliersitc(bool extra, double & tempref, doubl

void RawImageSource::getAutoWBMultipliers(double &rm, double &gm, double &bm)
{
assert(rawData.getHeight() == H && rawData.getWidth() == W);

// BENCHFUN
constexpr double clipHigh = 64000.0;

Expand Down Expand Up @@ -7926,6 +7937,7 @@ void RawImageSource::getAutoWBMultipliers(double &rm, double &gm, double &bm)

ColorTemp RawImageSource::getSpotWB(std::vector<Coord2D> &red, std::vector<Coord2D> &green, std::vector<Coord2D> &blue, int tran, double equal, StandardObserver observer)
{
assert(rawData.getHeight() == H && rawData.getWidth() == W);

int x;
int y;
Expand Down Expand Up @@ -8265,7 +8277,7 @@ void RawImageSource::init()

void RawImageSource::getRawValues(int x, int y, int rotate, int &R, int &G, int &B)
{
if (d1x) { // Nikon D1x has special sensor. We just skip it
if (rawData.getWidth() != W || rawData.getHeight() != H || d1x) { // Nikon D1x has special sensor. We just skip it
R = G = B = 0;
return;
}
Expand Down Expand Up @@ -8313,6 +8325,8 @@ bool RawImageSource::isGainMapSupported() const

void RawImageSource::applyDngGainMap(const float black[4], const std::vector<GainMap> &gainMaps)
{
assert(rawData.getHeight() == H && rawData.getWidth() == W);

// now we can apply each gain map to raw_data
array2D<float> mvals[2][2];

Expand Down

0 comments on commit 831a9bb

Please sign in to comment.