Skip to content

Commit 7898cce

Browse files
authored
Merge pull request wolfSSL#8407 from embhorn/zd19346
Fix compat layer ASN1_TIME_diff to accept NULL output params
2 parents 275beca + b488af1 commit 7898cce

File tree

2 files changed

+19
-20
lines changed

2 files changed

+19
-20
lines changed

src/ssl_asn1.c

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3823,7 +3823,6 @@ static int wolfssl_asn1_time_to_secs(const WOLFSSL_ASN1_TIME* t,
38233823
* @param [in] from ASN.1 TIME object as start time.
38243824
* @param [in] to ASN.1 TIME object as end time.
38253825
* @return 1 on success.
3826-
* @return 0 when days or secs is NULL.
38273826
* @return 0 when conversion of time fails.
38283827
*/
38293828
int wolfSSL_ASN1_TIME_diff(int *days, int *secs, const WOLFSSL_ASN1_TIME *from,
@@ -3833,21 +3832,15 @@ int wolfSSL_ASN1_TIME_diff(int *days, int *secs, const WOLFSSL_ASN1_TIME *from,
38333832

38343833
WOLFSSL_ENTER("wolfSSL_ASN1_TIME_diff");
38353834

3836-
/* Validate parameters. */
3837-
if (days == NULL) {
3838-
WOLFSSL_MSG("days is NULL");
3839-
ret = 0;
3840-
}
3841-
if ((ret == 1) && (secs == NULL)) {
3842-
WOLFSSL_MSG("secs is NULL");
3843-
ret = 0;
3844-
}
3845-
3846-
if ((ret == 1) && ((from == NULL) && (to == NULL))) {
3847-
*days = 0;
3848-
*secs = 0;
3835+
if ((from == NULL) && (to == NULL)) {
3836+
if (days != NULL) {
3837+
*days = 0;
3838+
}
3839+
if (secs != NULL) {
3840+
*secs = 0;
3841+
}
38493842
}
3850-
else if (ret == 1) {
3843+
else {
38513844
const long long SECS_PER_DAY = 24 * 60 * 60;
38523845
long long fromSecs;
38533846
long long toSecs = 0;
@@ -3858,8 +3851,13 @@ int wolfSSL_ASN1_TIME_diff(int *days, int *secs, const WOLFSSL_ASN1_TIME *from,
38583851
}
38593852
if (ret == 1) {
38603853
long long diffSecs = toSecs - fromSecs;
3861-
*days = (int) (diffSecs / SECS_PER_DAY);
3862-
*secs = (int) (diffSecs - ((long long)*days * SECS_PER_DAY));
3854+
if (days != NULL) {
3855+
*days = (int) (diffSecs / SECS_PER_DAY);
3856+
}
3857+
if (secs != NULL) {
3858+
*secs = (int) (diffSecs -
3859+
((long long)(diffSecs / SECS_PER_DAY) * SECS_PER_DAY));
3860+
}
38633861
}
38643862
}
38653863

tests/api.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54544,9 +54544,10 @@ static int test_wolfSSL_ASN1_TIME_diff_compare(void)
5454454544

5454554545
ExpectIntEQ(ASN1_TIME_diff(&daysDiff, &secsDiff, fromTime, toTime), 1);
5454654546

54547-
/* Error conditions. */
54548-
ExpectIntEQ(ASN1_TIME_diff(NULL, &secsDiff, fromTime, toTime), 0);
54549-
ExpectIntEQ(ASN1_TIME_diff(&daysDiff, NULL, fromTime, toTime), 0);
54547+
/* Test when secsDiff or daysDiff is NULL. */
54548+
ExpectIntEQ(ASN1_TIME_diff(NULL, &secsDiff, fromTime, toTime), 1);
54549+
ExpectIntEQ(ASN1_TIME_diff(&daysDiff, NULL, fromTime, toTime), 1);
54550+
ExpectIntEQ(ASN1_TIME_diff(NULL, NULL, fromTime, toTime), 1);
5455054551

5455154552
/* If both times are NULL, difference is 0. */
5455254553
ExpectIntEQ(ASN1_TIME_diff(&daysDiff, &secsDiff, NULL, NULL), 1);

0 commit comments

Comments
 (0)