Skip to content

Commit 7dbae50

Browse files
tledkovtkledkov
andauthored
Proposed fix reference that cause StackOverflowException on equals/hashCode (#501)
exclude the referredSchema from ReferenceSchema.hashCode()-equals() to avoid StackOverflowError. Co-authored-by: tkledkov <[email protected]>
1 parent 81f0b2f commit 7dbae50

File tree

3 files changed

+7
-3
lines changed

3 files changed

+7
-3
lines changed

core/src/main/java/org/everit/json/schema/ReferenceSchema.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,6 @@ public boolean equals(Object o) {
145145
return that.canEqual(this) &&
146146
Objects.equals(refValue, that.refValue) &&
147147
Objects.equals(unprocessedProperties, that.unprocessedProperties) &&
148-
Objects.equals(referredSchema, that.referredSchema) &&
149148
Objects.equals(title, that.title) &&
150149
Objects.equals(description, that.description) &&
151150
super.equals(that);
@@ -156,7 +155,7 @@ public boolean equals(Object o) {
156155

157156
@Override
158157
public int hashCode() {
159-
return Objects.hash(super.hashCode(), referredSchema, refValue, unprocessedProperties, title, description);
158+
return Objects.hash(super.hashCode(), refValue, unprocessedProperties, title, description);
160159
}
161160

162161
@Override

core/src/test/java/org/everit/json/schema/ReferenceSchemaTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ public void definesPropertyThrowsExc_IfNoReferredSchemaIsSet() {
8080
public void equalsVerifier() {
8181
EqualsVerifier.forClass(ReferenceSchema.class)
8282
.withRedefinedSuperclass()
83-
.withIgnoredFields("schemaLocation", "location")
83+
.withIgnoredFields("schemaLocation", "location", "referredSchema")
8484
//there are specifically some non final fields for loading of recursive schemas
8585
.suppress(Warning.NONFINAL_FIELDS)
8686
.suppress(Warning.STRICT_INHERITANCE)

tests/vanilla/src/main/java/org/everit/json/schema/EmptyObjectTest.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
import org.json.JSONTokener;
1010
import org.junit.jupiter.api.Test;
1111

12+
import static org.junit.jupiter.api.Assertions.assertEquals;
13+
1214
public class EmptyObjectTest {
1315

1416
@Test
@@ -23,6 +25,9 @@ public void validateEmptyObject() throws IOException {
2325

2426
Schema schema = SchemaLoader.load(jsonSchema);
2527
schema.validate(jsonSubject);
28+
29+
assertEquals(schema, SchemaLoader.load(jsonSchema));
30+
assertEquals(schema.hashCode(), SchemaLoader.load(jsonSchema).hashCode());
2631
}
2732

2833
}

0 commit comments

Comments
 (0)