From 3e95a8b89fd6f69f26c010b98689acd1191a9217 Mon Sep 17 00:00:00 2001 From: Nimetu Date: Tue, 10 Jan 2017 14:07:11 +0200 Subject: [PATCH] Fixed: Client crash on bad PNG file from webig download. --HG-- branch : develop --- code/nel/src/gui/group_html.cpp | 50 ++++++++++++++++++++++++++------- 1 file changed, 40 insertions(+), 10 deletions(-) diff --git a/code/nel/src/gui/group_html.cpp b/code/nel/src/gui/group_html.cpp index 9bf7b23e0..247e33f41 100644 --- a/code/nel/src/gui/group_html.cpp +++ b/code/nel/src/gui/group_html.cpp @@ -588,11 +588,25 @@ namespace NLGUI // second instance deletes first tmpfile and creates new file for itself. if (CFile::getFileSize(tmpfile) > 0) { - CFile::moveFile(it->dest, tmpfile); - for(uint i = 0; i < it->imgs.size(); i++) + try { - setImage(it->imgs[i].Image, it->dest); - setImageSize(it->imgs[i].Image, it->imgs[i].Style); + // verify that image is not corrupted + uint32 w, h; + CBitmap::loadSize(tmpfile, w, h); + if (w != 0 && h != 0) + { + CFile::moveFile(it->dest, tmpfile); + for(uint i = 0; i < it->imgs.size(); i++) + { + setImage(it->imgs[i].Image, it->dest); + setImageSize(it->imgs[i].Image, it->imgs[i].Style); + } + } + } + catch(const NLMISC::Exception &e) + { + // exception message has .tmp file name, so keep it for further analysis + nlwarning("Invalid image (%s): %s", it->url.c_str(), e.what()); } } } @@ -4177,10 +4191,18 @@ namespace NLGUI if (!reloadImg && lookupLocalFile (finalUrl, image.c_str(), false)) { // don't display image that are not power of 2 - uint32 w, h; - CBitmap::loadSize (image, w, h); - if (w == 0 || h == 0 || ((!NLMISC::isPowerOf2(w) || !NLMISC::isPowerOf2(h)) && !NL3D::CTextureFile::supportNonPowerOfTwoTextures())) + try + { + uint32 w, h; + CBitmap::loadSize (image, w, h); + if (w == 0 || h == 0 || ((!NLMISC::isPowerOf2(w) || !NLMISC::isPowerOf2(h)) && !NL3D::CTextureFile::supportNonPowerOfTwoTextures())) + image = "web_del.tga"; + } + catch(const NLMISC::Exception &e) + { + nlwarning(e.what()); image = "web_del.tga"; + } } else { @@ -4376,10 +4398,18 @@ namespace NLGUI } else { - uint32 w, h; - CBitmap::loadSize(normal, w, h); - if (w == 0 || h == 0) + try + { + uint32 w, h; + CBitmap::loadSize(normal, w, h); + if (w == 0 || h == 0) + normal = "web_del.tga"; + } + catch(const NLMISC::Exception &e) + { + nlwarning(e.what()); normal = "web_del.tga"; + } } } }