]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
lib: canonicalize pull_dos_date3()
authorRalph Boehme <slow@samba.org>
Fri, 29 Nov 2019 08:43:21 +0000 (08:43 +0000)
committerJeremy Allison <jra@samba.org>
Fri, 6 Dec 2019 00:17:36 +0000 (00:17 +0000)
Returns 0xFFFFFFFF as (time_t)-1. This avoids misenterpreting 0xFFFFFFFF as a
valid time_t value (0xFFFFFFFF = Sun 07 Feb 2106 06:28:15 AM GMT) on 64-bit
platforms where time_t is 64-bit.

Currently direct and indirect callers of pull_dos_date3() rely on the fact that
the resulting time_t is checked with null_time() which also checks for
0xFFFFFFFF as sentinel value amongst 0 and -1:

        return t == 0 ||
                t == (time_t)0xFFFFFFFF ||
                t == (time_t)-1;

By returning -1 instead of 0xFFFFFFFF, callers can safely pass the result to
unix_to_nt_time() which *doesn't* check for 0xFFFFFFFF, only -1.

BUG: https://bugzilla.samba.org/show_bug.cgi?id=7771

Signed-off-by: Ralph Boehme <slow@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
lib/util/time.c

index 46d188eb897a7de2831df1850318a48b79d9c76e..0875c9fbda9e4c486cc16c5511058b592f51a49a 100644 (file)
@@ -326,6 +326,11 @@ _PUBLIC_ time_t pull_dos_date2(const uint8_t *date_ptr, int zone_offset)
 _PUBLIC_ time_t pull_dos_date3(const uint8_t *date_ptr, int zone_offset)
 {
        time_t t = (time_t)IVAL(date_ptr,0);
+
+       if (t == (time_t)0xFFFFFFFF) {
+               t = (time_t)-1;
+       }
+
        if (!null_time(t)) {
                t += zone_offset;
        }