diff --git a/jOOQ/src/main/java/org/jooq/impl/DataTypeProxy.java b/jOOQ/src/main/java/org/jooq/impl/DataTypeProxy.java index 281971f3eb..fc1c78ff48 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DataTypeProxy.java +++ b/jOOQ/src/main/java/org/jooq/impl/DataTypeProxy.java @@ -39,6 +39,8 @@ package org.jooq.impl; import static org.jooq.tools.StringUtils.defaultIfNull; +import java.util.IdentityHashMap; + import org.jooq.Binding; import org.jooq.CharacterSet; import org.jooq.Collation; @@ -116,6 +118,18 @@ final class DataTypeProxy extends AbstractDataType { } final void type(AbstractDataType t) { + if (t instanceof DataTypeProxy p) { + + // [#11856] [#14343] Prevent cycles in DataTypeProxy chains + IdentityHashMap, AbstractDataType> m = new IdentityHashMap<>(); + m.put(p, p); + + while (p.type() instanceof DataTypeProxy p2) { + if (m.put(p2, p2) != null) + return; + } + } + this.type = t; }