[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:23:54 EDT 2020


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

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

Change By: 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.

```
{code:java} @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());
}
} {code}
```

This will trigger a stack overflow...

```

{noformat} 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)
``` {noformat}

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

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/59bcf3b5/attachment.html 


More information about the hibernate-issues mailing list