Loading lib/rtsp.c +7 −4 Original line number Diff line number Diff line Loading @@ -54,6 +54,11 @@ */ #define RTP_PKT_CHANNEL(p) ((int)((unsigned char)((p)[1]))) #define RTP_PKT_LENGTH(p) ((((int)((unsigned char)((p)[2]))) << 8) | \ ((int)((unsigned char)((p)[3])))) static int rtsp_getsock_do(struct connectdata *conn, curl_socket_t *socks, int numsocks); Loading Loading @@ -544,16 +549,14 @@ CURLcode Curl_rtsp_rtp_readwrite(struct SessionHandle *data, while((rtp_dataleft > 0) && (rtp[0] == '$')) { if(rtp_dataleft > 4) { char channel; int rtp_length; /* Parse the header */ /* The channel identifier immediately follows and is 1 byte */ channel = rtp[1]; rtspc->rtp_channel = (int) channel; rtspc->rtp_channel = RTP_PKT_CHANNEL(rtp); /* The length is two bytes */ rtp_length = ntohs( *((unsigned short *)(&rtp[2])) ); rtp_length = RTP_PKT_LENGTH(rtp); if(rtp_dataleft < rtp_length + 4) { /* Need more - incomplete payload*/ Loading tests/libtest/lib571.c +15 −6 Original line number Diff line number Diff line Loading @@ -33,6 +33,11 @@ #include "memdebug.h" #define RTP_PKT_CHANNEL(p) ((int)((unsigned char)((p)[1]))) #define RTP_PKT_LENGTH(p) ((((int)((unsigned char)((p)[2]))) << 8) | \ ((int)((unsigned char)((p)[3])))) #define RTP_DATA_SIZE 12 static const char *RTP_DATA = "$_1234\n\0asdf"; Loading @@ -40,16 +45,18 @@ static int rtp_packet_count = 0; static size_t rtp_write(void *ptr, size_t size, size_t nmemb, void *stream) { char *data = (char *)ptr; int channel = (int)data[1]; int message_size = (int)(size * nmemb - 4); unsigned short coded_size = ntohs(*((unsigned short*)(&data[2]))); int channel = RTP_PKT_CHANNEL(data); int message_size = (int)(size * nmemb) - 4; int coded_size = RTP_PKT_LENGTH(data); size_t failure = (size * nmemb) ? 0 : 1; int i; (void)stream; printf("RTP: message size %d, channel %d\n", message_size, channel); if((unsigned short) message_size != coded_size) { printf("RTP embedded size (%hu) does not match the write size (%d).\n", if(message_size != coded_size) { printf("RTP embedded size (%d) does not match the write size (%d).\n", coded_size, message_size); return failure; } data += 4; Loading @@ -57,11 +64,13 @@ static size_t rtp_write(void *ptr, size_t size, size_t nmemb, void *stream) { if(message_size - i > RTP_DATA_SIZE) { if(memcmp(RTP_DATA, data + i, RTP_DATA_SIZE) != 0) { printf("RTP PAYLOAD CORRUPTED [%s]\n", data + i); return failure; } } else { if (memcmp(RTP_DATA, data + i, message_size - i) != 0) { printf("RTP PAYLOAD END CORRUPTED (%d), [%s]\n", message_size - i, data + i); return failure; } } } Loading Loading
lib/rtsp.c +7 −4 Original line number Diff line number Diff line Loading @@ -54,6 +54,11 @@ */ #define RTP_PKT_CHANNEL(p) ((int)((unsigned char)((p)[1]))) #define RTP_PKT_LENGTH(p) ((((int)((unsigned char)((p)[2]))) << 8) | \ ((int)((unsigned char)((p)[3])))) static int rtsp_getsock_do(struct connectdata *conn, curl_socket_t *socks, int numsocks); Loading Loading @@ -544,16 +549,14 @@ CURLcode Curl_rtsp_rtp_readwrite(struct SessionHandle *data, while((rtp_dataleft > 0) && (rtp[0] == '$')) { if(rtp_dataleft > 4) { char channel; int rtp_length; /* Parse the header */ /* The channel identifier immediately follows and is 1 byte */ channel = rtp[1]; rtspc->rtp_channel = (int) channel; rtspc->rtp_channel = RTP_PKT_CHANNEL(rtp); /* The length is two bytes */ rtp_length = ntohs( *((unsigned short *)(&rtp[2])) ); rtp_length = RTP_PKT_LENGTH(rtp); if(rtp_dataleft < rtp_length + 4) { /* Need more - incomplete payload*/ Loading
tests/libtest/lib571.c +15 −6 Original line number Diff line number Diff line Loading @@ -33,6 +33,11 @@ #include "memdebug.h" #define RTP_PKT_CHANNEL(p) ((int)((unsigned char)((p)[1]))) #define RTP_PKT_LENGTH(p) ((((int)((unsigned char)((p)[2]))) << 8) | \ ((int)((unsigned char)((p)[3])))) #define RTP_DATA_SIZE 12 static const char *RTP_DATA = "$_1234\n\0asdf"; Loading @@ -40,16 +45,18 @@ static int rtp_packet_count = 0; static size_t rtp_write(void *ptr, size_t size, size_t nmemb, void *stream) { char *data = (char *)ptr; int channel = (int)data[1]; int message_size = (int)(size * nmemb - 4); unsigned short coded_size = ntohs(*((unsigned short*)(&data[2]))); int channel = RTP_PKT_CHANNEL(data); int message_size = (int)(size * nmemb) - 4; int coded_size = RTP_PKT_LENGTH(data); size_t failure = (size * nmemb) ? 0 : 1; int i; (void)stream; printf("RTP: message size %d, channel %d\n", message_size, channel); if((unsigned short) message_size != coded_size) { printf("RTP embedded size (%hu) does not match the write size (%d).\n", if(message_size != coded_size) { printf("RTP embedded size (%d) does not match the write size (%d).\n", coded_size, message_size); return failure; } data += 4; Loading @@ -57,11 +64,13 @@ static size_t rtp_write(void *ptr, size_t size, size_t nmemb, void *stream) { if(message_size - i > RTP_DATA_SIZE) { if(memcmp(RTP_DATA, data + i, RTP_DATA_SIZE) != 0) { printf("RTP PAYLOAD CORRUPTED [%s]\n", data + i); return failure; } } else { if (memcmp(RTP_DATA, data + i, message_size - i) != 0) { printf("RTP PAYLOAD END CORRUPTED (%d), [%s]\n", message_size - i, data + i); return failure; } } } Loading