Changeset ee84bdb


Ignore:
Timestamp:
2010-04-27T22:11:11Z (9 years ago)
Author:
Wilmer van der Gaast <wilmer@…>
Branches:
master
Children:
18dbb20
Parents:
288b215
Message:

The escaping, I fixed it for you. More expensive code this way and most of
the vars don't need escaping. But this shouldn't be so fragile anymore.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • lib/oauth.c

    r288b215 ree84bdb  
    101101        sha1_finish( &sha1, hash );
    102102       
    103         /* base64_encode it and we're done. */
    104         return base64_encode( hash, sha1_hash_size );
     103        /* base64_encode + HTTP escape it (both consumers
     104           need it that away) and we're done. */
     105        s = base64_encode( hash, sha1_hash_size );
     106        s = g_realloc( s, strlen( s ) * 3 + 1 );
     107        http_encode( s );
     108       
     109        return s;
    105110}
    106111
     
    108113{
    109114        unsigned char bytes[9];
    110         char *ret;
    111115       
    112116        random_bytes( bytes, sizeof( bytes ) );
    113         ret = base64_encode( bytes, sizeof( bytes ) );
    114         ret = g_realloc( ret, strlen( ret ) * 3 + 1 );
    115         http_encode( ret );
    116        
    117         return ret;
     117        return base64_encode( bytes, sizeof( bytes ) );
    118118}
    119119
     
    167167static void oauth_params_parse( GSList **params, char *in )
    168168{
    169         char *amp, *eq;
     169        char *amp, *eq, *s;
    170170       
    171171        while( in && *in )
     
    179179                        *amp = '\0';
    180180               
    181                 oauth_params_add( params, in, eq + 1 );
     181                s = g_strdup( eq + 1 );
     182                http_decode( s );
     183                oauth_params_add( params, in, s );
     184                g_free( s );
    182185               
    183186                *eq = '=';
     
    206209        for( l = params; l; l = l->next )
    207210        {
    208                 g_string_append( str, l->data );
     211                char *s, *eq;
     212               
     213                s = g_malloc( strlen( l->data ) * 3 + 1 );
     214                strcpy( s, l->data );
     215                if( ( eq = strchr( s, '=' ) ) )
     216                        http_encode( eq + 1 );
     217                g_string_append( str, s );
     218                g_free( s );
     219               
    209220                if( l->next )
    210221                        g_string_append_c( str, '&' );
     
    254265       
    255266        s = oauth_sign( "POST", url, params_s, NULL );
    256         s = g_realloc( s, strlen( s ) * 3 + 1 );
    257         http_encode( s );
    258        
    259267        post = g_strdup_printf( "%s&oauth_signature=%s", params_s, s );
    260268        g_free( params_s );
     
    390398        params_s = oauth_params_string( params );
    391399        sig = oauth_sign( method, url, params_s, token_secret );
     400        g_string_append_printf( ret, "oauth_signature=\"%s\"", sig );
    392401        g_free( params_s );
    393         sig = g_realloc( sig, strlen( sig ) * 3 + 1 );
    394         http_encode( sig );
    395        
    396         g_string_append_printf( ret, "oauth_signature=\"%s\"", sig );
    397402       
    398403err:
Note: See TracChangeset for help on using the changeset viewer.