From 4ad8f1215e624188416d0f913cad972b9807614e Mon Sep 17 00:00:00 2001 From: James Muscat Date: Tue, 4 Sep 2012 20:18:04 +0800 Subject: [PATCH] EXSLT date normalization fix https://bugzilla.gnome.org/show_bug.cgi?id=626855 Dates with timezones but no time components are not normalized correctly Using xsltproc v1.1.26: $ xsltproc --version Using libxml 20706, libxslt 10126 and libexslt 815 xsltproc was compiled against libxml 20704, libxslt 10126 and libexslt 815 libxslt 10126 was compiled against libxml 20704 libexslt 815 was compiled against libxml 20704 Dates that have timezone offsets specified but no time components, for example "1970-01-01+01:00", are not normalized correctly; the timezone part is truncated: date:seconds("1970-01-01") = 0 date:seconds("1970-01-01+01:00") = 0 (not -3600 as expected) Alters the conditions under which exsltDateNormalize() returns without normalizing, and adds test cases demonstrating the new behaviour. --- libexslt/date.c | 2 +- tests/exslt/date/seconds.1.out | 16 ++++++++++++++++ tests/exslt/date/seconds.1.xml | 9 +++++++++ 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/libexslt/date.c b/libexslt/date.c index b692bb4..18523d0 100644 --- a/libexslt/date.c +++ b/libexslt/date.c @@ -1602,7 +1602,7 @@ exsltDateNormalize (exsltDateValPtr dt) if (dt == NULL) return; - if (((dt->type & XS_TIME) != XS_TIME) || (dt->value.date.tzo == 0)) + if (((dt->type & XS_TIME) != XS_TIME) && (dt->value.date.tzo == 0)) return; dur = exsltDateCreateDate(XS_DURATION); diff --git a/tests/exslt/date/seconds.1.out b/tests/exslt/date/seconds.1.out index 3447bf8..c0eb72c 100644 --- a/tests/exslt/date/seconds.1.out +++ b/tests/exslt/date/seconds.1.out @@ -35,3 +35,19 @@ seconds : 0001-01-01T00:00:00 result : -6.21355968e+10 seconds : -0001-01-01T00:00:00 result : -6.21671328e+10 +seconds : 1970-01-01 +result : 0 +seconds : 1970-01-01Z +result : 0 +seconds : 1970-01-01-11:00 +result : 39600 +seconds : 1970-01-01+11:00 +result : -39600 +seconds : 1970-01-01-12:00 +result : 43200 +seconds : 1970-01-01+12:00 +result : -43200 +seconds : 1970-01-01-13:00 +result : 46800 +seconds : 1970-01-01+13:00 +result : -46800 diff --git a/tests/exslt/date/seconds.1.xml b/tests/exslt/date/seconds.1.xml index 5e0a664..24d58fb 100644 --- a/tests/exslt/date/seconds.1.xml +++ b/tests/exslt/date/seconds.1.xml @@ -20,5 +20,14 @@ + + + + + + + + + -- 2.7.4