From b68bbaf617974d669d3cd13c69efcfdbdf4bd1fb Mon Sep 17 00:00:00 2001
From: Magnus Norddahl <dpjudas@users.noreply.github.com>
Date: Fri, 26 Aug 2016 01:40:28 +0200
Subject: [PATCH] Fix uninitialized memory access if a FShaderProgram is
 destroyed without being fully compiled and linked

---
 src/gl/shaders/gl_shaderprogram.cpp | 6 ++++++
 src/gl/shaders/gl_shaderprogram.h   | 4 ++++
 2 files changed, 10 insertions(+)

diff --git a/src/gl/shaders/gl_shaderprogram.cpp b/src/gl/shaders/gl_shaderprogram.cpp
index 63ce09261..959315a9d 100644
--- a/src/gl/shaders/gl_shaderprogram.cpp
+++ b/src/gl/shaders/gl_shaderprogram.cpp
@@ -52,6 +52,12 @@
 #include "i_system.h"
 #include "doomerrors.h"
 
+FShaderProgram::FShaderProgram()
+{
+	for (int i = 0; i < NumShaderTypes; i++)
+		mShaders[i] = 0;
+}
+
 //==========================================================================
 //
 // Free shader program resources
diff --git a/src/gl/shaders/gl_shaderprogram.h b/src/gl/shaders/gl_shaderprogram.h
index 16684ddff..64a36db49 100644
--- a/src/gl/shaders/gl_shaderprogram.h
+++ b/src/gl/shaders/gl_shaderprogram.h
@@ -6,6 +6,7 @@
 class FShaderProgram
 {
 public:
+	FShaderProgram();
 	~FShaderProgram();
 
 	enum ShaderType
@@ -30,6 +31,9 @@ public:
 	static void PatchFragShader(FString &code);
 
 private:
+	FShaderProgram(const FShaderProgram &) = delete;
+	FShaderProgram &operator=(const FShaderProgram &) = delete;
+
 	static FString PatchShader(ShaderType type, const FString &code, const char *defines, int maxGlslVersion);
 	static void PatchCommon(FString &code);