Skip to content

Conversation

mansoorcheema
Copy link

Fixed crash during conversion of corrupt received image data to cv image.

for (int u = 0; u < img->image.cols; u++) {
img->image.at<uchar>(v, u) =
infrared_compensation_[img->image.at<uchar>(v, u)];
try {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Prefer specific checks to try blocks where possible. E.g. if the issue is that the messages are sometimes empty you can directly check for that. If it fails for various reasons then try-catch is fine. The entire image conversion loop does not need to be in the try block I think? The only thing that could go wrong here is that the data is out of range, which you can statically check for when loading the infrared corrections (i.e. that all values between 0-255 are covered)

}
pub_.publish(img->toImageMsg());
} catch (const cv_bridge::Exception& e) {
std::cerr << "Could not convert image to CvImage\n";
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Better to stay consistent with logging (i.e. we use glog throughout the project). Consider replacing with more informative text, e.g. LOG(WARNING) << "Could not convert image for infrared_id_compensation, skipping frame (" << e.what() << ").";

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.

2 participants