mirror of
				https://github.com/TES3MP/openmw-tes3mp.git
				synced 2025-11-04 00:26:45 +00:00 
			
		
		
		
	Merge pull request #2098 from xyzz/fix-loading-screen-uaf
loadingscreen: Fix UaF in loading screen.
This commit is contained in:
		
						commit
						d80d056140
					
				
					 1 changed files with 7 additions and 4 deletions
				
			
		| 
						 | 
				
			
			@ -133,22 +133,23 @@ namespace MWGui
 | 
			
		|||
    public:
 | 
			
		||||
        CopyFramebufferToTextureCallback(osg::Texture2D* texture)
 | 
			
		||||
            : mTexture(texture)
 | 
			
		||||
            , oneshot(true)
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        virtual void operator () (osg::RenderInfo& renderInfo) const
 | 
			
		||||
        {
 | 
			
		||||
            if (!oneshot)
 | 
			
		||||
                return;
 | 
			
		||||
            oneshot = false;
 | 
			
		||||
            int w = renderInfo.getCurrentCamera()->getViewport()->width();
 | 
			
		||||
            int h = renderInfo.getCurrentCamera()->getViewport()->height();
 | 
			
		||||
            mTexture->copyTexImage2D(*renderInfo.getState(), 0, 0, w, h);
 | 
			
		||||
 | 
			
		||||
            // Callback removes itself when done
 | 
			
		||||
            if (renderInfo.getCurrentCamera())
 | 
			
		||||
                renderInfo.getCurrentCamera()->setInitialDrawCallback(nullptr);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    private:
 | 
			
		||||
        osg::ref_ptr<osg::Texture2D> mTexture;
 | 
			
		||||
        mutable bool oneshot;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    class DontComputeBoundCallback : public osg::Node::ComputeBoundingSphereCallback
 | 
			
		||||
| 
						 | 
				
			
			@ -308,6 +309,8 @@ namespace MWGui
 | 
			
		|||
            mGuiTexture.reset(new osgMyGUI::OSGTexture(mTexture));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Notice that the next time this is called, the current CopyFramebufferToTextureCallback will be deleted
 | 
			
		||||
        // so there's no memory leak as at most one object of type CopyFramebufferToTextureCallback is allocated at a time.
 | 
			
		||||
        mViewer->getCamera()->setInitialDrawCallback(new CopyFramebufferToTextureCallback(mTexture));
 | 
			
		||||
 | 
			
		||||
        mBackgroundImage->setBackgroundImage("");
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue