rtpstats: fix unsigned integer comparisons.
authorMathieu Duponchelle <mathieu.duponchelle@opencreed.com>
Tue, 8 Aug 2017 11:11:58 +0000 (13:11 +0200)
committerMathieu Duponchelle <mathieu.duponchelle@opencreed.com>
Fri, 11 Aug 2017 11:29:24 +0000 (13:29 +0200)
Callers of the API (rtpsource, rtpjitterbuffer) pass clock_rate
as a signed integer, and the comparison "<= 0" is used against
it, leading me to think the intention was to have the field
be typed as gint32, not guint32.

This led to situations where we could call scale_int with
a MAX_UINT32 (-1) guint32 as the denom, thus raising an
assertion.

https://bugzilla.gnome.org/show_bug.cgi?id=785991

gst/rtpmanager/rtpstats.c
gst/rtpmanager/rtpstats.h

index cc25dbf..73bd189 100644 (file)
@@ -22,7 +22,7 @@
 #include "rtpstats.h"
 
 void
-gst_rtp_packet_rate_ctx_reset (RTPPacketRateCtx * ctx, guint32 clock_rate)
+gst_rtp_packet_rate_ctx_reset (RTPPacketRateCtx * ctx, gint32 clock_rate)
 {
   ctx->clock_rate = clock_rate;
   ctx->probed = FALSE;
@@ -36,7 +36,7 @@ gst_rtp_packet_rate_ctx_update (RTPPacketRateCtx * ctx, guint16 seqnum,
 {
   guint64 new_ts, diff_ts;
   gint diff_seqnum;
-  guint32 new_packet_rate;
+  gint32 new_packet_rate;
 
   if (ctx->clock_rate <= 0) {
     return ctx->avg_packet_rate;
index eb164de..b0fbddb 100644 (file)
@@ -207,13 +207,13 @@ typedef struct {
  */
 typedef struct {
   gboolean probed;
-  gint clock_rate;
+  gint32 clock_rate;
   guint16 last_seqnum;
   guint64 last_ts;
   guint32 avg_packet_rate;
 } RTPPacketRateCtx;
 
-void gst_rtp_packet_rate_ctx_reset (RTPPacketRateCtx * ctx, guint32 clock_rate);
+void gst_rtp_packet_rate_ctx_reset (RTPPacketRateCtx * ctx, gint32 clock_rate);
 guint32 gst_rtp_packet_rate_ctx_update (RTPPacketRateCtx *ctx, guint16 seqnum, guint32 ts);
 guint32 gst_rtp_packet_rate_ctx_get (RTPPacketRateCtx *ctx);
 guint32 gst_rtp_packet_rate_ctx_get_max_dropout (RTPPacketRateCtx *ctx, gint32 time_ms);