18.08.2021 19:23, Ross Finlayson пишет:
Thanks again for the report.  This was not a serious issue, but I’ve just 
released a new version (2021.08.18) of the code that should make ‘valgrind’ 
happy.


Ross Finlayson
Live Networks, Inc.
http://www.live555.com/


_______________________________________________
live-devel mailing list
live-devel@lists.live555.com
http://lists.live555.com/mailman/listinfo/live-devel

Very thanks for fast answers and fixes!

I downloaded and build new version again and got last uninitialised value issue (my mistake - it seems i omitted this one last time)

==187844== Thread 23:
==187844== Conditional jump or move depends on uninitialised value(s)
==187844==    at 0x6509838: Groupsock::wasLoopedBackFromUs(UsageEnvironment&, sockaddr_storage const&) (Groupsock.cpp:319) ==187844==    by 0x647AFD2: RTCPInstance::incomingReportHandler1() (RTCP.cpp:460) ==187844==    by 0x647A028: SocketDescriptor::tcpReadHandler1(int) (RTPInterface.cpp:589) ==187844==    by 0x647A0CA: SocketDescriptor::tcpReadHandler(SocketDescriptor*, int) (RTPInterface.cpp:493) ==187844==    by 0x63BB33A: BasicTaskScheduler::SingleStep(unsigned int) (BasicTaskScheduler.cpp:171) ==187844==    by 0x63BA452: BasicTaskScheduler0::doEventLoop(char volatile*) (BasicTaskScheduler0.cpp:80) ==187844==    by 0x3AC081: video_network::rtsp_player::run() (rtsp_player.cpp:591) ==187844==    by 0x3B5361: void std::__invoke_impl<void, void (video_network::rtsp_player::*)(), video_network::rtsp_player*>(std::__invoke_memfun_deref, void (video_network::rtsp_player::*&&)(), video_network::rtsp_player*&&) (invoke.h:73) ==187844==    by 0x3B5290: std::__invoke_result<void (video_network::rtsp_player::*)(), video_network::rtsp_player*>::type std::__invoke<void (video_network::rtsp_player::*)(), video_network::rtsp_player*>(void (video_network::rtsp_player::*&&)(), video_network::rtsp_player*&&) (invoke.h:95) ==187844==    by 0x3B51F0: void std::thread::_Invoker<std::tuple<void (video_network::rtsp_player::*)(), video_network::rtsp_player*> >::_M_invoke<0ul, 1ul>(std::_Index_tuple<0ul, 1ul>) (thread:264) ==187844==    by 0x3B51A5: std::thread::_Invoker<std::tuple<void (video_network::rtsp_player::*)(), video_network::rtsp_player*> >::operator()() (thread:271) ==187844==    by 0x3B5027: std::thread::_State_impl<std::thread::_Invoker<std::tuple<void (video_network::rtsp_player::*)(), video_network::rtsp_player*> > >::_M_run() (thread:215)
==187844==

Now uninitialised value in RTCP.cpp:460

void RTCPInstance::incomingReportHandler1() {
  do {
    if (fNumBytesAlreadyRead >= maxRTCPPacketSize) {
      envir() << "RTCPInstance error: Hit limit when reading incoming packet over TCP. (fNumBytesAlreadyRead ("           << fNumBytesAlreadyRead << ") >= maxRTCPPacketSize (" << maxRTCPPacketSize           << ")).  The remote endpoint is using a buggy implementation of RTP/RTCP-over-TCP.  Please upgrade it!\n";
      break;
    }

    unsigned numBytesRead;
    struct sockaddr_storage fromAddress;
    int tcpSocketNum;
    unsigned char tcpStreamChannelId;
    Boolean packetReadWasIncomplete;
    Boolean readResult
      = fRTCPInterface.handleRead(&fInBuf[fNumBytesAlreadyRead], maxRTCPPacketSize - fNumBytesAlreadyRead,
                  numBytesRead, fromAddress,
                  tcpSocketNum, tcpStreamChannelId,
                  packetReadWasIncomplete);

    unsigned packetSize = 0;
    if (packetReadWasIncomplete) {
      fNumBytesAlreadyRead += numBytesRead;
      return; // more reads are needed to get the entire packet
    } else { // normal case: We've read the entire packet
      packetSize = fNumBytesAlreadyRead + numBytesRead;
      fNumBytesAlreadyRead = 0; // for next time
    }
    if (!readResult) break;

    // Ignore the packet if it was looped-back from ourself:
    Boolean packetWasFromOurHost = False;
    if (RTCPgs()->wasLoopedBackFromUs(envir(), fromAddress)) {
      packetWasFromOurHost = True;
      // However, we still want to handle incoming RTCP packets from
      // *other processes* on the same machine.  To distinguish this
      // case from a true loop-back, check whether we've just sent a
      // packet of the same size.  (This check isn't perfect, but it seems
      // to be the best we can do.)
      if (fHaveJustSentPacket && fLastPacketSentSize == packetSize) {
    // This is a true loop-back:
    fHaveJustSentPacket = False;
    break; // ignore this packet
      }
    }

struct sockaddr_storage fromAddress; is uninitialized here

So in Groupsock.cpp:319 it's used

Boolean Groupsock::wasLoopedBackFromUs(UsageEnvironment& env,
                       struct sockaddr_storage const& fromAddressAndPort) {
  if (fromAddressAndPort.ss_family != AF_INET) return False; // later update for IPv6

  struct sockaddr_in const& fromAddressAndPort4 = (struct sockaddr_in const&)fromAddressAndPort;
  if (fromAddressAndPort4.sin_addr.s_addr == ourIPv4Address(env) ||
      fromAddressAndPort4.sin_addr.s_addr == 0x7F000001/*127.0.0.1*/) {
    if (portNum(fromAddressAndPort) == sourcePortNum()) {
#ifdef DEBUG_LOOPBACK_CHECKING
      if (DebugLevel >= 3) {
    env() << *this << ": got looped-back packet\n";
      }
#endif
      return True;
    }
  }

  return False;
}

This line:

if (fromAddressAndPort.ss_family != AF_INET) return False;

--
С уважением, Костромин Дмитрий Андреевич,
руководитель подразделения ЗАО НВП "Болид"
г.Орехово-Зуево

_______________________________________________
live-devel mailing list
live-devel@lists.live555.com
http://lists.live555.com/mailman/listinfo/live-devel
  • [Live-devel] Valgrind... Костромин Дмитрий Андреевич
    • Re: [Live-devel]... Ross Finlayson
      • Re: [Live-de... Ba Jinsheng
        • Re: [Liv... Ulrich Teichert
          • Re: ... Ross Finlayson
            • ... Костромин Дмитрий Андреевич
              • ... Костромин Дмитрий Андреевич
                • ... Ross Finlayson
                • ... Warren Young
                • ... Ulrich Teichert
                • ... Костромин Дмитрий Андреевич
                • ... Ross Finlayson
                • ... Костромин Дмитрий Андреевич
                • ... Ross Finlayson
                • ... Костромин Дмитрий Андреевич
                • ... Ross Finlayson
                • ... Ross Finlayson
                • ... Костромин Дмитрий Андреевич

Reply via email to