1diff --git a/google3/third_party/libsrtp/crypto/include/integers.h b/google3/third_party/libsrtp/crypto/include/integers.h
2index 7010efd..3515d13 100644
3--- a/google3/third_party/libsrtp/crypto/include/integers.h
4+++ b/google3/third_party/libsrtp/crypto/include/integers.h
5@@ -98,7 +98,6 @@ typedef unsigned short int	uint16_t;
6 typedef unsigned int		uint32_t;
7 #endif
8
9-
10 #ifdef NO_64BIT_MATH
11 typedef double uint64_t;
12 /* assert that sizeof(double) == 8 */
13diff --git a/google3/third_party/libsrtp/include/srtp.h b/google3/third_party/libsrtp/include/srtp.h
14index 7f17853..bbaac95 100644
15--- a/google3/third_party/libsrtp/include/srtp.h
16+++ b/google3/third_party/libsrtp/include/srtp.h
17@@ -50,10 +50,6 @@
18 extern "C" {
19 #endif
20
21-#ifdef _MSC_VER
22-#pragma pack(4)
23-#endif
24-
25 #include "crypto_kernel.h"
26
27 /**
28@@ -930,10 +926,6 @@ srtp_install_event_handler(srtp_event_handler_func_t func);
29 #define SRTCP_E_BYTE_BIT 0x80
30 #define SRTCP_INDEX_MASK 0x7fffffff
31
32-#ifdef _MSC_VER
33-#pragma pack()
34-#endif
35-
36 #ifdef __cplusplus
37 }
38 #endif
39diff --git a/google3/third_party/libsrtp/srtp/srtp.c b/google3/third_party/libsrtp/srtp/srtp.c
40index 6010dd4..3fc52ee 100644
41--- a/google3/third_party/libsrtp/srtp/srtp.c
42+++ b/google3/third_party/libsrtp/srtp/srtp.c
43@@ -1657,6 +1657,8 @@ srtp_unprotect_rtcp(srtp_t ctx, void *srtcp_hdr, int *pkt_octet_len) {
44   srtp_stream_ctx_t *stream;
45   int prefix_len;
46   uint32_t seq_num;
47+  int e_bit_in_packet;     /* whether the E-bit was found in the packet */
48+  int sec_serv_confidentiality; /* whether confidentiality was requested */
49
50   /* we assume the hdr is 32-bit aligned to start */
51   /*
52@@ -1694,7 +1696,10 @@ srtp_unprotect_rtcp(srtp_t ctx, void *srtcp_hdr, int *pkt_octet_len) {
53       return err_status_no_ctx;
54     }
55   }
56-
57+
58+  sec_serv_confidentiality = stream->rtcp_services == sec_serv_conf ||
59+      stream->rtcp_services == sec_serv_conf_and_auth;
60+
61   /* get tag length from stream context */
62   tag_len = auth_get_tag_length(stream->rtcp_auth);
63
64@@ -1714,8 +1719,12 @@ srtp_unprotect_rtcp(srtp_t ctx, void *srtcp_hdr, int *pkt_octet_len) {
65    */
66   trailer = (uint32_t *) ((char *) hdr +
67 		     *pkt_octet_len -(tag_len + sizeof(srtcp_trailer_t)));
68-  if (*((unsigned char *) trailer) & SRTCP_E_BYTE_BIT) {
69-    enc_start = (uint32_t *)hdr + uint32s_in_rtcp_header;
70+  e_bit_in_packet = (*((unsigned char *) trailer) & SRTCP_E_BYTE_BIT) == SRTCP_E_BYTE_BIT;
71+  if (e_bit_in_packet != sec_serv_confidentiality) {
72+    return err_status_cant_check;
73+  }
74+  if (sec_serv_confidentiality) {
75+    enc_start = (uint32_t *)hdr + uint32s_in_rtcp_header;
76   } else {
77     enc_octet_len = 0;
78     enc_start = NULL; /* this indicates that there's no encryption */
79diff --git a/google3/third_party/libsrtp/test/srtp_driver.c b/google3/third_party/libsrtp/test/srtp_driver.c
80index f6a84f9..3c97072 100644
81--- a/google3/third_party/libsrtp/test/srtp_driver.c
82+++ b/google3/third_party/libsrtp/test/srtp_driver.c
83@@ -1246,7 +1246,7 @@ srtp_create_big_policy(srtp_policy_t **list) {
84    * loop over policy list, mallocing a new list and copying values
85    * into it (and incrementing the SSRC value as we go along)
86    */
87-  tmp = NULL;
88+  tmp = p = NULL;
89   while (policy_array[i] != NULL) {
90     p  = (srtp_policy_t*) malloc(sizeof(srtp_policy_t));
91     if (p == NULL)
92