summaryrefslogtreecommitdiffstats
path: root/libssh/auth.c
diff options
context:
space:
mode:
Diffstat (limited to 'libssh/auth.c')
-rw-r--r--libssh/auth.c49
1 files changed, 27 insertions, 22 deletions
diff --git a/libssh/auth.c b/libssh/auth.c
index f2e449f..65badc6 100644
--- a/libssh/auth.c
+++ b/libssh/auth.c
@@ -938,30 +938,35 @@ static struct ssh_kbdint *kbdint_new(void) {
}
-static void kbdint_free(struct ssh_kbdint *kbd){
- int i,n=kbd->nprompts;
- if(kbd->name)
- free(kbd->name);
- if(kbd->instruction)
- free(kbd->instruction);
- if(kbd->prompts){
- for(i=0;i<n;++i){
- burn(kbd->prompts[i]);
- free(kbd->prompts[i]);
- }
- free(kbd->prompts);
- }
- if(kbd->answers){
- for(i=0;i<n;++i){
- burn(kbd->answers[i]);
- free(kbd->answers[i]);
- }
- free(kbd->answers);
+static void kbdint_free(struct ssh_kbdint *kbd) {
+ int i, n;
+
+ if (kbd == NULL) {
+ return;
+ }
+
+ n = kbd->nprompts;
+
+ SAFE_FREE(kbd->name);
+ SAFE_FREE(kbd->instruction);
+ SAFE_FREE(kbd->echo);
+
+ if (kbd->prompts) {
+ for (i = 0; i < n; i++) {
+ burn(kbd->prompts[i]);
+ SAFE_FREE(kbd->prompts[i]);
}
- if(kbd->echo){
- free(kbd->echo);
+ SAFE_FREE(kbd->prompts);
+ }
+ if (kbd->answers) {
+ for (i = 0; i < n; i++) {
+ burn(kbd->answers[i]);
+ SAFE_FREE(kbd->answers[i]);
}
- free(kbd);
+ SAFE_FREE(kbd->answers);
+ }
+
+ SAFE_FREE(kbd);
}
static void kbdint_clean(struct ssh_kbdint *kbd){