Skip to content

Conversation

@bjl5029
Copy link

@bjl5029 bjl5029 commented Dec 1, 2025

Problem:
When writing extra attributes from LAS files to the output buffer, the code incorrectly uses attributeOffset (which tracks the input attribute positions) instead of
targetOffset (which represents the correct output buffer offset).

This causes extra attributes to be written to wrong memory locations in the output buffer, resulting in corrupted point cloud data when the input and output attribute layouts
differ.

Root Cause:
In chunker_countsort_laszip.cpp, the lambda capture and memcpy operation use attributeOffset:
auto handleAttribute = [data, point, header, attributeSize, attributeOffset, sourceOffset, attribute](int64_t offset) {
memcpy(data + offset + attributeOffset, point->extra_bytes + sourceOffset, attributeSize);

However, targetOffset is already correctly calculated on line 582 using outputAttributes.getOffset() but was never used.

Fix:
Replace attributeOffset with targetOffset in the lambda capture and memcpy call:
auto handleAttribute = [data, point, header, attributeSize, targetOffset, sourceOffset, attribute](int64_t offset) {
memcpy(data + offset + targetOffset, point->extra_bytes + sourceOffset, attributeSize);

Fix incorrect offset calculation when writing extra attributes to output buffer
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant