kreltime-20061021
authorJeffrey Hutzelman <jhutz@cs.cmu.edu>
Sun, 22 Oct 2006 02:48:35 +0000 (02:48 +0000)
committerJeffrey Altman <jaltman@secure-endpoints.com>
Sun, 22 Oct 2006 02:48:35 +0000 (02:48 +0000)
FIXES 43551

kreltime-guard-against-null-tm-20060731 was apparently an
attempt to deal with the possibility of localtime() returning NULL by
using localtime_r instead, and zeroing the tm structure first. This has
two problems. First, localtime_r is not guaranteed to leave its output
buffer untouched or in a sane state in the event it is given invalid
input. More importantly, the second half of this delta fixed the build
on Windows (which apparently lacks localtime_r) at the expense of using
the wrong level of indirection on other platforms.

Simple is nice, but correct is important too. There is nothing wrong
with switching to localtime_r to avoid thread safety issues. However,
the correct fix for the anticipated problem was and is to check the
return value of localtime (or localtime_r), and if it is NULL, fill in
the ktime_date with suitable default values.

The attached patch does not implement the correct fix, but does fix the
double-indirection problem, so butc will again perform correctly instead
of crashing.

src/util/kreltime.c

index 86f080a..1ed7e73 100644 (file)
@@ -121,8 +121,8 @@ ktimeDate_FromInt32(afs_int32 timeSecs, struct ktime_date *ktimePtr)
 
     timePtr = &timeP;
 
-    memset(&timePtr, 0, sizeof(timePtr));
-    localtime_r(&tt, &timePtr);
+    memset(&timeP, 0, sizeof(timeP));
+    localtime_r(&tt, &timeP);
 #else
     timePtr = localtime(&tt);
 #endif