aboutsummaryrefslogtreecommitdiff
path: root/project/src/lib-kcl.c
diff options
context:
space:
mode:
authorWiimm <wiimm@wiimm.de>2023-05-28 05:52:52 +0200
committerWiimm <wiimm@wiimm.de>2023-05-28 05:52:52 +0200
commit74ac39c1af5c8e85bf10711aed2ffc9dfee2e277 (patch)
treee6cd603f01c3d360c701d6ad5418fe7e133d2c26 /project/src/lib-kcl.c
parentf978a965248a5a082d6801ef394bdebb55c78e4f (diff)
SZS v2.34a
Diffstat (limited to 'project/src/lib-kcl.c')
-rw-r--r--project/src/lib-kcl.c35
1 files changed, 27 insertions, 8 deletions
diff --git a/project/src/lib-kcl.c b/project/src/lib-kcl.c
index 86f4b9f..3eb3812 100644
--- a/project/src/lib-kcl.c
+++ b/project/src/lib-kcl.c
@@ -2175,6 +2175,19 @@ static u32 calc_stat_oct
kcl->max_o_offset = val;
}
}
+
+ const uint max = kcl->octree_size;
+ if ( kcl->max_l_offset > max )
+ {
+ kcl->max_l_offset = max;
+ kcl->octree_valid = false;
+ }
+ if ( kcl->max_o_offset > max )
+ {
+ kcl->max_o_offset = max;
+ kcl->octree_valid = false;
+ }
+
return offset;
}
@@ -2427,18 +2440,24 @@ void CalcStatisticsKCL
//--- calc triangle usage
- noPRINT("OFF: %x .. %x\n",kcl->min_l_offset,kcl->max_l_offset);
+ PRINT("OFF: %x .. %x, max=%x\n",kcl->min_l_offset,kcl->max_l_offset,kcl->raw_data_size);
+
+ const u8 *max_vptr = kcl->raw_data + kcl->raw_data_size;
for ( offset = kcl->min_l_offset; offset < kcl->max_l_offset; offset += 2 )
{
- uint val = be16( kcl->octree + offset );
- if (val)
+ const u8 *vptr = kcl->octree + offset;
+ if ( vptr < max_vptr )
{
- if ( --val >= n_tri )
- kcl->n_invalid_tri_ref++;
- else if (!tri_used[val])
+ uint val = be16( kcl->octree + offset );
+ if (val)
{
- tri_used[val] = 1;
- kcl->n_tri_used++;
+ if ( --val >= n_tri )
+ kcl->n_invalid_tri_ref++;
+ else if (!tri_used[val])
+ {
+ tri_used[val] = 1;
+ kcl->n_tri_used++;
+ }
}
}
}