Changeset 368b574 in mod_gnutls for src/gnutls_io.c


Ignore:
Timestamp:
Aug 18, 2010, 2:41:36 PM (9 years ago)
Author:
Nikos Mavrogiannopoulos <nmav@…>
Branches:
debian/master, debian/stretch-backports, jessie-backports, master, msva, upstream
Children:
41dd507
Parents:
7fec961
git-author:
Nikos Mavrogiannopoulos <nmav@…> (08/17/10 13:04:34)
git-committer:
Nikos Mavrogiannopoulos <nmav@…> (08/18/10 14:41:36)
Message:

Safer usage of session variable to prevent segmentation faults on closure. Should solve issue #106.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/gnutls_io.c

    r7fec961 r368b574  
    222222        }
    223223    }
     224   
     225    if (ctxt->session == NULL) {
     226        return APR_EGENERAL;
     227    }
    224228
    225229    while (1) {
     
    361365    int maxtries = HANDSHAKE_MAX_TRIES;
    362366
    363     if (ctxt->status != 0) {
     367    if (ctxt->status != 0 || ctxt->session == NULL) {
    364368        return -1;
    365369    }
     
    442446{
    443447    int rv;
     448   
     449    if (ctxt->session == NULL)
     450        return -1;
    444451
    445452    rv = gnutls_rehandshake(ctxt->session);
     
    566573            apr_bucket_copy(bucket, &e);
    567574            APR_BRIGADE_INSERT_TAIL(ctxt->output_bb, e);
    568             
     575 
    569576            if ((status = ap_pass_brigade(f->next, tmpb)) != APR_SUCCESS) {
    570577                apr_brigade_cleanup(ctxt->output_bb);
     
    610617            if (len > 0) {
    611618
    612                 do {
    613                     ret = gnutls_record_send(ctxt->session, data, len);
    614                 }
    615                 while(ret == GNUTLS_E_INTERRUPTED || ret == GNUTLS_E_AGAIN);
     619                if (ctxt->session == NULL) {
     620                    ret = GNUTLS_E_INVALID_REQUEST;
     621                } else {
     622                    do {
     623                        ret = gnutls_record_send(ctxt->session, data, len);
     624                    }
     625                    while(ret == GNUTLS_E_INTERRUPTED || ret == GNUTLS_E_AGAIN);
     626                }
    616627
    617628                if (ret < 0) {
     
    675686                return 0;
    676687            } else {
    677                 gnutls_transport_set_errno(ctxt->session, EINTR);
     688                if (ctxt->session)
     689                    gnutls_transport_set_errno(ctxt->session, EINTR);
    678690                return -1;
    679691            }
     
    698710        || APR_STATUS_IS_EINTR(ctxt->input_rc)) {
    699711        if (len == 0) {
    700             gnutls_transport_set_errno(ctxt->session, EINTR);
     712            if (ctxt->session)
     713                gnutls_transport_set_errno(ctxt->session, EINTR);
    701714            return -1;
    702715        }
Note: See TracChangeset for help on using the changeset viewer.