Ticket #5426: 5424-block256.patch

File 5424-block256.patch, 1.7 KB (added by cfpp2p, 9 years ago)
  • J:/C/5424-UDP-Tracker_CRASH_!!!-071813/svn-281/utils.c

    old new  
    861861  int err;
    862862  int port = 0;
    863863  int n;
     864  bool   udp_will_fail = false;
    864865  char * tmp;
    865866  char * pch;
    866867  size_t host_len;
     
    878879      pch += 3;
    879880      if ((n = strcspn (pch, ":/")))
    880881        {
     882            int       max_size_host_sub = 0;
     883            int       host_sub_start = 0;
     884            int       i;
     885
     886            // Ticket 5424 & 5426
     887            err = !protocol;
     888            if( !err )
     889            {
     890               if( !strcmp( protocol, "udp" ) ) {
     891                  if( n < 256 ) {
     892                  for( i=0; i<n; ++i ) {
     893                  // find next dot
     894                    if( pch[i] == 0x2E ) {
     895                        max_size_host_sub = MAX( max_size_host_sub, (i - host_sub_start));
     896                        host_sub_start = (i + 1);
     897                    }
     898                    if( max_size_host_sub > 63 ) break;
     899                  }
     900               if( i == n ) {
     901                 --i;
     902                 if( pch[i] != 0x2E ) max_size_host_sub = MAX( max_size_host_sub, (n - host_sub_start) );
     903               }
     904              if( max_size_host_sub > 63 ) udp_will_fail = true;
     905              }
     906              else udp_will_fail = true;
     907             }
     908            } // End Ticket 5424 & 5426
     909
    881910          const int havePort = pch[n] == ':';
    882911          host = pch;
    883912          host_len = n;
     
    894923        }
    895924    }
    896925
    897   err = !host || !path || !protocol;
     926  err = !host || !path || !protocol || udp_will_fail;
     927                                      // Ticket 5424 & 5426
    898928
    899929  if (!err && !port)
    900930    {