From a36165b9653b3c6d083883d703c4cb0c0004c172 Mon Sep 17 00:00:00 2001 From: Scott Hannahs Date: Fri, 16 Feb 2024 13:36:23 -0500 Subject: [PATCH 1/4] Moved redundant free call --- retr.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/retr.c b/retr.c index 2f8aaf2..eecdcd4 100644 --- a/retr.c +++ b/retr.c @@ -548,12 +548,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; } @@ -568,6 +567,7 @@ retr_applefile( SNET *sn, char *pathdesc, char *path, char *temppath, close( dfd ); error1: unlink( temppath ); + EVP_MD_CTX_free(mdctx); return( returnval ); } From 296c7074ae3eb9fa8b4cf865b70c46515e0d71c6 Mon Sep 17 00:00:00 2001 From: Scott Hannahs Date: Tue, 20 Feb 2024 13:20:11 -0500 Subject: [PATCH 2/4] fixed reference to md_value pointer --- retr.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/retr.c b/retr.c index 88d2ed4..961d3e0 100644 --- a/retr.c +++ b/retr.c @@ -554,7 +554,7 @@ retr_applefile( SNET *sn, char *pathdesc, char *path, char *temppath, if ( cksum ) { EVP_DigestFinal( mdctx, md_value, &md_len ); - base64_e( ( unsigned 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 in transcript does not match " "checksum from server\n", linenum ); From 4e51af21de5c5ff6ba44bdacef40132b2947b067 Mon Sep 17 00:00:00 2001 From: Scott Hannahs Date: Wed, 21 Feb 2024 11:51:10 -0500 Subject: [PATCH 3/4] Again found regressions with memory leaks and double free issues. --- retr.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/retr.c b/retr.c index 961d3e0..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 ); } From b732491075b7663a469ca78ba119f1b01caae22e Mon Sep 17 00:00:00 2001 From: Scott Hannahs Date: Wed, 21 Feb 2024 14:34:15 -0500 Subject: [PATCH 4/4] Still more necessary free statements and style corrections --- stor.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) 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 ); }