Cleaned up location of init and free for some programs to prevent memory
leaks on incorrect arguments
diff --git a/programs/test/ssl_test.c b/programs/test/ssl_test.c
index 04adf29..3e38e66 100644
--- a/programs/test/ssl_test.c
+++ b/programs/test/ssl_test.c
@@ -172,7 +172,11 @@
 
     ret = 1;
 
+    memset( &ssl, 0, sizeof(ssl_context) );
     entropy_init( &entropy );
+    memset( &srvcert, 0, sizeof( x509_cert ) );
+    memset( &rsa, 0, sizeof( rsa_context ) );
+
     if( ( ret = ctr_drbg_init( &ctr_drbg, entropy_func, &entropy,
                                (const unsigned char *) pers,
                                strlen( pers ) ) ) != 0 )
@@ -186,9 +190,6 @@
     memset( read_state, 0, sizeof( read_state ) );
     memset( write_state, 0, sizeof( write_state ) );
 
-    memset( &srvcert, 0, sizeof( x509_cert ) );
-    memset( &rsa, 0, sizeof( rsa_context ) );
-
     if( opt->opmode == OPMODE_CLIENT )
     {
         if( ( ret = net_connect( &client_fd, opt->server_name,
@@ -201,7 +202,7 @@
         if( ( ret = ssl_init( &ssl ) ) != 0 )
         {
             printf( "  ! ssl_init returned %d\n\n", ret );
-            return( ret );
+            goto exit;
         }
 
         ssl_set_endpoint( &ssl, SSL_IS_CLIENT );
@@ -408,7 +409,9 @@
     x509_free( &srvcert );
     rsa_free( &rsa );
     ssl_free( &ssl );
-    net_close( client_fd );
+
+    if( client_fd != -1 )
+        net_close( client_fd );
 
     return( ret );
 }