[applied] ir: Avoid infinite loop during type canonicalization

Message ID 87fsuff8nq.fsf@redhat.com
State New
Headers
Series [applied] ir: Avoid infinite loop during type canonicalization |

Commit Message

Dodji Seketeli Sept. 8, 2021, 2:23 p.m. UTC
  Hello,

While looking at something else, I noticed an occurrence of infinite
loop during type canonicalization, especially when cancelling
canonical type propagation on some types.

Fixed thus.

This helps address https://bugzilla.redhat.com/show_bug.cgi?id=1951501

	* src/abg-ir-priv.h
	(environment::priv::collect_types_that_depends_on): Don't try to
	collect a type that has already been collected.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
Applied to master.

---
 src/abg-ir-priv.h | 5 +++++
 1 file changed, 5 insertions(+)
  

Patch

diff --git a/src/abg-ir-priv.h b/src/abg-ir-priv.h
index 9285dd73..f09162ab 100644
--- a/src/abg-ir-priv.h
+++ b/src/abg-ir-priv.h
@@ -607,6 +607,11 @@  struct environment::priv
     bool result = false;
     for (const auto i : types)
       {
+	// First avoid infinite loop if we've already collected the
+	// current type.
+	if (collected.find(i) != collected.end())
+	  continue;
+
 	type_base *t = reinterpret_cast<type_base*>(i);
 	if (t->priv_->depends_on_recursive_type(target))
 	  {