-
Notifications
You must be signed in to change notification settings - Fork 552
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fixed angle_compensate_nodes array overflow issue #10
base: master
Are you sure you want to change the base?
Conversation
On A2, angle_compensate_nodes size is 720 but sometimes angle_value-angle_compensate_offset+j becomes equal to 720. This causes overflow at line 313
Related to: #1 |
8548b73
to
934b402
Compare
@@ -300,7 +300,7 @@ int main(int argc, char * argv[]) { | |||
//const int angle_compensate_multiple = 1; | |||
const int angle_compensate_nodes_count = 360*angle_compensate_multiple; | |||
int angle_compensate_offset = 0; | |||
rplidar_response_measurement_node_hq_t angle_compensate_nodes[angle_compensate_nodes_count]; | |||
rplidar_response_measurement_node_hq_t angle_compensate_nodes[angle_compensate_nodes_count+8]; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why hardcode 8
? I would understand 1
to add one more time the size of a rplidar_response_measurement_node_hq_t
to the size of the memory space, but 8
? This is not a pointer, and even if it was, this an array on the stack, not a malloc-ed buffer, so the size is not counted the same by the language.
If 1
is not the correct option I don't know what is, but 8
is for sure not the right thing to write. The function being huge it is hard to tell what is what but there must be a variable or a formula that makes sense.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
8 is not the right thing to write. Because I already spent a lot time, I hate this but that's a solution at least.
Note: I have used Google's AddressSanitizer to detect the corruption. Valgrind or gdb didn't work for me.
I faced a similar issue today and it was fixed by a similar patch. I was running the node with a RPLidar A3 in Stability mode on a Raspi using the official usb module with the highest baudrate and it crashed consistently after a few seconds of running. |
On A2, angle_compensate_nodes size is 720 but sometimes angle_value-angle_compensate_offset+j becomes equal to 720. This causes overflow at line 313