From: James Muscat Date: Tue, 4 Sep 2012 12:18:04 +0000 (+0800) Subject: EXSLT date normalization fix X-Git-Tag: v1.1.28~31 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=4ad8f1215e624188416d0f913cad972b9807614e;p=platform%2Fupstream%2Flibxslt.git 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. --- 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 @@ + + + + + + + + +