diff options
| author | Oz Linden <oz@lindenlab.com> | 2011-01-24 11:44:43 -0500 |
|---|---|---|
| committer | Oz Linden <oz@lindenlab.com> | 2011-01-24 11:44:43 -0500 |
| commit | f57aa3e83f1b4286b1d6b5cc8bca20fb924cb002 (patch) | |
| tree | 12dae11397876ce10d75eeabe5b1656ea18cd6ac /indra/llimage/llimagedimensionsinfo.cpp | |
| parent | b429ff8ec3e1aebc60ff7f4d3376cfc8b9f2e669 (diff) | |
| parent | f9b9c7a5816cf0b9627a4a50e73a663667937145 (diff) | |
merge changes for i18n fixes
Diffstat (limited to 'indra/llimage/llimagedimensionsinfo.cpp')
| -rw-r--r-- | indra/llimage/llimagedimensionsinfo.cpp | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/indra/llimage/llimagedimensionsinfo.cpp b/indra/llimage/llimagedimensionsinfo.cpp index 5ea4a236b5..835664c60f 100644 --- a/indra/llimage/llimagedimensionsinfo.cpp +++ b/indra/llimage/llimagedimensionsinfo.cpp @@ -30,6 +30,9 @@ #include "llimagedimensionsinfo.h" +// Value is true if one of Libjpeg's functions has encountered an error while working. +static bool sJpegErrorEncountered = false; + bool LLImageDimensionsInfo::load(const std::string& src_filename,U32 codec) { clean(); @@ -101,9 +104,17 @@ bool LLImageDimensionsInfo::getImageDimensionsPng() return true; } +// Called instead of exit() if Libjpeg encounters an error. +void on_jpeg_error(j_common_ptr cinfo) +{ + (void) cinfo; + sJpegErrorEncountered = true; + llwarns << "Libjpeg has encountered an error!" << llendl; +} bool LLImageDimensionsInfo::getImageDimensionsJpeg() { + sJpegErrorEncountered = false; clean(); FILE *fp = fopen (mSrcFilename.c_str(), "rb"); if (fp == NULL) @@ -115,6 +126,9 @@ bool LLImageDimensionsInfo::getImageDimensionsJpeg() jpeg_error_mgr jerr; jpeg_decompress_struct cinfo; cinfo.err = jpeg_std_error(&jerr); + // Call our function instead of exit() if Libjpeg encounters an error. + // This is done to avoid crash in this case (STORM-472). + cinfo.err->error_exit = on_jpeg_error; jpeg_create_decompress (&cinfo); jpeg_stdio_src (&cinfo, fp); @@ -128,6 +142,6 @@ bool LLImageDimensionsInfo::getImageDimensionsJpeg() jpeg_destroy_decompress(&cinfo); fclose(fp); - return true; + return !sJpegErrorEncountered; } |
