On Thu, Oct 13, 2011 at 02:27:33PM +0100, Nick Pope wrote:
> See https://bugzilla.gnome.org/show_bug.cgi?id=653724
> ---
>  xmlschemastypes.c |    5 +++--
>  1 files changed, 3 insertions(+), 2 deletions(-)
> 
> diff --git a/xmlschemastypes.c b/xmlschemastypes.c
> index 1a5454c..80725b4 100644
> --- a/xmlschemastypes.c
> +++ b/xmlschemastypes.c
> @@ -3553,7 +3553,8 @@ xmlSchemaCompareDecimals(xmlSchemaValPtr x, 
> xmlSchemaValPtr y)
>  static int
>  xmlSchemaCompareDurations(xmlSchemaValPtr x, xmlSchemaValPtr y)
>  {
> -    long carry, mon, day;
> +    long long carry;
> +    long mon, day;
>      double sec;
>      int invert = 1;
>      long xmon, xday, myear, minday, maxday;
> @@ -3569,7 +3570,7 @@ xmlSchemaCompareDurations(xmlSchemaValPtr x, 
> xmlSchemaValPtr y)
>  
>      /* seconds */
>      sec = x->value.dur.sec - y->value.dur.sec;
> -    carry = (long)sec / SECS_PER_DAY;
> +    carry = (long long)sec / SECS_PER_DAY;
>      sec -= (double)(carry * SECS_PER_DAY);
>  
>      /* days */

  Hum, I would love to take that patch, but I don't use long long in
libxml2 for portability. I reproduced the issue on a 32 bit machine.
After looking a bit at the issue it's not needed, the problem is due to
the cast to double should be moved to the carry value when computing the
final sec value. I end up with a simpler patch which seems to work
exactly in the same way as yours, but without using long long type :-)

------------------------------------------------
diff --git a/xmlschemastypes.c b/xmlschemastypes.c
index 1a5454c..834b261 100644
--- a/xmlschemastypes.c
+++ b/xmlschemastypes.c
@@ -3569,8 +3569,8 @@ xmlSchemaCompareDurations(xmlSchemaValPtr x, 
xmlSchemaValPtr y)
 
     /* seconds */
     sec = x->value.dur.sec - y->value.dur.sec;
-    carry = (long)sec / SECS_PER_DAY;
-    sec -= (double)(carry * SECS_PER_DAY);
+    carry = (long)(sec / SECS_PER_DAY);
+    sec -= ((double)carry) * SECS_PER_DAY;
 
     /* days */
     day = x->value.dur.day - y->value.dur.day + carry;

------------------------------------------------

  Since that fixed the issue too on 32 bits I'm pushing this patch
instead, please confirm it still works for you :)

   thanks !

Daniel

-- 
Daniel Veillard      | libxml Gnome XML XSLT toolkit  http://xmlsoft.org/
[email protected]  | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library  http://libvirt.org/
_______________________________________________
xml mailing list, project page  http://xmlsoft.org/
[email protected]
http://mail.gnome.org/mailman/listinfo/xml

Reply via email to