ssl_sess.c: grab a copy of the session ID
authorEmilia Kasper <emilia@openssl.org>
Thu, 1 Oct 2015 11:00:39 +0000 (13:00 +0200)
committerEmilia Kasper <emilia@openssl.org>
Mon, 5 Oct 2015 17:03:52 +0000 (19:03 +0200)
The user callback takes a non-const pointer, so don't pass PACKET data
to it directly; rather, grab a local copy.

Reviewed-by: Matt Caswell <matt@openssl.org>
ssl/ssl_sess.c

index 83171f1f9f71f44ff7b8e3387d27d3fe7cba6567..41bc4e11a36965521ad89e5d8705ccb5d747ebbf 100644 (file)
@@ -583,13 +583,15 @@ int ssl_get_prev_session(SSL *s, const PACKET *ext, const PACKET *session_id)
     if (try_session_cache &&
         ret == NULL && s->session_ctx->get_session_cb != NULL) {
         int copy = 1;
+        /* The user callback takes a non-const pointer, so grab a local copy. */
+        unsigned char *sid = NULL;
+        size_t sid_len;
+        if (!PACKET_memdup(session_id, &sid, &sid_len))
+            goto err;
+        ret = s->session_ctx->get_session_cb(s, sid, sid_len, &copy);
+        OPENSSL_free(sid);
 
-        /*
-         * TODO(openssl-team): grab a copy of the data in |session_id|
-         * so that the PACKET data can be made const.
-         */
-        if ((ret = s->session_ctx->get_session_cb(s, PACKET_data(session_id),
-                                                  len, &copy))) {
+        if (ret != NULL) {
             s->session_ctx->stats.sess_cb_hit++;
 
             /*