From 4938ab786e9676cb76906d51fe6cf8f8a707cdb2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Rydg=C3=A5rd?= Date: Fri, 25 Aug 2017 22:49:51 +0200 Subject: [PATCH] Fix possible crash when loading GL shader caches. Should help #9930. --- GPU/GLES/ShaderManagerGLES.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/GPU/GLES/ShaderManagerGLES.cpp b/GPU/GLES/ShaderManagerGLES.cpp index c0edd4608676..7b1e447633f7 100644 --- a/GPU/GLES/ShaderManagerGLES.cpp +++ b/GPU/GLES/ShaderManagerGLES.cpp @@ -1023,7 +1023,11 @@ void ShaderManagerGLES::LoadAndPrecompile(const std::string &filename) { delete vs; return; } - vsCache_.Insert(id, vs); + if (!vsCache_.Get(id)) { + vsCache_.Insert(id, vs); + } else { + WARN_LOG(G3D, "Duplicate vertex shader found in GL shader cache, ignoring"); + } } for (int i = 0; i < header.numFragmentShaders; i++) { ShaderID id; @@ -1031,7 +1035,11 @@ void ShaderManagerGLES::LoadAndPrecompile(const std::string &filename) { ERROR_LOG(G3D, "Truncated shader cache file, aborting."); return; } - fsCache_.Insert(id, CompileFragmentShader(id)); + if (!fsCache_.Get(id)) { + fsCache_.Insert(id, CompileFragmentShader(id)); + } else { + WARN_LOG(G3D, "Duplicate fragment shader found in GL shader cache, ignoring"); + } } for (int i = 0; i < header.numLinkedPrograms; i++) { ShaderID vsid, fsid;