diff options
author | Trumeet <yuuta@yuuta.moe> | 2022-07-29 11:55:40 -0700 |
---|---|---|
committer | Trumeet <yuuta@yuuta.moe> | 2022-07-29 11:55:40 -0700 |
commit | 41d27344c3b489466632bd2f1314fd69ff0a363c (patch) | |
tree | 4fbb1e118593da7b78813fbd9184d9c7a0c450d6 /client/libacron/private/serializer.c | |
parent | b897bfe9f99872c701924f3cce269e6a36ea5bb5 (diff) | |
download | acron-41d27344c3b489466632bd2f1314fd69ff0a363c.tar acron-41d27344c3b489466632bd2f1314fd69ff0a363c.tar.gz acron-41d27344c3b489466632bd2f1314fd69ff0a363c.tar.bz2 acron-41d27344c3b489466632bd2f1314fd69ff0a363c.zip |
fix(libacron): spec incompliance: player is optional in disconnect events
API:CHANGE
Diffstat (limited to 'client/libacron/private/serializer.c')
-rw-r--r-- | client/libacron/private/serializer.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/client/libacron/private/serializer.c b/client/libacron/private/serializer.c index 9196305..d5171ba 100644 --- a/client/libacron/private/serializer.c +++ b/client/libacron/private/serializer.c @@ -269,14 +269,20 @@ static int deserialize_event(json_object *obj, const char *type_str, ac_event_t } disconnect->type = AC_EVENT_PLAYER_DISCONNECT; - json_object *arg; - if ((r = get_child(obj, "player", json_type_object, true, &arg))) { + json_object *arg = NULL; + if ((r = get_child(obj, "player", json_type_object, false, &arg))) { ac_object_free((ac_obj_t *) disconnect); goto fail; } - if ((r = deserialize_entity(arg, &disconnect->player))) { - ac_object_free((ac_obj_t *) disconnect); - goto fail; + if (arg) { + if ((r = SALLOC(ac_entity_t, &disconnect->player))) { + ac_object_free((ac_obj_t *) disconnect); + goto fail; + } + if ((r = deserialize_entity(arg, disconnect->player))) { + ac_object_free((ac_obj_t *) disconnect); + goto fail; + } } if ((r = get_child(obj, "reason", json_type_string, true, &arg))) { |