Switched from unsigned long to ptrdiff_t in parser.c

Using unsigned long instead of ptrdiff_t results in non-zero
pointer deltas being stored as zero delta, giving incorrect offsets
into arrays and hence out of bounds reads.

This patch fixes the issue in all places in parser.c and adds a macro
to reduce the chances of cut-and-paste errors.

Only affects platforms where 'sizeof(long) < sizeof(size_t)' like
64-bit Windows.

See https://bugs.chromium.org/p/chromium/issues/detail?id=894933

Closes #44.
1 file changed
tree: 5c6039d204645a86fa8c69f79560cd376af4ee53
  1. bakefile/
  2. doc/
  3. example/
  4. include/
  5. macos/
  6. optim/
  7. os400/
  8. python/
  9. result/
  10. test/
  11. vms/
  12. VxWorks/
  13. win32/
  14. xstc/
  15. .gitignore
  16. .travis.yml
  17. acinclude.m4
  18. AUTHORS
  19. autogen.sh
  20. buf.c
  21. buf.h
  22. build_glob.py
  23. c14n.c
  24. catalog.c
  25. ChangeLog
  26. check-relaxng-test-suite.py
  27. check-relaxng-test-suite2.py
  28. check-xinclude-test-suite.py
  29. check-xml-test-suite.py
  30. check-xsddata-test-suite.py
  31. chvalid.c
  32. chvalid.def
  33. configure.ac
  34. CONTRIBUTING
  35. Copyright
  36. dbgen.pl
  37. dbgenattr.pl
  38. debugXML.c
  39. dict.c
  40. DOCBparser.c
  41. elfgcchack.h
  42. enc.h
  43. encoding.c
  44. entities.c
  45. error.c
  46. genChRanges.py
  47. gentest.py
  48. genUnicode.py
  49. global.data
  50. globals.c
  51. hash.c
  52. HTMLparser.c
  53. HTMLtree.c
  54. INSTALL.libxml2
  55. legacy.c
  56. libxml-2.0-uninstalled.pc.in
  57. libxml-2.0.pc.in
  58. libxml.3
  59. libxml.h
  60. libxml.m4
  61. libxml.spec.in
  62. libxml2-config.cmake.in
  63. libxml2.doap
  64. libxml2.syms
  65. list.c
  66. MAINTAINERS
  67. Makefile.am
  68. Makefile.tests
  69. Makefile.win
  70. nanoftp.c
  71. nanohttp.c
  72. NEWS
  73. parser.c
  74. parserInternals.c
  75. pattern.c
  76. README
  77. README.cvs-commits
  78. README.tests
  79. README.zOS
  80. regressions.py
  81. regressions.xml
  82. relaxng.c
  83. rngparser.c
  84. runsuite.c
  85. runtest.c
  86. runxmlconf.c
  87. save.h
  88. SAX.c
  89. SAX2.c
  90. schematron.c
  91. testapi.c
  92. testAutomata.c
  93. testC14N.c
  94. testchar.c
  95. testdict.c
  96. testdso.c
  97. testHTML.c
  98. testlimits.c
  99. testModule.c
  100. testOOM.c
  101. testOOMlib.c
  102. testOOMlib.h
  103. testReader.c
  104. testrecurse.c
  105. testRegexp.c
  106. testRelax.c
  107. testSAX.c
  108. testSchemas.c
  109. testThreads.c
  110. testURI.c
  111. testXPath.c
  112. threads.c
  113. timsort.h
  114. TODO
  115. TODO_SCHEMAS
  116. tree.c
  117. trio.c
  118. trio.h
  119. triodef.h
  120. trionan.c
  121. trionan.h
  122. triop.h
  123. triostr.c
  124. triostr.h
  125. uri.c
  126. valid.c
  127. xinclude.c
  128. xlink.c
  129. xml2-config.1
  130. xml2-config.in
  131. xml2Conf.sh.in
  132. xmlcatalog.c
  133. xmlIO.c
  134. xmllint.c
  135. xmlmemory.c
  136. xmlmodule.c
  137. xmlreader.c
  138. xmlregexp.c
  139. xmlsave.c
  140. xmlschemas.c
  141. xmlschemastypes.c
  142. xmlstring.c
  143. xmlunicode.c
  144. xmlwriter.c
  145. xpath.c
  146. xpointer.c
  147. xzlib.c
  148. xzlib.h