diff --git a/src/lib-sieve/ext-envelope.c b/src/lib-sieve/ext-envelope.c
index f39bd10ecc03613ca4d28a4bc2be60e1086b3b3b..0f45f5f4c202f462aea9e3f78bb326dee590acf5 100644
--- a/src/lib-sieve/ext-envelope.c
+++ b/src/lib-sieve/ext-envelope.c
@@ -408,7 +408,8 @@ static int sieve_envelope_address_list_next_string_item
 
 	if ( addr.local_part != NULL ) {
 		const char *addr_str = sieve_address_to_string(&addr);
-		*str_r = t_str_new_const(addr_str, strlen(addr_str));
+		if (str_r != NULL)
+			*str_r = t_str_new_const(addr_str, strlen(addr_str));
 	}
 
 	return 1;
diff --git a/src/lib-sieve/sieve-address.c b/src/lib-sieve/sieve-address.c
index 18e429d2f956f2d9a6132b2c893e06eb41259587..89eb4cca6bc147c489cd5a0c2fd06ccee9909635 100644
--- a/src/lib-sieve/sieve-address.c
+++ b/src/lib-sieve/sieve-address.c
@@ -144,7 +144,8 @@ static int sieve_header_address_list_next_string_item
 
 	if ( addr.local_part != NULL ) {
 		const char *addr_str = sieve_address_to_string(&addr);
-		*str_r = t_str_new_const(addr_str, strlen(addr_str));
+		if ( str_r != NULL )
+			*str_r = t_str_new_const(addr_str, strlen(addr_str));
 	}
 
 	return 1;
diff --git a/src/lib-sieve/sieve-validator.c b/src/lib-sieve/sieve-validator.c
index 9763f6252b24f232abc77411cd5687c453319aa0..375c76875d0aaf7f79d4fffc96803c183972b82a 100644
--- a/src/lib-sieve/sieve-validator.c
+++ b/src/lib-sieve/sieve-validator.c
@@ -546,11 +546,13 @@ bool sieve_validator_extension_load
 	struct sieve_validator_extension_reg *reg;
 
 	if ( ext->global && (valdtr->flags & SIEVE_COMPILE_FLAG_NOGLOBAL) != 0 ) {
-		sieve_argument_validate_error(valdtr, ext_arg,
-			"%s %s: failed to load Sieve capability `%s': "
-			"its use is restricted to global scripts",
-			sieve_command_identifier(cmd), sieve_command_type_name(cmd),
-			sieve_extension_name(ext));
+		if ( cmd != NULL && ext_arg != NULL ) {
+			sieve_argument_validate_error(valdtr, ext_arg,
+				"%s %s: failed to load Sieve capability `%s': "
+				"its use is restricted to global scripts",
+				sieve_command_identifier(cmd), sieve_command_type_name(cmd),
+				sieve_extension_name(ext));
+		}
 		return FALSE;
 	}
 
diff --git a/src/managesieve-login/client-authenticate.c b/src/managesieve-login/client-authenticate.c
index 7ebdd41183048bb594dee9fa90644cb9ff50bc53..d426fc78aac54ea0e283cbbf534c99b4ea9ad75d 100644
--- a/src/managesieve-login/client-authenticate.c
+++ b/src/managesieve-login/client-authenticate.c
@@ -138,6 +138,8 @@ static int managesieve_client_auth_read_response
 	uoff_t resp_size;
 	int ret;
 
+	*error_r = NULL;
+
 	if ( i_stream_read(client->input) == -1 ) {
 		/* disconnected */
 		client_destroy(client, "Disconnected");
@@ -161,7 +163,6 @@ static int managesieve_client_auth_read_response
 				client_send_bye(client, error);
 				client_destroy(client, t_strconcat
 					("Disconnected: parse error during auth: ", error, NULL));
-				*error_r = NULL;
 			} else {
 				*error_r = error;
 			}
@@ -210,7 +211,6 @@ static int managesieve_client_auth_read_response
 
 		if (str_len(client->auth_response) + size > LOGIN_MAX_AUTH_BUF_SIZE) {
 			client_destroy(client, "Authentication response too large");
-			*error_r = NULL;
 			return -1;
 		}
 
@@ -228,7 +228,6 @@ static int managesieve_client_auth_read_response
 					client_send_bye(client, error);
 					client_destroy(client, t_strconcat
 						("Disconnected: parse error during auth: ", error, NULL));
-					*error_r = NULL;
 				} else {
 					msieve_client->skip_line = TRUE;
 					*error_r = t_strconcat
diff --git a/src/testsuite/testsuite-objects.c b/src/testsuite/testsuite-objects.c
index 8165c94383ddaceaa6219daae5acde9d0874bd17..fe6d588209470638b6b60e8eb798866dfb3b0caf 100644
--- a/src/testsuite/testsuite-objects.c
+++ b/src/testsuite/testsuite-objects.c
@@ -135,7 +135,7 @@ bool testsuite_object_read
 		return FALSE;
 
 	tobj->def = (const struct testsuite_object_def *) tobj->object.def;
-
+	i_assert(tobj->def != NULL);
 	return TRUE;
 }
 
@@ -147,7 +147,7 @@ bool testsuite_object_read_member
 		return FALSE;
 
 	*member_id_r = -1;
-	if ( tobj->def != NULL && tobj->def->get_member_id != NULL ) {
+	if ( tobj->def->get_member_id != NULL ) {
 		if ( !sieve_binary_read_code(sblock, address, member_id_r) )
 			return FALSE;
 	}
diff --git a/src/testsuite/testsuite.c b/src/testsuite/testsuite.c
index ab2911a94d2e95dcea0b188f726032918157e10a..921256496dd38ed0755dfea2f286c0b2ea4bd151 100644
--- a/src/testsuite/testsuite.c
+++ b/src/testsuite/testsuite.c
@@ -215,6 +215,7 @@ int main(int argc, char **argv)
 		if ( tracestream != NULL )
 			o_stream_unref(&tracestream);
 
+		testsuite_scriptenv = NULL;
 	} else {
 		testsuite_testcase_fail("failed to compile testcase script");
 	}