Commit bc9563f8 authored by Dr. Stephen Henson's avatar Dr. Stephen Henson
Browse files

Use SSL3_HM_HEADER_LENGTH instead of 4.

parent 709ec8b3
Loading
Loading
Loading
Loading
+16 −10
Original line number Diff line number Diff line
@@ -356,21 +356,22 @@ long ssl3_get_message(SSL *s, int st1, int stn, int mt, long max, int *ok)
        }
        *ok = 1;
        s->state = stn;
        s->init_msg = s->init_buf->data + 4;
        s->init_msg = s->init_buf->data + SSL3_HM_HEADER_LENGTH;
        s->init_num = (int)s->s3->tmp.message_size;
        return s->init_num;
    }

    p = (unsigned char *)s->init_buf->data;

    if (s->state == st1) {      /* s->init_num < 4 */
    if (s->state == st1) {      /* s->init_num < SSL3_HM_HEADER_LENGTH */
        int skip_message;

        do {
            while (s->init_num < 4) {
            while (s->init_num < SSL3_HM_HEADER_LENGTH) {
                i = s->method->ssl_read_bytes(s, SSL3_RT_HANDSHAKE,
                                              &p[s->init_num],
                                              4 - s->init_num, 0);
                                              SSL3_HM_HEADER_LENGTH -
                                              s->init_num, 0);
                if (i <= 0) {
                    s->rwstate = SSL_READING;
                    *ok = 0;
@@ -394,12 +395,13 @@ long ssl3_get_message(SSL *s, int st1, int stn, int mt, long max, int *ok)

                        if (s->msg_callback)
                            s->msg_callback(0, s->version, SSL3_RT_HANDSHAKE,
                                            p, 4, s, s->msg_callback_arg);
                                            p, SSL3_HM_HEADER_LENGTH, s,
                                            s->msg_callback_arg);
                    }
        }
        while (skip_message);

        /* s->init_num == 4 */
        /* s->init_num == SSL3_HM_HEADER_LENGTH */

        if ((mt >= 0) && (*p != mt)) {
            al = SSL_AD_UNEXPECTED_MESSAGE;
@@ -415,14 +417,16 @@ long ssl3_get_message(SSL *s, int st1, int stn, int mt, long max, int *ok)
            SSLerr(SSL_F_SSL3_GET_MESSAGE, SSL_R_EXCESSIVE_MESSAGE_SIZE);
            goto f_err;
        }
        if (l && !BUF_MEM_grow_clean(s->init_buf, (int)l + 4)) {
        if (l
            && !BUF_MEM_grow_clean(s->init_buf,
                                   (int)l + SSL3_HM_HEADER_LENGTH)) {
            SSLerr(SSL_F_SSL3_GET_MESSAGE, ERR_R_BUF_LIB);
            goto err;
        }
        s->s3->tmp.message_size = l;
        s->state = stn;

        s->init_msg = s->init_buf->data + 4;
        s->init_msg = s->init_buf->data + SSL3_HM_HEADER_LENGTH;
        s->init_num = 0;
    }

@@ -451,10 +455,12 @@ long ssl3_get_message(SSL *s, int st1, int stn, int mt, long max, int *ok)
#endif

    /* Feed this message into MAC computation. */
    ssl3_finish_mac(s, (unsigned char *)s->init_buf->data, s->init_num + 4);
    ssl3_finish_mac(s, (unsigned char *)s->init_buf->data,
                    s->init_num + SSL3_HM_HEADER_LENGTH);
    if (s->msg_callback)
        s->msg_callback(0, s->version, SSL3_RT_HANDSHAKE, s->init_buf->data,
                        (size_t)s->init_num + 4, s, s->msg_callback_arg);
                        (size_t)s->init_num + SSL3_HM_HEADER_LENGTH, s,
                        s->msg_callback_arg);
    *ok = 1;
    return s->init_num;
 f_err: