Skip to content
  • Nick Mathewson's avatar
    Fix undefined behavior with pointer addition in channeltls.c · 092ac26e
    Nick Mathewson authored
    In C, it's a bad idea to do this:
    
       char *cp = array;
       char *end = array + array_len;
    
       /* .... */
    
       if (cp + 3 >= end) { /* out of bounds */ }
    
    because cp+3 might be more than one off the end of the array, and
    you are only allowed to construct pointers to the array elements,
    and to an element one past the end.  Instead you have to say
    
       if (cp - array + 3 >= array_len) { /* ... */ }
    
    or something like that.
    
    This patch fixes two of these: one in process_versions_cell
    introduced in 0.2.0.10-alpha, and one in process_certs_cell
    introduced in 0.2.3.6-alpha.  These are both tracked under bug
    10363. "bobnomnom" found and reported both. See also 10313.
    
    In our code, this is likely to be a problem as we used it only if we
    get a nasty allocator that makes allocations end close to (void*)-1.
    But it's best not to have to worry about such things at all, so
    let's just fix all of these we can find.
    092ac26e