summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNanang Izzuddin <nanang@teluu.com>2010-09-28 08:26:51 +0000
committerNanang Izzuddin <nanang@teluu.com>2010-09-28 08:26:51 +0000
commit042fb984d0a90fb0ab119f95ae8b275fb588a474 (patch)
treeeb4a44bf8d700c63ce212cd133d121547c745195
parentc31e3c462b475902964707fe5a75df33b34474d7 (diff)
Fix #1135: added RTP padding checks and RTP payload length adjustment according to padding length.
Payload padding in outgoing RTP investigation results: - the RTP does not specify RTP payload alignment. - most codecs also do not specify RTP payload alignment, usually only octet-alignment is specified and this seems to be done. - SRTP, RFC3711 states: - None of the pre-defined SRTP encryption transforms uses any padding; for these, the RTP and SRTP payload sizes match exactly. - Message authentication codes define their own padding. - Encryption transforms that use padding are vulnerable to subtle attacks, especially when message authentication is not used. So, currently payload padding in outgoing RTP is not necessary. git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@3325 74dad513-b988-da41-8d7b-12977e46ad98
-rw-r--r--pjmedia/src/pjmedia/rtp.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/pjmedia/src/pjmedia/rtp.c b/pjmedia/src/pjmedia/rtp.c
index f2a66cd3..4afe6c71 100644
--- a/pjmedia/src/pjmedia/rtp.c
+++ b/pjmedia/src/pjmedia/rtp.c
@@ -180,6 +180,15 @@ PJ_DEF(pj_status_t) pjmedia_rtp_decode_rtp( pjmedia_rtp_session *ses,
/* Find and set payload. */
*payload = ((pj_uint8_t*)pkt) + offset;
*payloadlen = pkt_len - offset;
+
+ /* Remove payload padding if any */
+ if ((*hdr)->p && *payloadlen > 0) {
+ pj_uint8_t pad_len;
+
+ pad_len = ((pj_uint8_t*)(*payload))[*payloadlen - 1];
+ if (pad_len <= *payloadlen)
+ *payloadlen -= pad_len;
+ }
return PJ_SUCCESS;
}