ssl_mail_client.c: silence warning, check base64_encode() status
Found with Clang's `scan-build` tool.
ssl_mail_client.c does a dead store by assigning the return value of
base64_encode() to `len` and not using the value. This causes
scan-build to issue a warning.
Instead of storing the return value into `len`, store it to `ret`, since
base64_encode() returns a status code, not a length. Also check if the
return value is nonzero and print an error; this silences scan-build.
diff --git a/programs/ssl/ssl_mail_client.c b/programs/ssl/ssl_mail_client.c
index 4f3124f..3f65d5a 100644
--- a/programs/ssl/ssl_mail_client.c
+++ b/programs/ssl/ssl_mail_client.c
@@ -719,8 +719,13 @@
fflush( stdout );
n = sizeof( buf );
- len = base64_encode( base, &n, (const unsigned char *) opt.user_name,
+ ret = base64_encode( base, &n, (const unsigned char *) opt.user_name,
strlen( opt.user_name ) );
+
+ if( ret != 0 ) {
+ printf( " failed\n ! base64_encode returned %d\n\n", ret );
+ goto exit;
+ }
len = sprintf( (char *) buf, "%s\r\n", base );
ret = write_ssl_and_get_response( &ssl, buf, len );
if( ret < 300 || ret > 399 )
@@ -734,8 +739,13 @@
printf( " > Write password to server: %s", opt.user_pwd );
fflush( stdout );
- len = base64_encode( base, &n, (const unsigned char *) opt.user_pwd,
+ ret = base64_encode( base, &n, (const unsigned char *) opt.user_pwd,
strlen( opt.user_pwd ) );
+
+ if( ret != 0 ) {
+ printf( " failed\n ! base64_encode returned %d\n\n", ret );
+ goto exit;
+ }
len = sprintf( (char *) buf, "%s\r\n", base );
ret = write_ssl_and_get_response( &ssl, buf, len );
if( ret < 200 || ret > 399 )