shedaniel / cloth-config

Client-Sided API for Minecraft 1.14
Other
185 stars 70 forks source link

GsonConfigSerializer returns null when config is empty, crashing on load #256

Open Fourmisain opened 4 months ago

Fourmisain commented 4 months ago

Encountered in https://github.com/RandomMcSomethin/fallingleaves/issues/64

When a config file is empty for whatever reason and deserialized using the GsonConfigSerializer, it'll return null, which will NPE inside ConfigManager.load() here.

I thought of registering a load listener to work around that, but since load() is called from ConfigManager's constructor, it is impossible to call registerLoadListener() before load() - which is arguably another issue.

I think a good fix would be to let GsonConfigSerializer throw a SerializationException return createDefault() when Gson returns a null value here, so it automatically resets and re-saves the config.


Relevant quote from the Gson javadoc:

Returns null if [Reader] json is at EOF.