fix: MC - proper vert_idx init + validate triTable entries to prevent SEGFAULT on incomplete table
CI / Build & Test (push) Failing after 25s
CI / Release Build (push) Failing after 25s

This commit is contained in:
茂之钳
2026-07-24 10:52:10 +00:00
parent 251346bfce
commit 38fd699f90
+7 -4
View File
@@ -131,7 +131,8 @@ MCMesh marching_cubes(const std::function<double(double,double,double)>& f,
if (edge_mask == 0) continue;
// Compute interpolated vertices for intersected edges
int vert_idx[12] = {-1};
int vert_idx[12];
for (int& v : vert_idx) v = -1;
for (int e = 0; e < 12; ++e) {
if (!(edge_mask & (1 << e))) continue;
int v0 = kEdgeCorners[e][0], v1 = kEdgeCorners[e][1];
@@ -148,10 +149,12 @@ MCMesh marching_cubes(const std::function<double(double,double,double)>& f,
}
}
// Triangulate from standard table
// Triangulate from standard table (validate entries: 0..11)
const int* tris = kTriTable[cube_idx];
for (int t = 0; tris[t] != -1; t += 3) {
if (tris[t+2] == -1) break;
for (int t = 0; t < 15 && tris[t] != -1; t += 3) {
if (tris[t] < 0 || tris[t] > 11 || tris[t+1] < 0 || tris[t+1] > 11
|| tris[t+2] < 0 || tris[t+2] > 11) break;
if (vert_idx[tris[t]] < 0 || vert_idx[tris[t+1]] < 0 || vert_idx[tris[t+2]] < 0) break;
result.triangles.push_back({
vert_idx[tris[t]], vert_idx[tris[t+1]], vert_idx[tris[t+2]]
});