diff --git a/aruco_pose/CMakeLists.txt b/aruco_pose/CMakeLists.txt
index cdd55fd4..e72ce8fa 100644
--- a/aruco_pose/CMakeLists.txt
+++ b/aruco_pose/CMakeLists.txt
@@ -25,7 +25,7 @@ find_package(catkin REQUIRED COMPONENTS
)
find_package(OpenCV 3 REQUIRED COMPONENTS core imgproc calib3d)
-if ("${OpenCV_VERSION_MINOR}" LESS "3")
+if ("${OpenCV_VERSION_MINOR}" LESS "9")
message(STATUS "OpenCV version too low, using vendored ArUco package")
include(vendor/VendorOpenCV.cmake)
else()
@@ -229,4 +229,5 @@ if (CATKIN_ENABLE_TESTING)
add_rostest(test/test_parser_empty_map.test)
add_rostest(test/test_node_failure.test)
add_rostest(test/largemap.test)
+ add_rostest(test/crash_opencv.test)
endif()
diff --git a/aruco_pose/test/crash_image_01.png b/aruco_pose/test/crash_image_01.png
new file mode 100644
index 00000000..dc509792
Binary files /dev/null and b/aruco_pose/test/crash_image_01.png differ
diff --git a/aruco_pose/test/crash_image_02.png b/aruco_pose/test/crash_image_02.png
new file mode 100644
index 00000000..ac375329
Binary files /dev/null and b/aruco_pose/test/crash_image_02.png differ
diff --git a/aruco_pose/test/crash_image_03.png b/aruco_pose/test/crash_image_03.png
new file mode 100644
index 00000000..c570402c
Binary files /dev/null and b/aruco_pose/test/crash_image_03.png differ
diff --git a/aruco_pose/test/crash_opencv.py b/aruco_pose/test/crash_opencv.py
new file mode 100644
index 00000000..69c713ab
--- /dev/null
+++ b/aruco_pose/test/crash_opencv.py
@@ -0,0 +1,18 @@
+import rospy
+import pytest
+
+from visualization_msgs.msg import MarkerArray as VisMarkerArray
+
+
+@pytest.fixture
+def node():
+ return rospy.init_node('aruco_pose_opencv_crash', anonymous=True)
+
+def test_opencv_crashes_img01(node):
+ rospy.wait_for_message('aruco_detect_01/visualization', VisMarkerArray, timeout=5)
+
+def test_opencv_crashes_img02(node):
+ rospy.wait_for_message('aruco_detect_02/visualization', VisMarkerArray, timeout=5)
+
+def test_opencv_crashes_img03(node):
+ rospy.wait_for_message('aruco_detect_03/visualization', VisMarkerArray, timeout=5)
diff --git a/aruco_pose/test/crash_opencv.test b/aruco_pose/test/crash_opencv.test
new file mode 100644
index 00000000..9d00aa91
--- /dev/null
+++ b/aruco_pose/test/crash_opencv.test
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/aruco_pose/vendor/aruco/src/aruco.cpp b/aruco_pose/vendor/aruco/src/aruco.cpp
index dfbff73e..2ce00eba 100644
--- a/aruco_pose/vendor/aruco/src/aruco.cpp
+++ b/aruco_pose/vendor/aruco/src/aruco.cpp
@@ -924,6 +924,8 @@ static void _refineCandidateLines(std::vector& nContours, std::vector