On Sun, Feb 06, 2022 at 02:27:09PM -0800, Chad Fraleigh wrote:
> 
> On 2/5/2022 6:09 PM, lance.lmw...@gmail.com wrote:
> > On Sat, Feb 05, 2022 at 01:26:18PM -0800, Chad Fraleigh wrote:
> >> Since any [valid] value over 255 is impossible in the IPv4 protocol (the 
> >> TTL field is only 8-bits), it should always be capped at 255 (for 
> >> consistency) or return an invalid value error (the one I would suggest).
> >>
> > 
> > zhilizhao have submit a patch to limit the range of ttl from option. Do you 
> > want
> > to return an invalid error here still?
> 
> If it can never be called with an invalid value, not even programmatically if 
> someone links against the ffmpeg libs, then checking it is unneeded. But also 
> checking it to limit the unsigned char value would be redundant, so only the 
> value cast would be needed, i.e.:
> 
>    ttl = (unsigned char) mcastTTL;

Yes, checking is unneeded anymore, I'll remove it locally.

> 
> 
> If however, it could be called without being first limited, then returning an 
> error would be best to avoid silently having unexpected results. Also, 
> checking that it isn't negative should be done in that case. Not counting 
> pending patches, I only see udp_open() calls it, so if it's already bound in 
> there, no extra checks are needed.

Sure, the patch will be applied after the pending patches for limit anyway if
nobody have other comments.

> 
> Of course, these are only suggestions, since I'm a nobody. =)
> 
> 
> >> Despite VLC's reversed comment, using an int seems to be the exception to 
> >> the rule (i.e. only linux and windows seem to use it [as-documented]), 
> >> perhaps doing the unsigned char first and using the int as the fallback 
> >> would be better? It's not really just a BSD thing, unless you also count 
> >> LWIP and Solaris as BSD. Unless VLC's code history shows them doing it 
> >> this way at one time and swapping it (but forgetting the comment) to fix a 
> >> known bug?
> >>
> > 
> > I have blamed vlc code and sure the code doing it this way at one 
> > time(104938796a3). 
> > For the mismatch of code and comments, I prefer to code always as code were 
> > build 
> > and used by all kinds of system which vlc is supported already. 
> > 
> > As for use BSD, I prefer to count LWIP and Solaris into BSD category which 
> > using
> > rule of byte. If you still prefer to add them into comments, I'm OK also. 
> > 
> >>
> >> On 2/4/2022 9:28 PM, lance.lmw...@gmail.com wrote:
> >>> From: Limin Wang <lance.lmw...@gmail.com>
> >>>
> >>> Suggested by zhilizhao, vlc project has solved the compatibility by
> >>> the same way, so I borrowed the comments from vlc project.
> >>>
> >>> Fix #ticket9449
> >>>
> >>> Signed-off-by: Limin Wang <lance.lmw...@gmail.com>
> >>> ---
> >>>  libavformat/udp.c | 15 +++++++++++++--
> >>>  1 file changed, 13 insertions(+), 2 deletions(-)
> >>>
> >>> diff --git a/libavformat/udp.c b/libavformat/udp.c
> >>> index 3dc79eb..34488d6 100644
> >>> --- a/libavformat/udp.c
> >>> +++ b/libavformat/udp.c
> >>> @@ -164,6 +164,10 @@ static int udp_set_multicast_ttl(int sockfd, int 
> >>> mcastTTL,
> >>>  {
> >>>      int protocol, cmd;
> >>>  
> >>> +    /* There is some confusion in the world whether IP_MULTICAST_TTL
> >>> +     * takes a byte or an int as an argument.
> >>> +     * BSD seems to indicate byte so we are going with that and use
> >>> +     * int as a fallback to be safe */
> >>>      switch (addr->sa_family) {
> >>>  #ifdef IP_MULTICAST_TTL
> >>>          case AF_INET:
> >>> @@ -183,8 +187,15 @@ static int udp_set_multicast_ttl(int sockfd, int 
> >>> mcastTTL,
> >>>      }
> >>>  
> >>>      if (setsockopt(sockfd, protocol, cmd, &mcastTTL, sizeof(mcastTTL)) < 
> >>> 0) {
> >>> -        ff_log_net_error(logctx, AV_LOG_ERROR, "setsockopt");
> >>> -        return ff_neterrno();
> >>> +        /* BSD compatibility */
> >>> +        unsigned char ttl;
> >>> +
> >>> +        ff_log_net_error(logctx, AV_LOG_DEBUG, "setsockopt");
> >>> +        ttl = (unsigned char)(( mcastTTL > 255 ) ? 255 : mcastTTL);
> >>> +        if (setsockopt(sockfd, protocol, cmd, &ttl, sizeof(ttl)) < 0) {
> >>> +            ff_log_net_error(logctx, AV_LOG_ERROR, "setsockopt");
> >>> +            return ff_neterrno();
> >>> +        }
> >>>      }
> >>>  
> >>>      return 0;
> >> _______________________________________________
> >> ffmpeg-devel mailing list
> >> ffmpeg-devel@ffmpeg.org
> >> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> >>
> >> To unsubscribe, visit link above, or email
> >> ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".
> > 
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> 
> To unsubscribe, visit link above, or email
> ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

-- 
Thanks,
Limin Wang
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

Reply via email to