[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#401749: mktime() does not return -1 for some BROKENTIME it should



Package: libc6
Version: 2.3.6.ds1-8
Severity: normal

When tm_isdst is negtive (which means "information is not available"
according to info), mktime() does not return -1 for some broken-down
time that cannot be represented as a time_t (int32 in my box) calendar
time. Instead mktime() return a closest tv (MIN_TIME_T or MAX_TIME_T), 
and normalize it's argument, and set tm_isdst to 0. While according to
doc and to POSIX it should just return (time_t)-1.

Here is a test program I use to reproduce the bug:
{{{
#include <time.h>
#include <stdio.h>


int main(int argc, char *argv[])
{
	struct tm ts;
	time_t tv;

	ts.tm_year = 1898 - 1900;
	ts.tm_mon = 12 - 1;
	ts.tm_mday = 28;
	ts.tm_hour = 0;
	ts.tm_min = 0;
	ts.tm_sec = 0;
	ts.tm_isdst = -1;
	tv = mktime(&ts);
	fprintf(stderr, "test one, year 1898, tv should be -1\n");
	fprintf(stderr,
		"tv = %d, y = %d, m = %u, d = %u, h = %u, m = %u, sec = %u, dst = %d\n",
		tv, ts.tm_year, ts.tm_mon, ts.tm_mday, ts.tm_hour,
		ts.tm_min, ts.tm_sec, ts.tm_isdst);

	ts.tm_isdst = -1;

	ts.tm_year = 2046 - 1900;
	ts.tm_mon = 12 - 1;
	ts.tm_mday = 28;
	ts.tm_hour = 0;
	ts.tm_min = 0;
	ts.tm_sec = 0;
	tv = mktime(&ts);
	fprintf(stderr, "test two, year 2046, tv should be -1\n");
	fprintf(stderr,
		"tv = %d, y = %d, m = %u, d = %u, h = %u, m = %u, sec = %u, dst = %d\n",
		tv, ts.tm_year, ts.tm_mon, ts.tm_mday, ts.tm_hour,
		ts.tm_min, ts.tm_sec, ts.tm_isdst);
}
}}}

my gcc version: gcc (GCC) 4.1.2 20061115 (prerelease) (Debian 4.1.1-20)


-- System Information:
Debian Release: 4.0
  APT prefers unstable
  APT policy: (500, 'unstable')
Architecture: i386 (i686)
Shell:  /bin/sh linked to /bin/bash
Kernel: Linux 2.6.18-3-686
Locale: LANG=zh_CN.UTF-8, LC_CTYPE=zh_CN.UTF-8 (charmap=UTF-8)

Versions of packages libc6 depends on:
ii  tzdata                        2006p-1    Time Zone and Daylight Saving Time

libc6 recommends no packages.

-- no debconf information



Reply to: