libseat: Handle SERVER_ERROR correctly
The connection buffer position was erroneously rewinded before reading the protocol message when the message was a SERVER_ERROR.
This commit is contained in:
parent
1867f29d42
commit
047d8b284c
1 changed files with 1 additions and 2 deletions
|
@ -165,14 +165,13 @@ static size_t read_header(struct backend_seatd *backend, uint16_t expected_opcod
|
||||||
return SIZE_MAX;
|
return SIZE_MAX;
|
||||||
}
|
}
|
||||||
if (header.opcode != expected_opcode) {
|
if (header.opcode != expected_opcode) {
|
||||||
connection_restore(&backend->connection, sizeof header);
|
|
||||||
struct proto_server_error msg;
|
struct proto_server_error msg;
|
||||||
if (header.opcode != SERVER_ERROR) {
|
if (header.opcode != SERVER_ERROR) {
|
||||||
log_errorf("Unexpected response: expected opcode %d, received opcode %d",
|
log_errorf("Unexpected response: expected opcode %d, received opcode %d",
|
||||||
expected_opcode, header.opcode);
|
expected_opcode, header.opcode);
|
||||||
set_error(backend);
|
set_error(backend);
|
||||||
errno = EBADMSG;
|
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);
|
set_error(backend);
|
||||||
errno = EBADMSG;
|
errno = EBADMSG;
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue