Fix error handling in heartbeat processing
[oweals/openssl.git] / ssl / ssl_asn1.c
index 39d48eabf03b95c07a8cab1312ca941c6e1a2e71..499f0e85addf2e7dde1eee030a5678b61e391032 100644 (file)
@@ -121,13 +121,16 @@ typedef struct ssl_session_asn1_st {
 int i2d_SSL_SESSION(SSL_SESSION *in, unsigned char **pp)
 {
 #define LSIZE2 (sizeof(long)*2)
-    int v1 = 0, v2 = 0, v3 = 0, v4 = 0, v5 = 0, v7 = 0, v8 = 0;
+    int v1 = 0, v2 = 0, v3 = 0, v4 = 0, v5 = 0;
     unsigned char buf[4], ibuf1[LSIZE2], ibuf2[LSIZE2];
     unsigned char ibuf3[LSIZE2], ibuf4[LSIZE2], ibuf5[LSIZE2];
 #ifndef OPENSSL_NO_TLSEXT
     int v6 = 0, v9 = 0, v10 = 0;
     unsigned char ibuf6[LSIZE2];
 #endif
+#ifndef OPENSSL_NO_PSK
+    int v7 = 0, v8 = 0;
+#endif
 #ifndef OPENSSL_NO_COMP
     unsigned char cbuf;
     int v11 = 0;
@@ -524,6 +527,9 @@ SSL_SESSION *d2i_SSL_SESSION(SSL_SESSION **a, const unsigned char **pp,
         if (os.length > SSL_MAX_SID_CTX_LENGTH) {
             c.error = SSL_R_BAD_LENGTH;
             c.line = __LINE__;
+            OPENSSL_free(os.data);
+            os.data = NULL;
+            os.length = 0;
             goto err;
         } else {
             ret->sid_ctx_length = os.length;