--- lib/stdlib/src/calendar.erl.orig 2008-11-01 06:17:16.000000000 +0000 +++ lib/stdlib/src/calendar.erl 2008-11-01 06:21:24.000000000 +0000 @@ -215,11 +215,19 @@ -spec local_time_to_universal_time_dst(t_datetime1970()) -> [t_datetime1970()]. local_time_to_universal_time_dst(DateTime) -> - UtDst = erlang:localtime_to_universaltime(DateTime, true), - Ut = erlang:localtime_to_universaltime(DateTime, false), %% Reverse check the universal times - LtDst = erlang:universaltime_to_localtime(UtDst), - Lt = erlang:universaltime_to_localtime(Ut), + {UtDst, LtDst} = + try + UtDst0 = erlang:localtime_to_universaltime(DateTime, true), + {UtDst0, erlang:universaltime_to_localtime(UtDst0)} + catch error:badarg -> {error, error} + end, + {Ut, Lt} = + try + Ut0 = erlang:localtime_to_universaltime(DateTime, false), + {Ut0, erlang:universaltime_to_localtime(Ut0)} + catch error:badarg -> {error, error} + end, %% Return the valid universal times case {LtDst,Lt} of {DateTime,DateTime} when UtDst =/= Ut -> --- erts/emulator/beam/erl_time_sup.c.orig 2008-11-01 06:13:57.000000000 +0000 +++ erts/emulator/beam/erl_time_sup.c 2008-11-01 06:15:13.000000000 +0000 @@ -648,6 +648,9 @@ t.tm_sec = *second; t.tm_isdst = isdst; the_clock = mktime(&t); + if (the_clock == -1) { + return 0; + } #ifdef HAVE_GMTIME_R gmtime_r(&the_clock, (tm = &tmbuf)); #else