From 047d8b284c285ad4b5a643511adb1d0ba8a4e63e Mon Sep 17 00:00:00 2001 From: Kenny Levinsen Date: Mon, 7 Sep 2020 23:33:50 +0200 Subject: libseat: Handle SERVER_ERROR correctly The connection buffer position was erroneously rewinded before reading the protocol message when the message was a SERVER_ERROR. --- libseat/backend/seatd.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'libseat') diff --git a/libseat/backend/seatd.c b/libseat/backend/seatd.c index fd424b5..0b8064d 100644 --- a/libseat/backend/seatd.c +++ b/libseat/backend/seatd.c @@ -165,14 +165,13 @@ static size_t read_header(struct backend_seatd *backend, uint16_t expected_opcod return SIZE_MAX; } if (header.opcode != expected_opcode) { - connection_restore(&backend->connection, sizeof header); struct proto_server_error msg; if (header.opcode != SERVER_ERROR) { log_errorf("Unexpected response: expected opcode %d, received opcode %d", expected_opcode, header.opcode); set_error(backend); errno = EBADMSG; - } else if (conn_get(backend, &msg, sizeof msg) == -1) { + } else if (header.size != sizeof msg || conn_get(backend, &msg, sizeof msg) == -1) { set_error(backend); errno = EBADMSG; } else { -- cgit v1.2.3