Sure. I'll do that.

On old architectures it would be easy enough to use a typedef to 'create'
intptr_t, so any compatibility problems that such a patch introduces will
be easily fixed.

On Tue, Nov 10, 2015 at 5:32 PM, Daniel Veillard <veill...@redhat.com>
wrote:

> On Tue, Nov 10, 2015 at 01:04:51PM -0800, Bruce Dawson wrote:
> > Resending now that I've joined the mailing list...
> >
> > While building 64-bit Chromium with VC++ 2015 Update 1 I noticed a
> > significant number of pointer truncation warnings in libxml, especially
> in
> > xpath.c. A typical warning is:
> >
> > warning C4311: 'type cast': pointer truncation from 'xmlChar *' to 'long'
> >
> > which triggers on the last two lines of this block:
> >
> > case XML_ELEMENT_NODE:
> >     if (node2->type == XML_ELEMENT_NODE) {
> > if ((0 > (long) node1->content) && /* TODO: Would a != 0 suffice here? */
> >     (0 > (long) node2->content) &&
> >
> > The intent is not entirely clear but if these are supposed to be NULL
> > checks then they could easily give the wrong result. In the VC++ world
> > 'long' is always a 32-bit type, so converting a pointer to a long both
> > throws away the top 32 bits and also makes it a signed type. That means
> > that pointers to the first 2 GB of address space will behave as expected,
> > and pointers beyond that will have a 50% chance of behaving incorrectly!
> >
> > Another example is these two conversions. The code is apparently trying
> to
> > sort by content address, but on 64-bit Windows builds it will just be
> > sorting by the bottom 32 bits of the content address.
> > l1 = -((long) node1->content);
> > l2 = -((long) node2->content);
> > if (l1 < l2)
> >    return(1);
> > if (l1 > l2)
> >    return(-1);
> >     }
> >
> > This is not a problem with gcc or clang because their 64-bit builds have
> > 64-bit long, but the C/C++ standard do not mandate and that is not the
> case
> > with VC++.
> >
> > I think that the correct type would be ptrdiff_t, or size_t, or intptr_t,
> > or uintptr_t. I've attached the full set of warnings in case that is of
> any
> > assistance. Even though some of these warnings do not indicate actual
> bugs
> > it would still be best to use the correct type in order to avoid
> confusion
> > and warnings.
> >
>
>   Sounds like intptr_t would be the proper type to use for those, I just
> wonder what kind of old arches will break if they don't have it.
>
> Can you come up with a patch which just change the casts and possibly the
> target
> types ?
>
> Daniel
>
> --
> Daniel Veillard      | Open Source and Standards, Red Hat
> veill...@redhat.com  | libxml Gnome XML XSLT toolkit  http://xmlsoft.org/
> http://veillard.com/ | virtualization library  http://libvirt.org/
>



-- 
Bruce Dawson
_______________________________________________
xml mailing list, project page  http://xmlsoft.org/
xml@gnome.org
https://mail.gnome.org/mailman/listinfo/xml

Reply via email to