]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
res/res_rtp_asterisk: Fix crash in debug from RTCP reports without report block
authorMatthew Jordan <mjordan@digium.com>
Mon, 16 Feb 2015 21:29:23 +0000 (21:29 +0000)
committerMatthew Jordan <mjordan@digium.com>
Mon, 16 Feb 2015 21:29:23 +0000 (21:29 +0000)
When RTCP debugging was enabled, an RTCP report without a report block would
cause a crash. This was due to the verbose output not checking to see if the
report_block pointer was NULl before dereferencing it.

This patch adds the necessary check to prevent printing any verbose output
if the far side hasn't provided us the information they should have.

ASTERISK-24791 #close
Reported by: JoshE
Tested by: JoshE

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/13@431879 65c4cc65-6c06-0410-ace0-fbb531ad65f3

res/res_rtp_asterisk.c

index ef585b0d4a179b247085e018e019de220cfbc4f6..8f9dfeed19466ce70b302a125652f913260856cd 100644 (file)
@@ -3056,14 +3056,16 @@ static int ast_rtcp_write_report(struct ast_rtp_instance *instance, int sr)
                        ast_verbose("  Sent packets: %u\n", rtcp_report->sender_information.packet_count);
                        ast_verbose("  Sent octets: %u\n", rtcp_report->sender_information.octet_count);
                }
-               ast_verbose("  Report block:\n");
-               ast_verbose("    Their SSRC: %u\n", report_block->source_ssrc);
-               ast_verbose("    Fraction lost: %d\n", report_block->lost_count.fraction);
-               ast_verbose("    Cumulative loss: %u\n", report_block->lost_count.packets);
-               ast_verbose("    Highest seq no: %u\n", report_block->highest_seq_no);
-               ast_verbose("    IA jitter: %.4f\n", (double)report_block->ia_jitter / rate);
-               ast_verbose("    Their last SR: %u\n", report_block->lsr);
-               ast_verbose("    DLSR: %4.4f (sec)\n\n", (double)(report_block->dlsr / 65536.0));
+               if (report_block) {
+                       ast_verbose("  Report block:\n");
+                       ast_verbose("    Their SSRC: %u\n", report_block->source_ssrc);
+                       ast_verbose("    Fraction lost: %d\n", report_block->lost_count.fraction);
+                       ast_verbose("    Cumulative loss: %u\n", report_block->lost_count.packets);
+                       ast_verbose("    Highest seq no: %u\n", report_block->highest_seq_no);
+                       ast_verbose("    IA jitter: %.4f\n", (double)report_block->ia_jitter / rate);
+                       ast_verbose("    Their last SR: %u\n", report_block->lsr);
+                       ast_verbose("    DLSR: %4.4f (sec)\n\n", (double)(report_block->dlsr / 65536.0));
+               }
        }
 
        ast_rtp_instance_get_local_address(instance, &local_address);