CLEANUP: peers: factor error handling in peer_treat_definedmsg()
This is a trivial code refactoring of similar parsing error code
under a single label.
diff --git a/src/peers.c b/src/peers.c
index bc9ac3e..2830e9e 100644
--- a/src/peers.c
+++ b/src/peers.c
@@ -1396,25 +1396,16 @@
uint64_t table_data;
table_id = intdecode(msg_cur, msg_end);
- if (!*msg_cur) {
- /* malformed message */
- appctx->st0 = PEER_SESS_ST_ERRPROTO;
- return 0;
- }
+ if (!*msg_cur)
+ goto malformed_exit;
table_id_len = intdecode(msg_cur, msg_end);
- if (!*msg_cur) {
- /* malformed message */
- appctx->st0 = PEER_SESS_ST_ERRPROTO;
- return 0;
- }
+ if (!*msg_cur)
+ goto malformed_exit;
p->remote_table = NULL;
- if (!table_id_len || (*msg_cur + table_id_len) >= msg_end) {
- /* malformed message */
- appctx->st0 = PEER_SESS_ST_ERRPROTO;
- return 0;
- }
+ if (!table_id_len || (*msg_cur + table_id_len) >= msg_end)
+ goto malformed_exit;
for (st = p->tables; st; st = st->next) {
/* Reset IDs */
@@ -1430,32 +1421,20 @@
goto ignore_msg;
*msg_cur += table_id_len;
- if (*msg_cur >= msg_end) {
- /* malformed message */
- appctx->st0 = PEER_SESS_ST_ERRPROTO;
- return 0;
- }
+ if (*msg_cur >= msg_end)
+ goto malformed_exit;
table_type = intdecode(msg_cur, msg_end);
- if (!*msg_cur) {
- /* malformed message */
- appctx->st0 = PEER_SESS_ST_ERRPROTO;
- return 0;
- }
+ if (!*msg_cur)
+ goto malformed_exit;
table_keylen = intdecode(msg_cur, msg_end);
- if (!*msg_cur) {
- /* malformed message */
- appctx->st0 = PEER_SESS_ST_ERRPROTO;
- return 0;
- }
+ if (!*msg_cur)
+ goto malformed_exit;
table_data = intdecode(msg_cur, msg_end);
- if (!*msg_cur) {
- /* malformed message */
- appctx->st0 = PEER_SESS_ST_ERRPROTO;
- return 0;
- }
+ if (!*msg_cur)
+ goto malformed_exit;
if (p->remote_table->table->type != table_type
|| p->remote_table->table->key_size != table_keylen) {
@@ -1470,6 +1449,11 @@
ignore_msg:
co_skip(si_oc(si), totl);
return 0;
+
+ malformed_exit:
+ /* malformed message */
+ appctx->st0 = PEER_SESS_ST_ERRPROTO;
+ return 0;
}
/*