| OLD | NEW | 
|---|
|  | (Empty) | 
| 1 diff --git android-openssl.orig/ssl/t1_lib.c android-openssl/ssl/t1_lib.c |  | 
| 2 index 3fe6612..ea7fefa 100644 |  | 
| 3 --- android-openssl.orig/ssl/t1_lib.c |  | 
| 4 +++ android-openssl/ssl/t1_lib.c |  | 
| 5 @@ -444,55 +444,6 @@ unsigned char *ssl_add_clienthello_tlsext(SSL *s, unsigned 
     char *buf, unsigned c |  | 
| 6                 } |  | 
| 7  #endif |  | 
| 8 |  | 
| 9 -#ifndef OPENSSL_NO_EC |  | 
| 10 -       if (s->tlsext_ecpointformatlist != NULL && |  | 
| 11 -           s->version != DTLS1_VERSION) |  | 
| 12 -               { |  | 
| 13 -               /* Add TLS extension ECPointFormats to the ClientHello message *
     / |  | 
| 14 -               long lenmax; |  | 
| 15 - |  | 
| 16 -               if ((lenmax = limit - ret - 5) < 0) return NULL; |  | 
| 17 -               if (s->tlsext_ecpointformatlist_length > (unsigned long)lenmax) 
     return NULL; |  | 
| 18 -               if (s->tlsext_ecpointformatlist_length > 255) |  | 
| 19 -                       { |  | 
| 20 -                       SSLerr(SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT, ERR_R_INTERNAL_
     ERROR); |  | 
| 21 -                       return NULL; |  | 
| 22 -                       } |  | 
| 23 - |  | 
| 24 -               s2n(TLSEXT_TYPE_ec_point_formats,ret); |  | 
| 25 -               s2n(s->tlsext_ecpointformatlist_length + 1,ret); |  | 
| 26 -               *(ret++) = (unsigned char) s->tlsext_ecpointformatlist_length; |  | 
| 27 -               memcpy(ret, s->tlsext_ecpointformatlist, s->tlsext_ecpointformat
     list_length); |  | 
| 28 -               ret+=s->tlsext_ecpointformatlist_length; |  | 
| 29 -               } |  | 
| 30 -       if (s->tlsext_ellipticcurvelist != NULL && |  | 
| 31 -           s->version != DTLS1_VERSION) |  | 
| 32 -               { |  | 
| 33 -               /* Add TLS extension EllipticCurves to the ClientHello message *
     / |  | 
| 34 -               long lenmax; |  | 
| 35 - |  | 
| 36 -               if ((lenmax = limit - ret - 6) < 0) return NULL; |  | 
| 37 -               if (s->tlsext_ellipticcurvelist_length > (unsigned long)lenmax) 
     return NULL; |  | 
| 38 -               if (s->tlsext_ellipticcurvelist_length > 65532) |  | 
| 39 -                       { |  | 
| 40 -                       SSLerr(SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT, ERR_R_INTERNAL_
     ERROR); |  | 
| 41 -                       return NULL; |  | 
| 42 -                       } |  | 
| 43 - |  | 
| 44 -               s2n(TLSEXT_TYPE_elliptic_curves,ret); |  | 
| 45 -               s2n(s->tlsext_ellipticcurvelist_length + 2, ret); |  | 
| 46 - |  | 
| 47 -               /* NB: draft-ietf-tls-ecc-12.txt uses a one-byte prefix for |  | 
| 48 -                * elliptic_curve_list, but the examples use two bytes. |  | 
| 49 -                * http://www1.ietf.org/mail-archive/web/tls/current/msg00538.ht
     ml |  | 
| 50 -                * resolves this to two bytes. |  | 
| 51 -                */ |  | 
| 52 -               s2n(s->tlsext_ellipticcurvelist_length, ret); |  | 
| 53 -               memcpy(ret, s->tlsext_ellipticcurvelist, s->tlsext_ellipticcurve
     list_length); |  | 
| 54 -               ret+=s->tlsext_ellipticcurvelist_length; |  | 
| 55 -               } |  | 
| 56 -#endif /* OPENSSL_NO_EC */ |  | 
| 57 - |  | 
| 58         if (!(SSL_get_options(s) & SSL_OP_NO_TICKET)) |  | 
| 59                 { |  | 
| 60                 int ticklen; |  | 
| 61 @@ -665,6 +616,58 @@ unsigned char *ssl_add_clienthello_tlsext(SSL *s, unsigned 
     char *buf, unsigned c |  | 
| 62                  } |  | 
| 63  #endif |  | 
| 64 |  | 
| 65 +#ifndef OPENSSL_NO_EC |  | 
| 66 +       /* WebSphere Application Server 7.0 is intolerant to the last extension |  | 
| 67 +        * being zero-length. ECC extensions are non-empty and not dropped until |  | 
| 68 +        * fallback to SSL3, at which point all extensions are gone. */ |  | 
| 69 +       if (s->tlsext_ecpointformatlist != NULL && |  | 
| 70 +           s->version != DTLS1_VERSION) |  | 
| 71 +               { |  | 
| 72 +               /* Add TLS extension ECPointFormats to the ClientHello message *
     / |  | 
| 73 +               long lenmax; |  | 
| 74 + |  | 
| 75 +               if ((lenmax = limit - ret - 5) < 0) return NULL; |  | 
| 76 +               if (s->tlsext_ecpointformatlist_length > (unsigned long)lenmax) 
     return NULL; |  | 
| 77 +               if (s->tlsext_ecpointformatlist_length > 255) |  | 
| 78 +                       { |  | 
| 79 +                       SSLerr(SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT, ERR_R_INTERNAL_
     ERROR); |  | 
| 80 +                       return NULL; |  | 
| 81 +                       } |  | 
| 82 + |  | 
| 83 +               s2n(TLSEXT_TYPE_ec_point_formats,ret); |  | 
| 84 +               s2n(s->tlsext_ecpointformatlist_length + 1,ret); |  | 
| 85 +               *(ret++) = (unsigned char) s->tlsext_ecpointformatlist_length; |  | 
| 86 +               memcpy(ret, s->tlsext_ecpointformatlist, s->tlsext_ecpointformat
     list_length); |  | 
| 87 +               ret+=s->tlsext_ecpointformatlist_length; |  | 
| 88 +               } |  | 
| 89 +       if (s->tlsext_ellipticcurvelist != NULL && |  | 
| 90 +           s->version != DTLS1_VERSION) |  | 
| 91 +               { |  | 
| 92 +               /* Add TLS extension EllipticCurves to the ClientHello message *
     / |  | 
| 93 +               long lenmax; |  | 
| 94 + |  | 
| 95 +               if ((lenmax = limit - ret - 6) < 0) return NULL; |  | 
| 96 +               if (s->tlsext_ellipticcurvelist_length > (unsigned long)lenmax) 
     return NULL; |  | 
| 97 +               if (s->tlsext_ellipticcurvelist_length > 65532) |  | 
| 98 +                       { |  | 
| 99 +                       SSLerr(SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT, ERR_R_INTERNAL_
     ERROR); |  | 
| 100 +                       return NULL; |  | 
| 101 +                       } |  | 
| 102 + |  | 
| 103 +               s2n(TLSEXT_TYPE_elliptic_curves,ret); |  | 
| 104 +               s2n(s->tlsext_ellipticcurvelist_length + 2, ret); |  | 
| 105 + |  | 
| 106 +               /* NB: draft-ietf-tls-ecc-12.txt uses a one-byte prefix for |  | 
| 107 +                * elliptic_curve_list, but the examples use two bytes. |  | 
| 108 +                * http://www1.ietf.org/mail-archive/web/tls/current/msg00538.ht
     ml |  | 
| 109 +                * resolves this to two bytes. |  | 
| 110 +                */ |  | 
| 111 +               s2n(s->tlsext_ellipticcurvelist_length, ret); |  | 
| 112 +               memcpy(ret, s->tlsext_ellipticcurvelist, s->tlsext_ellipticcurve
     list_length); |  | 
| 113 +               ret+=s->tlsext_ellipticcurvelist_length; |  | 
| 114 +               } |  | 
| 115 +#endif /* OPENSSL_NO_EC */ |  | 
| 116 + |  | 
| 117         /* Add padding to workaround bugs in F5 terminators. |  | 
| 118          * See https://tools.ietf.org/html/draft-agl-tls-padding-02 */ |  | 
| 119         if (header_len > 0) |  | 
| 120 @@ -673,10 +676,14 @@ unsigned char *ssl_add_clienthello_tlsext(SSL *s, unsigned
      char *buf, unsigned c |  | 
| 121                 if (header_len > 0xff && header_len < 0x200) |  | 
| 122                         { |  | 
| 123                         size_t padding_len = 0x200 - header_len; |  | 
| 124 -                       if (padding_len >= 4) |  | 
| 125 +                       /* Extensions take at least four bytes to encode. Always |  | 
| 126 +                        * include least one byte of data if including the |  | 
| 127 +                        * extension. WebSphere Application Server 7.0 is |  | 
| 128 +                        * intolerant to the last extension being zero-length. *
     / |  | 
| 129 +                       if (padding_len >= 4 + 1) |  | 
| 130                                 padding_len -= 4; |  | 
| 131                         else |  | 
| 132 -                               padding_len = 0; |  | 
| 133 +                               padding_len = 1; |  | 
| 134                         if (limit - ret - 4 - (long)padding_len < 0) |  | 
| 135                                 return NULL; |  | 
| 136 |  | 
| OLD | NEW | 
|---|