From 78c4ffec9958ca88242de69647e61f2a5d3702bb Mon Sep 17 00:00:00 2001 From: Roman Donchenko Date: Wed, 2 Oct 2013 16:02:11 +0400 Subject: [PATCH 1/3] Revert "Fixed a bug in FLANN resulting in uninitialized accesses." This reverts commit a9975b144a22e76228125eb0a25f78ec13db6815, to prepare for cherry-picking upstream's solution. --- modules/flann/include/opencv2/flann/any.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/modules/flann/include/opencv2/flann/any.h b/modules/flann/include/opencv2/flann/any.h index 070d5a421f..4042db67c7 100644 --- a/modules/flann/include/opencv2/flann/any.h +++ b/modules/flann/include/opencv2/flann/any.h @@ -257,7 +257,8 @@ public: const T& cast() const { if (policy->type() != typeid(T)) throw anyimpl::bad_any_cast(); - T* r = reinterpret_cast(policy->get_value(const_cast(&object))); + void* obj = const_cast(object); + T* r = reinterpret_cast(policy->get_value(&obj)); return *r; } From 4c19e0273a43b0e0a227fbdedc7e8c5285e7fe0e Mon Sep 17 00:00:00 2001 From: Roman Donchenko Date: Wed, 2 Oct 2013 16:06:56 +0400 Subject: [PATCH 2/3] Cherry-picked mariusmuja/flann@b615f2694723fe402b8bbe50d77e622beff7f171. Original author: Alex Wilson. --- modules/flann/include/opencv2/flann/any.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/modules/flann/include/opencv2/flann/any.h b/modules/flann/include/opencv2/flann/any.h index 4042db67c7..d62d491854 100644 --- a/modules/flann/include/opencv2/flann/any.h +++ b/modules/flann/include/opencv2/flann/any.h @@ -44,6 +44,7 @@ struct base_any_policy virtual void clone(void* const* src, void** dest) = 0; virtual void move(void* const* src, void** dest) = 0; virtual void* get_value(void** src) = 0; + virtual void* get_value(void* const * src) = 0; virtual ::size_t get_size() = 0; virtual const std::type_info& type() = 0; virtual void print(std::ostream& out, void* const* src) = 0; @@ -69,6 +70,7 @@ struct small_any_policy : typed_base_any_policy virtual void clone(void* const* src, void** dest) { *dest = *src; } virtual void move(void* const* src, void** dest) { *dest = *src; } virtual void* get_value(void** src) { return reinterpret_cast(src); } + virtual void* get_value(void* const * src) { return const_cast( reinterpret_cast(src) ); } virtual void print(std::ostream& out, void* const* src) { out << *reinterpret_cast(src); } }; @@ -93,6 +95,7 @@ struct big_any_policy : typed_base_any_policy **reinterpret_cast(dest) = **reinterpret_cast(src); } virtual void* get_value(void** src) { return *src; } + virtual void* get_value(void* const * src) { return const_cast(*src); } virtual void print(std::ostream& out, void* const* src) { out << *reinterpret_cast(*src); } }; @@ -257,8 +260,7 @@ public: const T& cast() const { if (policy->type() != typeid(T)) throw anyimpl::bad_any_cast(); - void* obj = const_cast(object); - T* r = reinterpret_cast(policy->get_value(&obj)); + T* r = reinterpret_cast(policy->get_value(&object)); return *r; } From 58da54cb7a6b25ca336444bc7bc88eeeba0911ae Mon Sep 17 00:00:00 2001 From: Roman Donchenko Date: Wed, 2 Oct 2013 16:09:45 +0400 Subject: [PATCH 3/3] Cherry-picked mariusmuja/flann@8c8b0e0cb879666797ab2ac51b9ee438bf84a183. Original author: me. --- modules/flann/include/opencv2/flann/any.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/flann/include/opencv2/flann/any.h b/modules/flann/include/opencv2/flann/any.h index d62d491854..4a58cf2dc4 100644 --- a/modules/flann/include/opencv2/flann/any.h +++ b/modules/flann/include/opencv2/flann/any.h @@ -44,7 +44,7 @@ struct base_any_policy virtual void clone(void* const* src, void** dest) = 0; virtual void move(void* const* src, void** dest) = 0; virtual void* get_value(void** src) = 0; - virtual void* get_value(void* const * src) = 0; + virtual const void* get_value(void* const * src) = 0; virtual ::size_t get_size() = 0; virtual const std::type_info& type() = 0; virtual void print(std::ostream& out, void* const* src) = 0; @@ -70,7 +70,7 @@ struct small_any_policy : typed_base_any_policy virtual void clone(void* const* src, void** dest) { *dest = *src; } virtual void move(void* const* src, void** dest) { *dest = *src; } virtual void* get_value(void** src) { return reinterpret_cast(src); } - virtual void* get_value(void* const * src) { return const_cast( reinterpret_cast(src) ); } + virtual const void* get_value(void* const * src) { return reinterpret_cast(src); } virtual void print(std::ostream& out, void* const* src) { out << *reinterpret_cast(src); } }; @@ -95,7 +95,7 @@ struct big_any_policy : typed_base_any_policy **reinterpret_cast(dest) = **reinterpret_cast(src); } virtual void* get_value(void** src) { return *src; } - virtual void* get_value(void* const * src) { return const_cast(*src); } + virtual const void* get_value(void* const * src) { return *src; } virtual void print(std::ostream& out, void* const* src) { out << *reinterpret_cast(*src); } }; @@ -260,7 +260,7 @@ public: const T& cast() const { if (policy->type() != typeid(T)) throw anyimpl::bad_any_cast(); - T* r = reinterpret_cast(policy->get_value(&object)); + const T* r = reinterpret_cast(policy->get_value(&object)); return *r; }