From 6479b830e5963c91c30e611f8b91744ad733a4b4 Mon Sep 17 00:00:00 2001 From: Jason Harris Date: Tue, 1 Jun 2004 01:33:18 +0000 Subject: [PATCH] Fixing crash condition in ExtDateWidget. If initialized without a date argument, it was initialized to an invalid date, which caused a crash in the function ExtDate::daysInMonth(). Two fixes make the widget much more robust: + ExtDate::daysInMonth() and ExtDate::leapYear() now check the validity of the date first, and return sensible default values if the date is invalid. + the default ctor ExtDateWidget() now initializes to the current date, rather than an invalid date. This fixes the crash in the ScriptBuilder tool. CCMAIL: kstars-devel@kde.org svn path=/trunk/kdeedu/libkdeedu/; revision=316636 --- extdate/extdatetime.cpp | 11 +++++++++-- extdate/extdatewidget.cpp | 2 +- extdate/extdatewidget.h | 2 +- extdate/testwidget.cpp | 7 +++++++ extdate/testwidget.h | 4 ++++ 5 files changed, 22 insertions(+), 4 deletions(-) diff --git a/extdate/extdatetime.cpp b/extdate/extdatetime.cpp index 686fd3b..bf7d2cd 100644 --- a/extdate/extdatetime.cpp +++ b/extdate/extdatetime.cpp @@ -290,12 +290,19 @@ int ExtDate::dayOfYear() const int ExtDate::daysInMonth() const { - int a_month = month(); - return (a_month == 2) ? (leapYear(year()) ? 29 : 28) : m_monthLength[a_month-1] ; + if ( isValid() ) { + int m = month(); + int d = m_monthLength[m-1]; + if (m==2 && leapYear(year())) d++; + return d; + } else { + return 31; + } } int ExtDate::daysInYear() const { + if ( ! isValid() ) return 365; return (leapYear(year()) ? 366 : 365); } diff --git a/extdate/extdatewidget.cpp b/extdate/extdatewidget.cpp index 61627f2..7a869dd 100644 --- a/extdate/extdatewidget.cpp +++ b/extdate/extdatewidget.cpp @@ -56,7 +56,7 @@ public: ExtDateWidget::ExtDateWidget( QWidget *parent, const char *name ) : QWidget( parent, name ) { - init(ExtDate()); + init(ExtDate::currentDate()); setDate(ExtDate()); } diff --git a/extdate/extdatewidget.h b/extdate/extdatewidget.h index 851a372..e23b28f 100644 --- a/extdate/extdatewidget.h +++ b/extdate/extdatewidget.h @@ -39,7 +39,7 @@ class ExtDateWidget : public QWidget public: /** - * Constructs a date selection widget. + * Constructs a date selection widget, initialized to the current CPU date. */ ExtDateWidget( QWidget *parent=0, const char *name=0 ); diff --git a/extdate/testwidget.cpp b/extdate/testwidget.cpp index 8ecc7bb..5806c34 100644 --- a/extdate/testwidget.cpp +++ b/extdate/testwidget.cpp @@ -1,9 +1,11 @@ #include +#include #include #include #include #include "extdatepicker.h" +#include "extdatewidget.h" #include "testwidget.h" TestWidget::TestWidget( QWidget *p=0, const char *name=0 ) : KMainWindow( p, name ) { @@ -20,12 +22,17 @@ TestWidget::TestWidget( QWidget *p=0, const char *name=0 ) : KMainWindow( p, nam edpEdit = new KLineEdit(w); edpEdit->setReadOnly( TRUE ); + kdw = new KDateWidget( QDate::currentDate(), w ); + edw = new ExtDateWidget( ExtDate::currentDate(), w ); + glay->addWidget( kdpLabel, 0, 0 ); glay->addWidget( edpLabel, 0, 1 ); glay->addWidget( kdp, 1, 0 ); glay->addWidget( edp, 1, 1 ); glay->addWidget( kdpEdit, 2, 0 ); glay->addWidget( edpEdit, 2, 1 ); + glay->addWidget( kdw, 3, 0 ); + glay->addWidget( edw, 3, 1 ); setCentralWidget(w); diff --git a/extdate/testwidget.h b/extdate/testwidget.h index 0b97f5a..4da7611 100644 --- a/extdate/testwidget.h +++ b/extdate/testwidget.h @@ -5,7 +5,9 @@ class KDatePicker; class KLineEdit; +class KDateWidget; class ExtDatePicker; +class ExtDateWidget; class QGridLayout; class QDate; class ExtDate; @@ -24,6 +26,8 @@ class TestWidget : public KMainWindow { QGridLayout *glay; KDatePicker *kdp; ExtDatePicker *edp; + ExtDateWidget *edw; + KDateWidget *kdw; KLineEdit *kdpEdit, *edpEdit; }; -- 2.47.3