Checking for errros in a xmpp_stanza_reply_error()

This commit is contained in:
sshikaree
2021-07-08 09:44:23 +03:00
parent 2bf1988b3c
commit f27d95fe43

View File

@@ -1210,9 +1210,9 @@ xmpp_stanza_t *xmpp_stanza_reply_error(xmpp_stanza_t *stanza,
{ {
xmpp_ctx_t *ctx = stanza->ctx; xmpp_ctx_t *ctx = stanza->ctx;
xmpp_stanza_t *reply = NULL; xmpp_stanza_t *reply = NULL;
xmpp_stanza_t *error; xmpp_stanza_t *error = NULL;
xmpp_stanza_t *item; xmpp_stanza_t *item = NULL;
xmpp_stanza_t *text_stanza; xmpp_stanza_t *text_stanza = NULL;
const char *to; const char *to;
if (!error_type || !condition) if (!error_type || !condition)
@@ -1221,41 +1221,53 @@ xmpp_stanza_t *xmpp_stanza_reply_error(xmpp_stanza_t *stanza,
reply = xmpp_stanza_reply(stanza); reply = xmpp_stanza_reply(stanza);
if (!reply) if (!reply)
goto quit_err; goto quit_err;
if (xmpp_stanza_set_type(reply, "error") != XMPP_EOK)
xmpp_stanza_set_type(reply, "error"); goto quit_err;
to = xmpp_stanza_get_to(stanza); to = xmpp_stanza_get_to(stanza);
if (to) if (to)
xmpp_stanza_set_from(reply, to); if (xmpp_stanza_set_from(reply, to) != XMPP_EOK)
goto quit_err;
error = xmpp_stanza_new(ctx); error = xmpp_stanza_new(ctx);
if (!error) if (!error)
goto quit_err; goto quit_err;
xmpp_stanza_set_name(error, "error"); if (xmpp_stanza_set_name(error, "error") != XMPP_EOK)
xmpp_stanza_set_type(error, error_type); goto quit_err;
xmpp_stanza_add_child(reply, error); if (xmpp_stanza_set_type(error, error_type) != XMPP_EOK)
goto quit_err;
if (xmpp_stanza_add_child(reply, error) != XMPP_EOK)
goto quit_err;
xmpp_stanza_release(error); xmpp_stanza_release(error);
item = xmpp_stanza_new(ctx); item = xmpp_stanza_new(ctx);
if (!item) if (!item)
goto quit_err; goto quit_err;
xmpp_stanza_set_name(item, condition); if (xmpp_stanza_set_name(item, condition) != XMPP_EOK)
xmpp_stanza_set_ns(item, XMPP_NS_STANZAS_IETF); goto quit_err;
xmpp_stanza_add_child(error, item); if (xmpp_stanza_set_ns(item, XMPP_NS_STANZAS_IETF) != XMPP_EOK)
goto quit_err;
if (xmpp_stanza_add_child(error, item) != XMPP_EOK)
goto quit_err;
xmpp_stanza_release(item); xmpp_stanza_release(item);
if (text) { if (text) {
item = xmpp_stanza_new(ctx); item = xmpp_stanza_new(ctx);
if (!item) if (!item)
goto quit_err; goto quit_err;
xmpp_stanza_set_name(item, "text"); if (xmpp_stanza_set_name(item, "text") != XMPP_EOK)
xmpp_stanza_set_ns(item, XMPP_NS_STANZAS_IETF); goto quit_err;
xmpp_stanza_add_child(error, item); if (xmpp_stanza_set_ns(item, XMPP_NS_STANZAS_IETF) != XMPP_EOK)
goto quit_err;
if (xmpp_stanza_add_child(error, item) != XMPP_EOK)
goto quit_err;
xmpp_stanza_release(item); xmpp_stanza_release(item);
text_stanza = xmpp_stanza_new(ctx); text_stanza = xmpp_stanza_new(ctx);
if (!text_stanza) if (!text_stanza)
goto quit_err; goto quit_err;
xmpp_stanza_set_text(text_stanza, text); if (xmpp_stanza_set_text(text_stanza, text) != XMPP_EOK)
xmpp_stanza_add_child(item, text_stanza); goto quit_err;
if (xmpp_stanza_add_child(item, text_stanza) != XMPP_EOK)
goto quit_err;
xmpp_stanza_release(text_stanza); xmpp_stanza_release(text_stanza);
} }
@@ -1264,6 +1276,12 @@ xmpp_stanza_t *xmpp_stanza_reply_error(xmpp_stanza_t *stanza,
quit_err: quit_err:
if (reply) if (reply)
xmpp_stanza_release(reply); xmpp_stanza_release(reply);
if (error)
xmpp_stanza_release(error);
if (item)
xmpp_stanza_release(item);
if (text_stanza)
xmpp_stanza_release(text_stanza);
return NULL; return NULL;
} }