Search Issue Tracker

Fixed in 2021.1.X

Votes

0

Found in

2018.4

2020.1.2f1

2021.1

Issue ID

1279513

Regression

No

No way to check if a SerializedObject is null when it is initialized with null

IMGUI

-

How to reproduce:
1. Open the attached project("nullRecreation.zip")
2. Select Window > recr
3. Press "Press Me" in the recr window

Expected results: Nothing happens
Actual results: ArgumentNullRefferenceException is thrown

Reproducible with: 2018.4.28f1, 2019.4.13f1, 2020.1.11f1, 2020.2.0b9, 2021.0.a3

Notes:
1. When a SerializedObject gets initialized with null in its constructor parameter, the object ignores null checks. You also can't check serializedObject.targetObject != null, because ArgumentNullRefferenceException is thrown, because you can't access those parameters of a null value.
2. If you point a serializedObject to null then it doesn't ignore null checks

  1. Resolution Note (fix version 2021.1):

    Fixed in Unity 2021.2.0a3

Comments (1)

  1. Hosnkobf

    Feb 16, 2025 19:13

    Bug is back in Unity 6000.0

    the decompiled code for `SerializedObject.targetObject` looks like this:
    ```csharp
    public UnityEngine.Object targetObject
    {
    get
    {
    IntPtr intPtr = BindingsMarshaller.ConvertToNative(this);
    if (intPtr == (IntPtr)0)
    {
    ThrowHelper.ThrowNullReferenceException(this);
    }

    return Unmarshal.UnmarshalUnityObject<UnityEngine.Object>(get_targetObject_Injected(intPtr));
    }
    }
    ```

    so, it throws a null-ref-exception if the internal pointer is null. But the `BindingMarshaller` is internal as well as `m_NativeObjectPtr`. I thought I found a property that is made for public access: `isValid` - but this one is internal as well. So I am forced to use try-catch here. why?

Add comment

Log in to post comment

All about bugs

View bugs we have successfully reproduced, and vote for the bugs you want to see fixed most urgently.