91 lines
3.2 KiB
Diff
91 lines
3.2 KiB
Diff
diff --git a/google3/third_party/libsrtp/crypto/include/integers.h b/google3/third_party/libsrtp/crypto/include/integers.h
|
|
index 7010efd..3515d13 100644
|
|
--- a/google3/third_party/libsrtp/crypto/include/integers.h
|
|
+++ b/google3/third_party/libsrtp/crypto/include/integers.h
|
|
@@ -98,7 +98,6 @@ typedef unsigned short int uint16_t;
|
|
typedef unsigned int uint32_t;
|
|
#endif
|
|
|
|
-
|
|
#ifdef NO_64BIT_MATH
|
|
typedef double uint64_t;
|
|
/* assert that sizeof(double) == 8 */
|
|
diff --git a/google3/third_party/libsrtp/include/srtp.h b/google3/third_party/libsrtp/include/srtp.h
|
|
index 7f17853..bbaac95 100644
|
|
--- a/google3/third_party/libsrtp/include/srtp.h
|
|
+++ b/google3/third_party/libsrtp/include/srtp.h
|
|
@@ -50,10 +50,6 @@
|
|
extern "C" {
|
|
#endif
|
|
|
|
-#ifdef _MSC_VER
|
|
-#pragma pack(4)
|
|
-#endif
|
|
-
|
|
#include "crypto_kernel.h"
|
|
|
|
/**
|
|
@@ -930,10 +926,6 @@ srtp_install_event_handler(srtp_event_handler_func_t func);
|
|
#define SRTCP_E_BYTE_BIT 0x80
|
|
#define SRTCP_INDEX_MASK 0x7fffffff
|
|
|
|
-#ifdef _MSC_VER
|
|
-#pragma pack()
|
|
-#endif
|
|
-
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
diff --git a/google3/third_party/libsrtp/srtp/srtp.c b/google3/third_party/libsrtp/srtp/srtp.c
|
|
index 6010dd4..3fc52ee 100644
|
|
--- a/google3/third_party/libsrtp/srtp/srtp.c
|
|
+++ b/google3/third_party/libsrtp/srtp/srtp.c
|
|
@@ -1657,6 +1657,8 @@ srtp_unprotect_rtcp(srtp_t ctx, void *srtcp_hdr, int *pkt_octet_len) {
|
|
srtp_stream_ctx_t *stream;
|
|
int prefix_len;
|
|
uint32_t seq_num;
|
|
+ int e_bit_in_packet; /* whether the E-bit was found in the packet */
|
|
+ int sec_serv_confidentiality; /* whether confidentiality was requested */
|
|
|
|
/* we assume the hdr is 32-bit aligned to start */
|
|
/*
|
|
@@ -1694,7 +1696,10 @@ srtp_unprotect_rtcp(srtp_t ctx, void *srtcp_hdr, int *pkt_octet_len) {
|
|
return err_status_no_ctx;
|
|
}
|
|
}
|
|
-
|
|
+
|
|
+ sec_serv_confidentiality = stream->rtcp_services == sec_serv_conf ||
|
|
+ stream->rtcp_services == sec_serv_conf_and_auth;
|
|
+
|
|
/* get tag length from stream context */
|
|
tag_len = auth_get_tag_length(stream->rtcp_auth);
|
|
|
|
@@ -1714,8 +1719,12 @@ srtp_unprotect_rtcp(srtp_t ctx, void *srtcp_hdr, int *pkt_octet_len) {
|
|
*/
|
|
trailer = (uint32_t *) ((char *) hdr +
|
|
*pkt_octet_len -(tag_len + sizeof(srtcp_trailer_t)));
|
|
- if (*((unsigned char *) trailer) & SRTCP_E_BYTE_BIT) {
|
|
- enc_start = (uint32_t *)hdr + uint32s_in_rtcp_header;
|
|
+ e_bit_in_packet = (*((unsigned char *) trailer) & SRTCP_E_BYTE_BIT) == SRTCP_E_BYTE_BIT;
|
|
+ if (e_bit_in_packet != sec_serv_confidentiality) {
|
|
+ return err_status_cant_check;
|
|
+ }
|
|
+ if (sec_serv_confidentiality) {
|
|
+ enc_start = (uint32_t *)hdr + uint32s_in_rtcp_header;
|
|
} else {
|
|
enc_octet_len = 0;
|
|
enc_start = NULL; /* this indicates that there's no encryption */
|
|
diff --git a/google3/third_party/libsrtp/test/srtp_driver.c b/google3/third_party/libsrtp/test/srtp_driver.c
|
|
index f6a84f9..3c97072 100644
|
|
--- a/google3/third_party/libsrtp/test/srtp_driver.c
|
|
+++ b/google3/third_party/libsrtp/test/srtp_driver.c
|
|
@@ -1246,7 +1246,7 @@ srtp_create_big_policy(srtp_policy_t **list) {
|
|
* loop over policy list, mallocing a new list and copying values
|
|
* into it (and incrementing the SSRC value as we go along)
|
|
*/
|
|
- tmp = NULL;
|
|
+ tmp = p = NULL;
|
|
while (policy_array[i] != NULL) {
|
|
p = (srtp_policy_t*) malloc(sizeof(srtp_policy_t));
|
|
if (p == NULL)
|