config: Fix error paths of configuration parsing

Thanks coverity, oss-fuzz and Ram-Z reporting this independently.

CID 1643770

https://oss-fuzz.com/issue/4969113899565056
https://oss-fuzz.com/issue/6448013813022720

Fixes up 1833ce86f9.

Signed-off-by: Jakub Jelen <jjelen@redhat.com>
Reviewed-by: Andreas Schneider <asn@cryptomilk.org>
This commit is contained in:
Jakub Jelen
2025-12-15 11:08:12 +01:00
parent 79966eb924
commit e82677a923

View File

@@ -806,28 +806,26 @@ ssh_config_get_auth_option(enum ssh_config_opcode_e opcode)
return -1; return -1;
} }
#define CHECK_COND_OR_FAIL(cond, error_message) \ #define CHECK_COND_OR_FAIL(cond, error_message) \
do { \ if ((cond)) { \
if ((cond)) { \ SSH_LOG(SSH_LOG_DEBUG, \
SSH_LOG(SSH_LOG_DEBUG, \ "line %d: %s: %s", \
"line %d: %s: %s", \ count, \
count, \ error_message, \
error_message, \ keyword); \
keyword); \ if (fail_on_unknown) { \
if (fail_on_unknown) { \ ssh_set_error(session, \
ssh_set_error(session, \ SSH_FATAL, \
SSH_FATAL, \ is_cli ? "%s '%s' value on CLI" \
is_cli ? "%s '%s' value on CLI" \ : "%s '%s' value at line %d", \
: "%s '%s' value at line %d", \ error_message, \
error_message, \ keyword, \
keyword, \ is_cli ? 0 : count); \
is_cli ? 0 : count); \ SAFE_FREE(x); \
SAFE_FREE(x); \ return SSH_ERROR; \
return SSH_ERROR; \ } \
} \ break; \
break; \ }
} \
} while (0)
static int ssh_config_parse_line_internal(ssh_session session, static int ssh_config_parse_line_internal(ssh_session session,
const char *line, const char *line,
@@ -1578,7 +1576,7 @@ static int ssh_config_parse_line_internal(ssh_session session,
return 0; return 0;
} }
#undef SSH_PARSE_OR_FAIL #undef CHECK_COND_OR_FAIL
int ssh_config_parse_line(ssh_session session, int ssh_config_parse_line(ssh_session session,
const char *line, const char *line,