fix SEGV on lost connection
authorWu, Fengguang <fengguang.wu@intel.com>
Fri, 12 Dec 2008 14:23:44 +0000 (14:23 +0000)
committerDavid Woodhouse <David.Woodhouse@intel.com>
Fri, 12 Dec 2008 14:32:19 +0000 (14:32 +0000)
Stop cstp_bye() when the https connection was already lost.

Signed-off-by: Wu Fengguang <fengguang.wu@intel.com>
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
cstp.c

diff --git a/cstp.c b/cstp.c
index f330e1e..bb23665 100644 (file)
--- a/cstp.c
+++ b/cstp.c
@@ -635,13 +635,19 @@ int cstp_mainloop(struct openconnect_info *vpninfo, int *timeout)
 int cstp_bye(struct openconnect_info *vpninfo, char *reason)
 {
        unsigned char *bye_pkt;
-       int reason_len = strlen(reason);
+       int reason_len;
+
+       /* already lost connection? */
+       if (!vpninfo->https_ssl)
+               return 0;
+
+       reason_len = strlen(reason);
        bye_pkt = malloc(reason_len + 8);
        if (!bye_pkt)
                return -ENOMEM;
        
        memcpy(bye_pkt, data_hdr, 8);
-       memcpy(bye_pkt + 8, reason, strlen(reason));
+       memcpy(bye_pkt + 8, reason, reason_len);
 
        bye_pkt[4] = reason_len >> 8;
        bye_pkt[5] = reason_len & 0xff;