From af41e9acc1a205b353bb9237c35c4120523cb138 Mon Sep 17 00:00:00 2001 From: Andrei Kortunov Date: Wed, 13 Nov 2019 14:47:29 +0400 Subject: [PATCH 1/9] Initialize variables to avoid undefined values --- apps/openmw/mwmechanics/enchanting.cpp | 1 + components/nifosg/controller.hpp | 2 +- components/terrain/chunkmanager.hpp | 3 --- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/apps/openmw/mwmechanics/enchanting.cpp b/apps/openmw/mwmechanics/enchanting.cpp index e9ae64337b..0545608519 100644 --- a/apps/openmw/mwmechanics/enchanting.cpp +++ b/apps/openmw/mwmechanics/enchanting.cpp @@ -21,6 +21,7 @@ namespace MWMechanics Enchanting::Enchanting() : mCastStyle(ESM::Enchantment::CastOnce) , mSelfEnchanting(false) + , mWeaponType(-1) {} void Enchanting::setOldItem(const MWWorld::Ptr& oldItem) diff --git a/components/nifosg/controller.hpp b/components/nifosg/controller.hpp index d5fb56f0ef..a16bb6b710 100644 --- a/components/nifosg/controller.hpp +++ b/components/nifosg/controller.hpp @@ -301,7 +301,7 @@ namespace NifOsg private: Vec3Interpolator mData; - TargetColor mTargetColor; + TargetColor mTargetColor = Ambient; }; class FlipController : public SceneUtil::StateSetUpdater, public SceneUtil::Controller diff --git a/components/terrain/chunkmanager.hpp b/components/terrain/chunkmanager.hpp index 2dea1cf92e..be83e158cb 100644 --- a/components/terrain/chunkmanager.hpp +++ b/components/terrain/chunkmanager.hpp @@ -36,7 +36,6 @@ namespace Terrain osg::ref_ptr getChunk(float size, const osg::Vec2f& center, unsigned char lod, unsigned int lodFlags); - void setCullingActive(bool active) { mCullingActive = active; } void setCompositeMapSize(unsigned int size) { mCompositeMapSize = size; } void setCompositeMapLevel(float level) { mCompositeMapLevel = level; } void setMaxCompositeGeometrySize(float maxCompGeometrySize) { mMaxCompGeometrySize = maxCompGeometrySize; } @@ -65,8 +64,6 @@ namespace Terrain unsigned int mCompositeMapSize; float mCompositeMapLevel; float mMaxCompGeometrySize; - - bool mCullingActive; }; } From ca2a524a5f0ba297415ce50ee7b82e2933483f16 Mon Sep 17 00:00:00 2001 From: Andrei Kortunov Date: Wed, 13 Nov 2019 14:50:42 +0400 Subject: [PATCH 2/9] Avoid null pointer dereference --- apps/openmw/mwrender/npcanimation.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/openmw/mwrender/npcanimation.cpp b/apps/openmw/mwrender/npcanimation.cpp index cde3b30417..abc2583d58 100644 --- a/apps/openmw/mwrender/npcanimation.cpp +++ b/apps/openmw/mwrender/npcanimation.cpp @@ -539,7 +539,7 @@ std::string NpcAnimation::getShieldMesh(MWWorld::ConstPtr shield) const { const ESM::BodyPart *bodypart = 0; bodypart = partStore.search(bodypartName); - if (bodypart->mData.mType != ESM::BodyPart::MT_Armor) + if (bodypart == nullptr || bodypart->mData.mType != ESM::BodyPart::MT_Armor) return ""; else if (!bodypart->mModel.empty()) mesh = "meshes\\" + bodypart->mModel; From 079c77ff22b76b18305e5ee51903fbed927a0a59 Mon Sep 17 00:00:00 2001 From: Andrei Kortunov Date: Wed, 13 Nov 2019 14:57:22 +0400 Subject: [PATCH 3/9] Avoid zero division --- apps/opencs/view/render/terraintexturemode.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/apps/opencs/view/render/terraintexturemode.cpp b/apps/opencs/view/render/terraintexturemode.cpp index 6d682150a0..40dfc94742 100644 --- a/apps/opencs/view/render/terraintexturemode.cpp +++ b/apps/opencs/view/render/terraintexturemode.cpp @@ -730,8 +730,12 @@ void CSVRender::TerrainTextureMode::setBrushShape(int brushShape) selectionCenterY += value.second; ++selectionAmount; } - selectionCenterX /= selectionAmount; - selectionCenterY /= selectionAmount; + + if (selectionAmount != 0) + { + selectionCenterX /= selectionAmount; + selectionCenterY /= selectionAmount; + } mCustomBrushShape.clear(); for (auto const& value: terrainSelection) From 5c6ca82c4585209a349ddad002a4bd3e5de5b670 Mon Sep 17 00:00:00 2001 From: Andrei Kortunov Date: Wed, 13 Nov 2019 15:02:14 +0400 Subject: [PATCH 4/9] Clamp fallback value from config --- apps/openmw/mwrender/water.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/apps/openmw/mwrender/water.cpp b/apps/openmw/mwrender/water.cpp index 60e43b8502..a1b4308cec 100644 --- a/apps/openmw/mwrender/water.cpp +++ b/apps/openmw/mwrender/water.cpp @@ -528,6 +528,8 @@ void Water::createSimpleWaterStateSet(osg::Node* node, float alpha) // Add animated textures std::vector > textures; int frameCount = Fallback::Map::getInt("Water_SurfaceFrameCount"); + frameCount = std::min(std::max(frameCount, 0), 320); + const std::string& texture = Fallback::Map::getString("Water_SurfaceTexture"); for (int i=0; i &textures) { int frameCount = Fallback::Map::getInt("Water_SurfaceFrameCount"); + frameCount = std::min(std::max(frameCount, 0), 320); + const std::string& texture = Fallback::Map::getString("Water_SurfaceTexture"); for (int i=0; i Date: Wed, 13 Nov 2019 15:07:36 +0400 Subject: [PATCH 5/9] Clamp number of shadow maps, as described in docs --- components/sceneutil/shadow.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/components/sceneutil/shadow.cpp b/components/sceneutil/shadow.cpp index 08581ee5a4..902627023f 100644 --- a/components/sceneutil/shadow.cpp +++ b/components/sceneutil/shadow.cpp @@ -66,6 +66,8 @@ namespace SceneUtil void ShadowManager::disableShadowsForStateSet(osg::ref_ptr stateset) { int numberOfShadowMapsPerLight = Settings::Manager::getInt("number of shadow maps", "Shadows"); + numberOfShadowMapsPerLight = std::max(1, std::min(numberOfShadowMapsPerLight, 8)); + int baseShadowTextureUnit = 8 - numberOfShadowMapsPerLight; osg::ref_ptr fakeShadowMapImage = new osg::Image(); From 238dcdbbd4d8a8cdde6170cad284b78d054d1c40 Mon Sep 17 00:00:00 2001 From: Andrei Kortunov Date: Wed, 13 Nov 2019 15:14:21 +0400 Subject: [PATCH 6/9] Fix copy-paste error --- apps/opencs/view/render/terrainshapemode.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/opencs/view/render/terrainshapemode.cpp b/apps/opencs/view/render/terrainshapemode.cpp index af97e4d8f7..44f359c015 100644 --- a/apps/opencs/view/render/terrainshapemode.cpp +++ b/apps/opencs/view/render/terrainshapemode.cpp @@ -1227,7 +1227,7 @@ void CSVRender::TerrainShapeMode::createNewLandData(const CSMWorld::CellCoordina ++averageDivider; downCellSampleHeight = landDownShapePointer[ESM::Land::LAND_SIZE / 2]; - if(paged->getCellAlteredHeight(cellLeftCoords, ESM::Land::LAND_SIZE / 2, 0)) + if(paged->getCellAlteredHeight(cellDownCoords, ESM::Land::LAND_SIZE / 2, 0)) downCellSampleHeight += *paged->getCellAlteredHeight(cellDownCoords, ESM::Land::LAND_SIZE / 2, 0); } } From 5561eb541550a7ccbd4074235b89651472b9ad9e Mon Sep 17 00:00:00 2001 From: Andrei Kortunov Date: Wed, 13 Nov 2019 15:18:18 +0400 Subject: [PATCH 7/9] Do not discard division reminder --- apps/openmw/mwgui/windowbase.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/openmw/mwgui/windowbase.cpp b/apps/openmw/mwgui/windowbase.cpp index e7c975aa2f..84e557fcdc 100644 --- a/apps/openmw/mwgui/windowbase.cpp +++ b/apps/openmw/mwgui/windowbase.cpp @@ -149,7 +149,7 @@ float BookWindowBase::adjustButton (char const * name) Gui::ImageButton* button; WindowBase::getWidget (button, name); MyGUI::IntSize requested = button->getRequestedSize(); - float scale = requested.height / button->getSize().height; + float scale = float(requested.height) / button->getSize().height; MyGUI::IntSize newSize = requested; newSize.width /= scale; newSize.height /= scale; From 34873b6065729f1240984addee7de5d4a615bdaa Mon Sep 17 00:00:00 2001 From: Andrei Kortunov Date: Wed, 13 Nov 2019 15:29:18 +0400 Subject: [PATCH 8/9] Fix dead code --- apps/esmtool/labels.cpp | 2 +- components/compiler/exprparser.cpp | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/apps/esmtool/labels.cpp b/apps/esmtool/labels.cpp index a82a6ae808..6793e770c7 100644 --- a/apps/esmtool/labels.cpp +++ b/apps/esmtool/labels.cpp @@ -712,7 +712,7 @@ std::string creatureFlags(int flags) if (flags & ESM::Creature::Respawn) properties += "Respawn "; if (flags & ESM::Creature::Weapon) properties += "Weapon "; if (flags & ESM::Creature::Essential) properties += "Essential "; - int unused = (0xFF ^ + int unused = (0xFFFFFFFF ^ (ESM::Creature::Base| ESM::Creature::Walks| ESM::Creature::Swims| diff --git a/components/compiler/exprparser.cpp b/components/compiler/exprparser.cpp index d2d43ceaf7..20873385bd 100644 --- a/components/compiler/exprparser.cpp +++ b/components/compiler/exprparser.cpp @@ -347,8 +347,6 @@ namespace Compiler scanner.putbackName (name, loc); return false; } - - return Parser::parseName (name, loc, scanner); } bool ExprParser::parseKeyword (int keyword, const TokenLoc& loc, Scanner& scanner) From 3970baeb84bba339e9aba3e5c554b855c9f89e83 Mon Sep 17 00:00:00 2001 From: Andrei Kortunov Date: Wed, 13 Nov 2019 15:46:49 +0400 Subject: [PATCH 9/9] Fix possible usage of destroyed variable --- apps/openmw/mwworld/esmstore.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/openmw/mwworld/esmstore.cpp b/apps/openmw/mwworld/esmstore.cpp index 0a7a7eddd5..d366a5a68f 100644 --- a/apps/openmw/mwworld/esmstore.cpp +++ b/apps/openmw/mwworld/esmstore.cpp @@ -49,7 +49,7 @@ void ESMStore::load(ESM::ESMReader &esm, Loading::Listener* listener) std::string fname = mast.name; int index = ~0; for (int i = 0; i < esm.getIndex(); i++) { - const std::string &candidate = allPlugins->at(i).getContext().filename; + const std::string candidate = allPlugins->at(i).getContext().filename; std::string fnamecandidate = boost::filesystem::path(candidate).filename().string(); if (Misc::StringUtils::ciEqual(fname, fnamecandidate)) { index = i;