diff options
| author | Stanislav Malyshev <stas@php.net> | 2014-06-08 14:18:24 -0700 |
|---|---|---|
| committer | Stanislav Malyshev <stas@php.net> | 2014-06-08 14:19:16 -0700 |
| commit | 4946dc1ab98f93f53c741bf6630b5265138891ef (patch) | |
| tree | 3828b4178c4d17cf9373048a55a6a17c004d1696 /ext/openssl/openssl.c | |
| parent | da6abc8db4de42cb8dd4b6c7e13bce339c4b320f (diff) | |
| parent | 76a7fd893b7d6101300cc656058704a73254d593 (diff) | |
| download | php-git-4946dc1ab98f93f53c741bf6630b5265138891ef.tar.gz | |
Merge branch 'PHP-5.4' into PHP-5.5
* PHP-5.4:
Added support for parsing ssl certificates using GeneralizedTime format.
Diffstat (limited to 'ext/openssl/openssl.c')
| -rwxr-xr-x | ext/openssl/openssl.c | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/ext/openssl/openssl.c b/ext/openssl/openssl.c index b2b8c0e56e..90b1cc6c9c 100755 --- a/ext/openssl/openssl.c +++ b/ext/openssl/openssl.c @@ -661,7 +661,7 @@ static time_t asn1_time_to_time_t(ASN1_UTCTIME * timestr TSRMLS_DC) /* {{{ */ char * thestr; long gmadjust = 0; - if (ASN1_STRING_type(timestr) != V_ASN1_UTCTIME) { + if (ASN1_STRING_type(timestr) != V_ASN1_UTCTIME && ASN1_STRING_type(timestr) != V_ASN1_GENERALIZEDTIME) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "illegal ASN1 data type for timestamp"); return (time_t)-1; } @@ -676,6 +676,11 @@ static time_t asn1_time_to_time_t(ASN1_UTCTIME * timestr TSRMLS_DC) /* {{{ */ return (time_t)-1; } + if (ASN1_STRING_type(timestr) == V_ASN1_GENERALIZEDTIME && ASN1_STRING_length(timestr) < 15) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "unable to parse time string %s correctly", timestr->data); + return (time_t)-1; + } + strbuf = estrdup((char *)ASN1_STRING_data(timestr)); memset(&thetime, 0, sizeof(thetime)); @@ -697,14 +702,21 @@ static time_t asn1_time_to_time_t(ASN1_UTCTIME * timestr TSRMLS_DC) /* {{{ */ *thestr = '\0'; thestr -= 2; thetime.tm_mon = atoi(thestr)-1; + *thestr = '\0'; - thestr -= 2; - thetime.tm_year = atoi(thestr); + if( ASN1_STRING_type(timestr) == V_ASN1_UTCTIME ) { + thestr -= 2; + thetime.tm_year = atoi(thestr); - if (thetime.tm_year < 68) { - thetime.tm_year += 100; + if (thetime.tm_year < 68) { + thetime.tm_year += 100; + } + } else if( ASN1_STRING_type(timestr) == V_ASN1_GENERALIZEDTIME ) { + thestr -= 4; + thetime.tm_year = atoi(thestr) - 1900; } + thetime.tm_isdst = -1; ret = mktime(&thetime); |
