aboutsummaryrefslogtreecommitdiff
path: root/openssl/crypto/asn1/a_utctm.c
diff options
context:
space:
mode:
authormarha <marha@users.sourceforge.net>2014-09-02 18:48:52 +0200
committermarha <marha@users.sourceforge.net>2014-09-02 18:48:52 +0200
commitdea8f13d8104872dec9243abe06f3d9e4c807ccd (patch)
treeb01e5b901eaca45f1e3aa2b6fddfd45ca271ee75 /openssl/crypto/asn1/a_utctm.c
parent3293021e6f582c7348667e7638941620134525e1 (diff)
parent04168ae281bfbd714ddf6b90d98eac892508dde8 (diff)
downloadvcxsrv-dea8f13d8104872dec9243abe06f3d9e4c807ccd.tar.gz
vcxsrv-dea8f13d8104872dec9243abe06f3d9e4c807ccd.tar.bz2
vcxsrv-dea8f13d8104872dec9243abe06f3d9e4c807ccd.zip
Merge remote-tracking branch 'origin/released'
Conflicts: openssl/Makefile openssl/crypto/opensslconf.h
Diffstat (limited to 'openssl/crypto/asn1/a_utctm.c')
-rw-r--r--openssl/crypto/asn1/a_utctm.c24
1 files changed, 19 insertions, 5 deletions
diff --git a/openssl/crypto/asn1/a_utctm.c b/openssl/crypto/asn1/a_utctm.c
index 072e23659..bbdc9b322 100644
--- a/openssl/crypto/asn1/a_utctm.c
+++ b/openssl/crypto/asn1/a_utctm.c
@@ -196,24 +196,29 @@ ASN1_UTCTIME *ASN1_UTCTIME_adj(ASN1_UTCTIME *s, time_t t,
struct tm *ts;
struct tm data;
size_t len = 20;
+ int free_s = 0;
if (s == NULL)
+ {
+ free_s = 1;
s=M_ASN1_UTCTIME_new();
+ }
if (s == NULL)
- return(NULL);
+ goto err;
+
ts=OPENSSL_gmtime(&t, &data);
if (ts == NULL)
- return(NULL);
+ goto err;
if (offset_day || offset_sec)
{
if (!OPENSSL_gmtime_adj(ts, offset_day, offset_sec))
- return NULL;
+ goto err;
}
if((ts->tm_year < 50) || (ts->tm_year >= 150))
- return NULL;
+ goto err;
p=(char *)s->data;
if ((p == NULL) || ((size_t)s->length < len))
@@ -222,7 +227,7 @@ ASN1_UTCTIME *ASN1_UTCTIME_adj(ASN1_UTCTIME *s, time_t t,
if (p == NULL)
{
ASN1err(ASN1_F_ASN1_UTCTIME_ADJ,ERR_R_MALLOC_FAILURE);
- return(NULL);
+ goto err;
}
if (s->data != NULL)
OPENSSL_free(s->data);
@@ -237,6 +242,10 @@ ASN1_UTCTIME *ASN1_UTCTIME_adj(ASN1_UTCTIME *s, time_t t,
ebcdic2ascii(s->data, s->data, s->length);
#endif
return(s);
+ err:
+ if (free_s && s)
+ M_ASN1_UTCTIME_free(s);
+ return NULL;
}
@@ -261,6 +270,11 @@ int ASN1_UTCTIME_cmp_time_t(const ASN1_UTCTIME *s, time_t t)
t -= offset*60; /* FIXME: may overflow in extreme cases */
tm = OPENSSL_gmtime(&t, &data);
+ /* NB: -1, 0, 1 already valid return values so use -2 to
+ * indicate error.
+ */
+ if (tm == NULL)
+ return -2;
#define return_cmp(a,b) if ((a)<(b)) return -1; else if ((a)>(b)) return 1
year = g2(s->data);