mirror of https://github.com/CGAL/cgal
Cherry-pick pull request #2409 from SKURInc/master
avoid index out of range with large bitmap sizes With large u and v, the product u * v exceeds the capacity of an int. The result when coerced to size_t can be an out of range index into bitmap. Avoid this by casting u and v to size_t before multiplying.
This commit is contained in:
parent
1d03f05d71
commit
8690601d56
|
|
@ -166,7 +166,7 @@ namespace CGAL {
|
|||
u = (u < 0) ? 0 : (((std::size_t)u >= u_extent) ? (int)u_extent - 1 : u);
|
||||
v = (v < 0) ? 0 : (((std::size_t)v >= v_extent) ? (int)v_extent - 1 : v);
|
||||
|
||||
bitmap[v * int(u_extent) + u] = true;
|
||||
bitmap[size_t(v) * u_extent + size_t(u)] = true;
|
||||
}
|
||||
|
||||
// Iterate through the bitmap
|
||||
|
|
@ -249,7 +249,7 @@ namespace CGAL {
|
|||
u = (u < 0) ? 0 : (((std::size_t)u >= u_extent) ? (int)u_extent - 1 : u);
|
||||
v = (v < 0) ? 0 : (((std::size_t)v >= v_extent) ? (int)v_extent - 1 : v);
|
||||
|
||||
count[bitmap[v * int(u_extent) + u]]++;
|
||||
count[bitmap[size_t(v) * u_extent + size_t(u)]]++;
|
||||
}
|
||||
|
||||
// Find largest component. Start at index 2 as 0/1 are reserved for
|
||||
|
|
@ -269,7 +269,7 @@ namespace CGAL {
|
|||
u = (u < 0) ? 0 : (((std::size_t)u >= u_extent) ? (int)u_extent - 1 : u);
|
||||
v = (v < 0) ? 0 : (((std::size_t)v >= v_extent) ? (int)v_extent - 1 : v);
|
||||
|
||||
if (bitmap[v * int(u_extent) + u] == largest)
|
||||
if (bitmap[size_t(v) * u_extent + size_t(u)] == largest)
|
||||
comp_indices.push_back(indices[i]);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue