import java.io.*;

record Person(SomeClass name) implements Serializable {}

class SomeClass implements Serializable {

    Person p1;

    @Override
    public String toString() {
        return "SomeClass{" +
                "p1 is Null: " + (p1 == null) +
                '}';
    }
}

public class DeserializationBug {

    public static void main(String[] args) {
        String filename = "person.ser";

        // Serialization
        var originalPerson = new Person(new SomeClass());
        originalPerson.name().p1 = originalPerson;
        try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(filename))) {
            oos.writeObject(originalPerson);
            System.out.println("Object serialized successfully: " + originalPerson);
        } catch (IOException e) {
            System.err.println("Serialization failed: " + e.getMessage());
        }

        // Deserialization
        Person deserializedPerson = null;
        try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(filename))) {
            deserializedPerson = (Person) ois.readObject();
            System.out.println("Object deserialized successfully: " + deserializedPerson);
        } catch (IOException | ClassNotFoundException e) {
            System.err.println("Deserialization failed: " + e.getMessage());
        }
    }
}