[hibernate-issues] [JIRA] (HV-1797) Validation on classes with a bidirectional relationship cause stack overflow on 6.1.x

Chris Westmorland (JIRA) jira at hibernate.atlassian.net
Thu Aug 6 13:20:48 EDT 2020


Chris Westmorland ( https://hibernate.atlassian.net/secure/ViewProfile.jspa?accountId=5f2c38a3891edc002211e444 ) *created* an issue

Hibernate Validator ( https://hibernate.atlassian.net/browse/HV?atlOrigin=eyJpIjoiYTBjZjU3MjFiMzUxNDRkM2E3ZmJiYTgwOGU1NGU5ZGIiLCJwIjoiaiJ9 ) / Bug ( https://hibernate.atlassian.net/browse/HV-1797?atlOrigin=eyJpIjoiYTBjZjU3MjFiMzUxNDRkM2E3ZmJiYTgwOGU1NGU5ZGIiLCJwIjoiaiJ9 ) HV-1797 ( https://hibernate.atlassian.net/browse/HV-1797?atlOrigin=eyJpIjoiYTBjZjU3MjFiMzUxNDRkM2E3ZmJiYTgwOGU1NGU5ZGIiLCJwIjoiaiJ9 ) Validation on classes with a bidirectional relationship cause stack overflow on 6.1.x ( https://hibernate.atlassian.net/browse/HV-1797?atlOrigin=eyJpIjoiYTBjZjU3MjFiMzUxNDRkM2E3ZmJiYTgwOGU1NGU5ZGIiLCJwIjoiaiJ9 )

Issue Type: Bug Affects Versions: 6.1.0.Final, 6.1.1.Final, 6.1.2.Final, 6.1.3.Final, 6.1.4.Final, 6.1.5.Final Assignee: Unassigned Components: validators Created: 06/Aug/2020 10:20 AM Environment: Spring Boot 2.3.2, Java 11 Priority: Major Reporter: Chris Westmorland ( https://hibernate.atlassian.net/secure/ViewProfile.jspa?accountId=5f2c38a3891edc002211e444 )

We recently upgraded one of our microservices from Spring Boot 2.2 to 2.3 and ran into a bug with hibernate validator that seems to affect all 6.1.x versions. Here is an example that reproduces the issue.

```
@JsonIdentityInfo(
generator = ObjectIdGenerators.PropertyGenerator.class,
property = "id",
scope = Parent.class)
public class Parent

{ @NotNull private Long id; @Valid private Set<Child> children = new HashSet<>(); // getters and setters }

@JsonIdentityInfo(
generator = ObjectIdGenerators.PropertyGenerator.class,
property = "id",
scope = Child.class)
public class Child

{ @NotNull private Long id; @NotNull @Valid private Parent parent; // getters and setters }

@RestController
@Validated
public class ValidatorController
{
@GetMapping("/")
public Parent get()

{ final Parent parent = new Parent(); parent.setId(1L); final Child child = new Child(); child.setId(1L); child.setParent(parent); parent.getChildren().add(child); return parent; }

@PostMapping("/")
public void post(@Valid @NotNull @RequestBody Parent parent)

{ System.out.println(parent.getId()); }

}

@SpringBootTest
@RunWith(SpringRunner.class)
@AutoConfigureMockMvc
public class ValidatorTest
{
@Autowired
private MockMvc mvc;

@Test
public void test() throws Exception

{ final MvcResult result = mvc.perform(get("/").accept(MediaType.APPLICATION_JSON)) .andExpect(status().is2xxSuccessful()).andReturn(); final String json = result.getResponse().getContentAsString(); System.out.println(json); mvc.perform(post("/").contentType(MediaType.APPLICATION_JSON).content(json)) .andExpect(status().is2xxSuccessful()); }

}
```

This will trigger a stack overflow...

```
at org.hibernate.validator.internal.engine.ValidatorImpl.access$300(ValidatorImpl.java:84)
at org.hibernate.validator.internal.engine.ValidatorImpl$CascadingValueReceiver.doValidate(ValidatorImpl.java:715)
at org.hibernate.validator.internal.engine.ValidatorImpl$CascadingValueReceiver.iterableValue(ValidatorImpl.java:675)
at org.hibernate.validator.internal.engine.valueextraction.IterableValueExtractor.extractValues(IterableValueExtractor.java:24)
at org.hibernate.validator.internal.engine.valueextraction.IterableValueExtractor.extractValues(IterableValueExtractor.java:14)
at org.hibernate.validator.internal.engine.valueextraction.ValueExtractorHelper.extractValues(ValueExtractorHelper.java:42)
at org.hibernate.validator.internal.engine.ValidatorImpl.validateCascadedContainerElementsForCurrentGroup(ValidatorImpl.java:651)
at org.hibernate.validator.internal.engine.ValidatorImpl.validateCascadedConstraints(ValidatorImpl.java:598)
at org.hibernate.validator.internal.engine.ValidatorImpl.validateInContext(ValidatorImpl.java:409)
at org.hibernate.validator.internal.engine.ValidatorImpl.validateCascadedAnnotatedObjectForCurrentGroup(ValidatorImpl.java:629)
at org.hibernate.validator.internal.engine.ValidatorImpl.validateCascadedConstraints(ValidatorImpl.java:590)
at org.hibernate.validator.internal.engine.ValidatorImpl.validateInContext(ValidatorImpl.java:409)
at org.hibernate.validator.internal.engine.ValidatorImpl.access$300(ValidatorImpl.java:84)
```

( https://hibernate.atlassian.net/browse/HV-1797#add-comment?atlOrigin=eyJpIjoiYTBjZjU3MjFiMzUxNDRkM2E3ZmJiYTgwOGU1NGU5ZGIiLCJwIjoiaiJ9 ) Add Comment ( https://hibernate.atlassian.net/browse/HV-1797#add-comment?atlOrigin=eyJpIjoiYTBjZjU3MjFiMzUxNDRkM2E3ZmJiYTgwOGU1NGU5ZGIiLCJwIjoiaiJ9 )

Get Jira notifications on your phone! Download the Jira Cloud app for Android ( https://play.google.com/store/apps/details?id=com.atlassian.android.jira.core&referrer=utm_source%3DNotificationLink%26utm_medium%3DEmail ) or iOS ( https://itunes.apple.com/app/apple-store/id1006972087?pt=696495&ct=EmailNotificationLink&mt=8 ) This message was sent by Atlassian Jira (v1001.0.0-SNAPSHOT#100141- sha1:76df2fe )
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/hibernate-issues/attachments/20200806/992717a9/attachment.html 


More information about the hibernate-issues mailing list