3806
3807
3808
3809
3810
3811
3812
3813
3814
3815
3816
3817
3818
3819
3820
3821
3822
3823
3824
3825
3826
3827
3828
3829
3830
3831
3832
3833
3834
3835
3836
3837
3838
3839
3840
3841
3842
3843
3844
3845
3846
|
3806
3807
3808
3809
3810
3811
3812
3813
3814
3815
3816
3817
3818
3819
3820
3821
3822
3823
3824
3825
3826
3827
3828
3829
3830
3831
3832
3833
3834
3835
3836
3837
3838
3839
3840
3841
3842
3843
3844
3845
3846
3847
3848
3849
3850
3851
3852
|
+
+
+
+
+
+
-
+
|
if ((info->flags & CLF_ISO8601YEAR)) {
if (yydate.iso8601Year < dataPtr->validMinYear
|| yydate.iso8601Year > dataPtr->validMaxYear) {
errMsg = "invalid iso year";
errCode = "iso year";
goto error;
}
if ((yydate.iso8601Year < 1972) || (yydate.iso8601Year > 2017)) {
leapDay = 0;
}
}
if (info->flags & CLF_YEAR) {
if (yyYear < dataPtr->validMinYear
|| yyYear > dataPtr->validMaxYear) {
errMsg = "invalid year";
errCode = "year";
goto error;
}
if ((yyYear < 1972) || (yyYear > 2017)) {
leapDay = 0;
}
} else if ((info->flags & CLF_ISO8601YEAR)) {
yyYear = yydate.iso8601Year; /* used to recognize leap */
}
if ((info->flags & (CLF_ISO8601YEAR | CLF_YEAR))
== (CLF_ISO8601YEAR | CLF_YEAR)) {
if (yyYear != yydate.iso8601Year) {
errMsg = "ambiguous year";
errCode = "year";
goto error;
}
}
}
/* and month (used later in hath) */
if (info->flags & CLF_MONTH) {
if (yyMonth < 1 || yyMonth > 12) {
errMsg = "invalid month";
errCode = "month";
goto error;
} else if ((yyMonth == 6) || (yyMonth == 12)) {
} else if (leapDay && ((yyMonth == 6) || (yyMonth == 12))) {
/* leap seconds/minutes can be the last day in june or december */
leapDay = (yyMonth == 12) ? 31: 30;
} else {
/* leap seconds/minutes can be the first day in july or january */
leapDay = ((yyMonth == 7) || (yyMonth == 1));
}
}
|
3897
3898
3899
3900
3901
3902
3903
3904
3905
3906
3907
3908
3909
3910
3911
|
3903
3904
3905
3906
3907
3908
3909
3910
3911
3912
3913
3914
3915
3916
3917
|
-
+
|
leapDay = 0;
}
/* minutes */
if (yyMinutes < 0 || yyMinutes > (leapDay ? 60 : 59) || (yyMinutes && (yyHour == 24))) {
errMsg = "invalid time (minutes)";
errCode = "minutes";
goto error;
} else if ((yyMinutes != 14) && (yyMinutes != 29) && (yyMinutes != 44) && (yyMinutes != 59)) {
} else if ((yyMinutes % 15) != 14) {
leapDay = 0;
}
/* oldscan could return secondOfDay (parsedTime) -1 by invalid time (ex.: 25:00:00) */
if (yySeconds < 0 || yySeconds > (leapDay ? 60 : 59) || yySecondOfDay <= -1 || (yySeconds && (yyHour == 24))) {
errMsg = "invalid time";
errCode = "seconds";
goto error;
|