Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • lib/misc.c

    re252d8c r0e788f5  
    420420void random_bytes( unsigned char *buf, int count )
    421421{
     422#ifndef _WIN32
    422423        static int use_dev = -1;
    423424       
     
    469470       
    470471        if( !use_dev )
     472#endif
    471473        {
    472474                int i;
     
    523525        ns_msg nsh;
    524526        ns_rr rr;
    525         int n, len, size;
     527        int i, n, len, size;
    526528       
    527529        g_snprintf( name, sizeof( name ), "_%s._%s.%s", service, protocol, domain );
     
    536538        while( ns_parserr( &nsh, ns_s_an, n, &rr ) == 0 )
    537539        {
    538                 char name[NS_MAXDNAME];
    539 
    540                 if( ns_rr_rdlen( rr ) < 7)
    541                     break;
    542 
     540                size = ns_rr_rdlen( rr );
    543541                buf = ns_rr_rdata( rr );
    544542               
    545                 if( dn_expand(querybuf, querybuf + size, &buf[6], name, NS_MAXDNAME) == -1 )
     543                len = 0;
     544                for( i = 6; i < size && buf[i]; i += buf[i] + 1 )
     545                        len += buf[i] + 1;
     546               
     547                if( i > size )
    546548                        break;
    547 
    548                 len = strlen(name) + 1;
    549549               
    550550                reply = g_malloc( sizeof( struct ns_srv_reply ) + len );
    551                 memcpy( reply->name, name, len );
     551                memcpy( reply->name, buf + 7, len );
     552               
     553                for( i = buf[6]; i < len && buf[7+i]; i += buf[7+i] + 1 )
     554                        reply->name[i] = '.';
     555               
     556                if( i > len )
     557                {
     558                        g_free( reply );
     559                        break;
     560                }
    552561               
    553562                reply->prio = ( buf[0] << 8 ) | buf[1];
     
    673682   white\ space in 'various ways'. Returns a NULL-terminated static
    674683   char** so watch out with nested use! Definitely not thread-safe. */
    675 char **split_command_parts( char *command, int limit )
     684char **split_command_parts( char *command )
    676685{
    677686        static char *cmd[IRC_MAX_ARGS+1];
     
    683692        k = 1;
    684693        for( s = command; *s && k < IRC_MAX_ARGS; s ++ )
    685         {
    686694                if( *s == ' ' && !q )
    687695                {
    688696                        *s = 0;
    689697                        while( *++s == ' ' );
    690                         if( k != limit && (*s == '"' || *s == '\'') )
     698                        if( *s == '"' || *s == '\'' )
    691699                        {
    692700                                q = *s;
     
    696704                        {
    697705                                cmd[k++] = s;
    698                                 if (limit && k > limit) {
    699                                         break;
    700                                 }
    701706                                s --;
    702707                        }
     
    717722                        q = *s = 0;
    718723                }
    719         }
    720724       
    721725        /* Full zero-padding for easier argc checking. */
Note: See TracChangeset for help on using the changeset viewer.