- y = 1900+t->tm_year;
- m = t->tm_mon+1;
- d = t->tm_mday;
- if(type == 1) {
- sscanf(text, "---%d", &d);
- } else if(type == 2) {
- sscanf(text, "--%d-%d", &m, &d);
- } else {
- sscanf(text, "%d-%d-%d", &y, &m, &d);
- if(y < 70) {
- y += 2000;
- } else if(y < 100) {
- y += 1900;
+ if (t) {
+ y = 1900+t->tm_year;
+ m = t->tm_mon+1;
+ d = t->tm_mday;
+ }
+ switch(type) {
+ case 1:
+ if (sscanf(text, "---%d", &d) != 1) {
+ yyerror("invalid date");
+ }
+ break;
+ case 2:
+ if (sscanf(text, "--%d-%d", &m, &d) != 2) {
+ yyerror("invalid date");
+ }
+ break;
+ case 3:
+ if (sscanf(text, "%d-%d-%d", &y, &m, &d) != 3) {
+ yyerror("invalid date");
+ }
+ break;
+ case 4:
+ if (sscanf(text, "%d-%d-%d-%d-%d-%d", &y, &m, &d, &h, &mi, &s) != 6) {
+ yyerror("invalid date");