From d8b0f3782a12f92fe6ca606f05b3753f4e79f342 Mon Sep 17 00:00:00 2001 From: Pierre Ossman Date: Tue, 9 Apr 2019 14:02:42 +0200 Subject: [PATCH] Give source code info in rdp_protocol_error() Makes it easier to debug things by seeing exactly where the protocol handling crashed. --- cliprdr.c | 2 +- cssp.c | 4 ++-- mcs.c | 4 ++-- orders.c | 2 +- proto.h | 4 +++- rdp.c | 11 ++++++----- rdpsnd.c | 2 +- secure.c | 6 +++--- 8 files changed, 19 insertions(+), 16 deletions(-) diff --git a/cliprdr.c b/cliprdr.c index 76eb98d..337b91b 100644 --- a/cliprdr.c +++ b/cliprdr.c @@ -130,7 +130,7 @@ cliprdr_process(STREAM s) if (!s_check_rem(s, length)) { - rdp_protocol_error("cliprdr_process(), consume of packet from stream would overrun", &packet); + rdp_protocol_error("consume of packet from stream would overrun", &packet); } if (status == CLIPRDR_ERROR) diff --git a/cssp.c b/cssp.c index 6b2d0f7..7e4f611 100644 --- a/cssp.c +++ b/cssp.c @@ -637,7 +637,7 @@ cssp_read_tsrequest(STREAM token, STREAM pubkey) if (!s_check_rem(s, length)) { - rdp_protocol_error("cssp_read_tsrequest(), consume of version from stream would overrun", + rdp_protocol_error("consume of version from stream would overrun", &packet); } in_uint8s(s, length); @@ -663,7 +663,7 @@ cssp_read_tsrequest(STREAM token, STREAM pubkey) if (!s_check_rem(s, length)) { - rdp_protocol_error("cssp_read_tsrequest(), consume of token from stream would overrun", + rdp_protocol_error("consume of token from stream would overrun", &packet); } diff --git a/mcs.c b/mcs.c index 0f2360e..aeeb675 100644 --- a/mcs.c +++ b/mcs.c @@ -52,7 +52,7 @@ mcs_parse_domain_params(STREAM s) if (!s_check_rem(s, length)) { - rdp_protocol_error("mcs_parse_domain_params(), consume domain params from stream would overrun", &packet); + rdp_protocol_error("consume domain params from stream would overrun", &packet); } in_uint8s(s, length); @@ -125,7 +125,7 @@ mcs_recv_connect_response(STREAM mcs_data) if (!s_check_rem(s, length)) { - rdp_protocol_error("mcs_recv_connect_response(), consume connect id from stream would overrun", &packet); + rdp_protocol_error("consume connect id from stream would overrun", &packet); } mcs_parse_domain_params(s); diff --git a/orders.c b/orders.c index 40d4356..bcc1a7e 100644 --- a/orders.c +++ b/orders.c @@ -1272,7 +1272,7 @@ process_secondary_order(STREAM s) if (!s_check_rem(s, length)) { - rdp_protocol_error("process_secondary_order(), next order pointer would overrun stream", &packet); + rdp_protocol_error("next order pointer would overrun stream", &packet); } next_order = s->p + length; diff --git a/proto.h b/proto.h index bfb046a..5571996 100644 --- a/proto.h +++ b/proto.h @@ -165,7 +165,9 @@ RD_BOOL rdp_connect(char *server, uint32 flags, char *domain, char *password, ch char *directory, RD_BOOL reconnect); void rdp_reset_state(void); void rdp_disconnect(void); -void rdp_protocol_error(const char *message, STREAM s); +#define rdp_protocol_error(m, s) _rdp_protocol_error(__FILE__, __LINE__, __func__, m, s) +void _rdp_protocol_error(const char *file, int line, const char *func, + const char *message, STREAM s); /* rdpdr.c */ int get_device_index(RD_NTHANDLE handle); void convert_to_unix_filename(char *filename); diff --git a/rdp.c b/rdp.c index f43b3ed..ec56c9a 100644 --- a/rdp.c +++ b/rdp.c @@ -298,7 +298,7 @@ rdp_in_unistr(STREAM s, int in_len, char **string, uint32 * str_size) if (!s_check_rem(s, in_len)) { - rdp_protocol_error("rdp_in_unistr(), consume of unicode data from stream would overrun", &packet); + rdp_protocol_error("consume of unicode data from stream would overrun", &packet); } // if not already open @@ -1269,7 +1269,7 @@ process_demand_active(STREAM s) if (!s_check_rem(s, len_src_descriptor)) { - rdp_protocol_error("rdp_demand_active(), consume of source descriptor from stream would overrun", &packet); + rdp_protocol_error("consume of source descriptor from stream would overrun", &packet); } in_uint8s(s, len_src_descriptor); @@ -1522,7 +1522,7 @@ process_bitmap_data(STREAM s) /* read compressed bitmap data */ if (!s_check_rem(s, size)) { - rdp_protocol_error("process_bitmap_data(), consume of bitmap data from stream would overrun", &packet); + rdp_protocol_error("consume of bitmap data from stream would overrun", &packet); } in_uint8p(s, data, size); bmpdata = (uint8 *) xmalloc(width * height * Bpp); @@ -2112,9 +2112,10 @@ rdp_disconnect(void) */ void -rdp_protocol_error(const char *message, STREAM s) +_rdp_protocol_error(const char *file, int line, const char *func, + const char *message, STREAM s) { - logger(Protocol, Error, "%s(), %s", __func__, message); + logger(Protocol, Error, "%s:%d: %s(), %s", file, line, func, message); if (s) hexdump(s->p, s_length(s)); exit(0); diff --git a/rdpsnd.c b/rdpsnd.c index 40881b7..73428c9 100644 --- a/rdpsnd.c +++ b/rdpsnd.c @@ -273,7 +273,7 @@ rdpsnd_process_training(STREAM in) if (!s_check_rem(in, 4)) { - rdp_protocol_error("rdpsnd_process_training(), consume of training data from stream would overrun", &packet); + rdp_protocol_error("consume of training data from stream would overrun", &packet); } in_uint16_le(in, tick); diff --git a/secure.c b/secure.c index 175e44d..5dd686b 100644 --- a/secure.c +++ b/secure.c @@ -873,7 +873,7 @@ sec_recv(RD_BOOL * is_fastpath) if (fastpath_flags & FASTPATH_OUTPUT_ENCRYPTED) { if (!s_check_rem(s, 8)) { - rdp_protocol_error("sec_recv(), consume fastpath signature from stream would overrun", &packet); + rdp_protocol_error("consume fastpath signature from stream would overrun", &packet); } in_uint8s(s, 8); /* signature */ @@ -893,7 +893,7 @@ sec_recv(RD_BOOL * is_fastpath) if (sec_flags & SEC_ENCRYPT) { if (!s_check_rem(s, 8)) { - rdp_protocol_error("sec_recv(), consume encrypt signature from stream would overrun", &packet); + rdp_protocol_error("consume encrypt signature from stream would overrun", &packet); } in_uint8s(s, 8); /* signature */ @@ -911,7 +911,7 @@ sec_recv(RD_BOOL * is_fastpath) uint8 swapbyte; if (!s_check_rem(s, 8)) { - rdp_protocol_error("sec_recv(), consume redirect signature from stream would overrun", &packet); + rdp_protocol_error("consume redirect signature from stream would overrun", &packet); } in_uint8s(s, 8); /* signature */