From c933021597618499e6da878b129aeac9308556e3 Mon Sep 17 00:00:00 2001
From: Frederic Culot <calcurse@culot.org>
Date: Tue, 16 Oct 2007 19:11:10 +0000
Subject: calendar_change_day() and calendar_move_*() updated to prevent user
 from entering an unsupported date

---
 src/calendar.c | 26 ++++++++++++++++++++------
 1 file changed, 20 insertions(+), 6 deletions(-)

(limited to 'src')

diff --git a/src/calendar.c b/src/calendar.c
index 9d75fbe..5523634 100755
--- a/src/calendar.c
+++ b/src/calendar.c
@@ -1,4 +1,4 @@
-/*	$calcurse: calendar.c,v 1.10 2007/08/12 13:09:02 culot Exp $	*/
+/*	$calcurse: calendar.c,v 1.11 2007/10/16 19:11:10 culot Exp $	*/
 
 /*
  * Calcurse - text-based organizer
@@ -339,7 +339,8 @@ calendar_change_day(void)
 	date_t today;
 	int dday, dmonth, dyear;
 	int wrong_day = 1;
-	char *mesg_line1 = _("The day you entered is not valid");
+	char *mesg_line1 = 
+	    _("The day you entered is not valid (should be between 01/01/1902 and 12/31/2037)");
 	char *mesg_line2 = _("Press [ENTER] to continue");
 	char *request_date = 
 	    _("Enter the day to go to [ENTER for today] : mm/dd/yyyy");
@@ -371,7 +372,7 @@ calendar_change_day(void)
 				/* basic check on entered date */
 				if ((dday <= 0) || (dday >= 32) || 
 				    (dmonth <= 0) || (dmonth >= 13) || 
-				    (dyear <= 0) || (dyear >= 3000))
+				    (dyear <= 1901) || (dyear >= 2038))
 					wrong_day = 1;
 
 				/* go to chosen day */
@@ -396,7 +397,10 @@ calendar_change_day(void)
 void
 calendar_move_right(void)
 {
-	if ((slctd_day.dd == 31) && (slctd_day.mm == 12)) {
+	if ((slctd_day.dd == 31) && (slctd_day.mm == 12) && 
+	    (slctd_day.yyyy == 2037))
+		return;
+	else if ((slctd_day.dd == 31) && (slctd_day.mm == 12)) {
 		slctd_day.dd = 0;
 		slctd_day.mm = 1;
 		slctd_day.yyyy++; 
@@ -411,7 +415,10 @@ calendar_move_right(void)
 void
 calendar_move_left(void)
 {
-	if ((slctd_day.dd == 1) && (slctd_day.mm == 1)) { 
+	if ((slctd_day.dd == 1) && (slctd_day.mm == 1) &&
+	    (slctd_day.yyyy == 1902))
+		return;
+	else if ((slctd_day.dd == 1) && (slctd_day.mm == 1)) { 
 		slctd_day.dd = 32;
 		slctd_day.mm = 12;
 		slctd_day.yyyy--;
@@ -426,7 +433,10 @@ calendar_move_left(void)
 void
 calendar_move_up(void)
 {
-	if ((slctd_day.dd <= 7) && (slctd_day.mm == 1)) { 
+	if ((slctd_day.dd <= 7) && (slctd_day.mm == 1) &&
+	    (slctd_day.yyyy == 1902))
+		return;
+	else if ((slctd_day.dd <= 7) && (slctd_day.mm == 1)) { 
 		slctd_day.dd = 31 - (7 - slctd_day.dd);
 		slctd_day.mm = 12;
 		slctd_day.yyyy--;
@@ -442,7 +452,11 @@ calendar_move_up(void)
 void
 calendar_move_down(void)
 {
+
 	if ((slctd_day.dd > days[slctd_day.mm - 1] - 7)
+	    && (slctd_day.mm == 12) && (slctd_day.yyyy == 2037))
+	       return;	
+	else if ((slctd_day.dd > days[slctd_day.mm - 1] - 7)
 	    && (slctd_day.mm == 12)) { 
 		slctd_day.dd = (7 - (31 - slctd_day.dd));
 		slctd_day.mm = 1;
-- 
cgit v1.2.3-70-g09d2