From: Loïc Blot Date: Mon, 7 Jan 2019 16:05:18 +0000 (+0100) Subject: Fix a crash on Android with Align2Npot2 (#8070) X-Git-Tag: 5.0.0~87 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=95d4ff6d1b62945decc85003a99588bb0539c45b;p=oweals%2Fminetest.git Fix a crash on Android with Align2Npot2 (#8070) * Fix a crash on Android with Align2Npot2 glGetString can be NULL. If stored in a string it triggers a SIGSEGV. Instead do a basic strstr and verify the pointer * Better Align2Npot2 check (+ performance) --- diff --git a/src/client/tile.cpp b/src/client/tile.cpp index 019b6e7fa..a65eb5fc8 100644 --- a/src/client/tile.cpp +++ b/src/client/tile.cpp @@ -1012,13 +1012,14 @@ video::IImage * Align2Npot2(video::IImage * image, core::dimension2d dim = image->getDimension(); - std::string extensions = (char*) glGetString(GL_EXTENSIONS); - // Only GLES2 is trusted to correctly report npot support - if (get_GL_major_version() > 1 && - extensions.find("GL_OES_texture_npot") != std::string::npos) { + // Note: we cache the boolean result. GL context will never change on Android. + static const bool hasNPotSupport = get_GL_major_version() > 1 && + glGetString(GL_EXTENSIONS) && + strstr(glGetString(GL_EXTENSIONS), "GL_OES_texture_npot"); + + if (hasNPotSupport) return image; - } unsigned int height = npot2(dim.Height); unsigned int width = npot2(dim.Width);