From 83205e2e4e5712e529fe8d7d888325490a8c49af Mon Sep 17 00:00:00 2001 From: Christian Semmler Date: Mon, 16 Jun 2025 20:25:34 -0700 Subject: [PATCH] Fix UB in software renderer (#322) * Fix UB in software renderer One cannot access elements of the vector that don't exist. `reserve` allocates memory, but doesn't add elements. `D3DRMVERTEX& dst = m_transformedVerts[i];` is UB and crashes on Windows debug build * Update renderer.cpp --- miniwin/src/d3drm/backends/software/renderer.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/miniwin/src/d3drm/backends/software/renderer.cpp b/miniwin/src/d3drm/backends/software/renderer.cpp index e386d7da..3d8d6e90 100644 --- a/miniwin/src/d3drm/backends/software/renderer.cpp +++ b/miniwin/src/d3drm/backends/software/renderer.cpp @@ -710,10 +710,9 @@ void Direct3DRMSoftwareRenderer::SubmitDraw( // Pre-transform all vertex positions and normals m_transformedVerts.clear(); - m_transformedVerts.reserve(mesh.vertices.size()); - for (size_t i = 0; i < mesh.vertices.size(); ++i) { - const D3DRMVERTEX& src = mesh.vertices[i]; - D3DRMVERTEX& dst = m_transformedVerts[i]; + m_transformedVerts.resize(mesh.vertices.size()); + for (const auto& src : mesh.vertices) { + D3DRMVERTEX& dst = m_transformedVerts.emplace_back(); dst.position = TransformPoint(src.position, modelViewMatrix); dst.normal = src.normal; dst.texCoord = src.texCoord;