Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • lib/misc.c

    r0e788f5 re252d8c  
    420420void random_bytes( unsigned char *buf, int count )
    421421{
    422 #ifndef _WIN32
    423422        static int use_dev = -1;
    424423       
     
    470469       
    471470        if( !use_dev )
    472 #endif
    473471        {
    474472                int i;
     
    525523        ns_msg nsh;
    526524        ns_rr rr;
    527         int i, n, len, size;
     525        int n, len, size;
    528526       
    529527        g_snprintf( name, sizeof( name ), "_%s._%s.%s", service, protocol, domain );
     
    538536        while( ns_parserr( &nsh, ns_s_an, n, &rr ) == 0 )
    539537        {
    540                 size = ns_rr_rdlen( rr );
     538                char name[NS_MAXDNAME];
     539
     540                if( ns_rr_rdlen( rr ) < 7)
     541                    break;
     542
    541543                buf = ns_rr_rdata( rr );
    542544               
    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 )
     545                if( dn_expand(querybuf, querybuf + size, &buf[6], name, NS_MAXDNAME) == -1 )
    548546                        break;
     547
     548                len = strlen(name) + 1;
    549549               
    550550                reply = g_malloc( sizeof( struct ns_srv_reply ) + 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                 }
     551                memcpy( reply->name, name, len );
    561552               
    562553                reply->prio = ( buf[0] << 8 ) | buf[1];
     
    682673   white\ space in 'various ways'. Returns a NULL-terminated static
    683674   char** so watch out with nested use! Definitely not thread-safe. */
    684 char **split_command_parts( char *command )
     675char **split_command_parts( char *command, int limit )
    685676{
    686677        static char *cmd[IRC_MAX_ARGS+1];
     
    692683        k = 1;
    693684        for( s = command; *s && k < IRC_MAX_ARGS; s ++ )
     685        {
    694686                if( *s == ' ' && !q )
    695687                {
    696688                        *s = 0;
    697689                        while( *++s == ' ' );
    698                         if( *s == '"' || *s == '\'' )
     690                        if( k != limit && (*s == '"' || *s == '\'') )
    699691                        {
    700692                                q = *s;
     
    704696                        {
    705697                                cmd[k++] = s;
     698                                if (limit && k > limit) {
     699                                        break;
     700                                }
    706701                                s --;
    707702                        }
     
    722717                        q = *s = 0;
    723718                }
     719        }
    724720       
    725721        /* Full zero-padding for easier argc checking. */
Note: See TracChangeset for help on using the changeset viewer.