# HG changeset patch # User reimar # Date 1145021858 0 # Node ID 16f2bcd5d1484f0e8a2f389cca4b9174e11a67f7 # Parent 937c496ed2e89b07e7eef78560f458563fdabb2f free memory on error in http_add_basic_authentication diff -r 937c496ed2e8 -r 16f2bcd5d148 libmpdemux/http.c --- a/libmpdemux/http.c Fri Apr 14 13:27:55 2006 +0000 +++ b/libmpdemux/http.c Fri Apr 14 13:37:38 2006 +0000 @@ -585,8 +585,9 @@ int http_add_basic_authentication( HTTP_header_t *http_hdr, const char *username, const char *password ) { - char *auth, *usr_pass, *b64_usr_pass; + char *auth = NULL, *usr_pass = NULL, *b64_usr_pass = NULL; int encoded_len, pass_len=0, out_len; + int res = -1; if( http_hdr==NULL || username==NULL ) return -1; if( password!=NULL ) { @@ -596,7 +597,7 @@ usr_pass = (char*)malloc(strlen(username)+pass_len+2); if( usr_pass==NULL ) { mp_msg(MSGT_NETWORK,MSGL_FATAL,"Memory allocation failed\n"); - return -1; + goto out; } sprintf( usr_pass, "%s:%s", username, (password==NULL)?"":password ); @@ -606,13 +607,13 @@ b64_usr_pass = (char*)malloc(encoded_len); if( b64_usr_pass==NULL ) { mp_msg(MSGT_NETWORK,MSGL_FATAL,"Memory allocation failed\n"); - return -1; + goto out; } out_len = base64_encode( usr_pass, strlen(usr_pass), b64_usr_pass, encoded_len); if( out_len<0 ) { mp_msg(MSGT_NETWORK,MSGL_FATAL,"Base64 out overflow\n"); - return -1; + goto out; } b64_usr_pass[out_len]='\0'; @@ -620,17 +621,19 @@ auth = (char*)malloc(encoded_len+22); if( auth==NULL ) { mp_msg(MSGT_NETWORK,MSGL_FATAL,"Memory allocation failed\n"); - return -1; + goto out; } sprintf( auth, "Authorization: Basic %s", b64_usr_pass); http_set_field( http_hdr, auth ); + res = 0; +out: free( usr_pass ); free( b64_usr_pass ); free( auth ); - return 0; + return res; } void