diff --git a/retr.c b/retr.c index 0ddacc6..c690bfa 100644 --- a/retr.c +++ b/retr.c @@ -108,6 +108,7 @@ retr( SNET *sn, char *pathdesc, char *path, char *temppath, mode_t tempmode, if ( *line != '2' ) { fprintf( stderr, "%s\n", line ); + EVP_MD_CTX_free( mdctx ); return( 1 ); } @@ -210,7 +211,6 @@ retr( SNET *sn, char *pathdesc, char *path, char *temppath, mode_t tempmode, if ( cksum ) { EVP_DigestFinal( mdctx, md_value, &md_len ); base64_e( md_value, md_len, cksum_b64 ); - EVP_MD_CTX_free(mdctx); if ( strcmp( trancksum, cksum_b64 ) != 0 ) { fprintf( stderr, "line %d: checksum in transcript does not match " "checksum from server\n", linenum ); @@ -226,6 +226,7 @@ retr( SNET *sn, char *pathdesc, char *path, char *temppath, mode_t tempmode, close( fd ); error1: unlink( temppath ); + EVP_MD_CTX_free(mdctx); return( returnval ); } @@ -554,12 +555,11 @@ retr_applefile( SNET *sn, char *pathdesc, char *path, char *temppath, if ( cksum ) { EVP_DigestFinal( mdctx, md_value, &md_len ); - base64_e(( char*)&md_value, md_len, cksum_b64 ); - EVP_MD_CTX_free(mdctx); + base64_e( ( unsigned char * ) md_value, md_len, cksum_b64 ); if ( strcmp( trancksum, cksum_b64 ) != 0 ) { fprintf( stderr, "line %d: checksum in transcript does not match " "checksum from server\n", linenum ); - fprintf( stderr, "%s\n", pathdesc ); + fprintf( stderr, "%s\n", pathdesc ); returnval = 1; goto error1; } @@ -574,6 +574,7 @@ retr_applefile( SNET *sn, char *pathdesc, char *path, char *temppath, close( dfd ); error1: unlink( temppath ); + EVP_MD_CTX_free(mdctx); return( returnval ); } diff --git a/stor.c b/stor.c index b1db43a..67f9340 100644 --- a/stor.c +++ b/stor.c @@ -198,6 +198,7 @@ stor_file( SNET *sn, char *pathdesc, char *path, off_t transize, if ( snet_write( sn, buf, rr, &tv ) != rr ) { fprintf( stderr, "stor_file %s failed: %s\n", pathdesc, strerror( errno )); + EVP_MD_CTX_free( mdctx ); return( -1 ); } size -= rr; @@ -227,6 +228,7 @@ stor_file( SNET *sn, char *pathdesc, char *path, off_t transize, if ( snet_writef( sn, ".\r\n" ) < 0 ) { fprintf( stderr, "stor_file %s failed: %s\n", pathdesc, strerror( errno )); + EVP_MD_CTX_free( mdctx ); return( -1 ); } if ( verbose ) fputs( "\n>>> .\n", stdout ); @@ -239,8 +241,7 @@ stor_file( SNET *sn, char *pathdesc, char *path, off_t transize, /* cksum data sent */ if ( cksum ) { EVP_DigestFinal( mdctx, md_value, &md_len ); - base64_e( md_value, md_len, cksum_b64 ); - EVP_MD_CTX_free(mdctx); + base64_e( ( unsigned char * ) md_value, md_len, cksum_b64 ); if ( strcmp( trancksum, cksum_b64 ) != 0 ) { fprintf( stderr, "line %d: checksum listed in transcript wrong\n", linenum ); @@ -249,6 +250,7 @@ stor_file( SNET *sn, char *pathdesc, char *path, off_t transize, } if ( !quiet && !showprogress ) printf( "%s: stored\n", path ); + EVP_MD_CTX_free( mdctx ); return( 0 ); } @@ -305,6 +307,7 @@ stor_applefile( SNET *sn, char *pathdesc, char *path, off_t transize, if ( snprintf( rsrc_path, MAXPATHLEN, "%s%s", path, _PATH_RSRCFORKSPEC ) >= MAXPATHLEN ) { errno = ENAMETOOLONG; + EVP_MD_CTX_free( mdctx ); return( -1 ); } if (( rfd = open( rsrc_path, O_RDONLY )) < 0 ) { @@ -419,6 +422,7 @@ stor_applefile( SNET *sn, char *pathdesc, char *path, off_t transize, if ( snet_write( sn, buf, rc, &tv ) != rc ) { fprintf( stderr, "stor_applefile %s failed: %s\n", pathdesc, strerror( errno )); + EVP_MD_CTX_free( mdctx ); return( -1 ); } size -= rc; @@ -471,19 +475,16 @@ stor_applefile( SNET *sn, char *pathdesc, char *path, off_t transize, /* cksum data sent */ if ( cksum ) { EVP_DigestFinal( mdctx, md_value, &md_len ); - base64_e( ( char*)&md_value, md_len, cksum_b64 ); + base64_e( ( unsigned char * ) md_value, md_len, cksum_b64 ); if ( strcmp( trancksum, cksum_b64 ) != 0 ) { fprintf( stderr, "line %d: checksum listed in transcript wrong\n", linenum ); - if ( ! force ) { - EVP_MD_CTX_free(mdctx); - exit( 2 ); - } + if ( ! force ) exit( 2 ); } } - EVP_MD_CTX_free( mdctx ); if ( !quiet && !showprogress ) printf( "%s: stored\n", path ); + EVP_MD_CTX_free( mdctx ); return( 0 ); }