update pointer after ensure_solid_xref call

After calling ensure_solid_xref, the pdf_xref pointer must be updated
in case ensure_solid_xref has reallocated the sections table or uses
a different section table than originally used. Commit
e767bd783d91ae88cd79da19e79afb2c36bcf32a fails to do so in one case.

TODO: Why does pdf_xref_find_subsection solidify xref section 0 instead
of xref section sub?
fix memory leaks

Commit 5add23c7233c3f34fdfa6387873b1d3bdb93e1d6 and commit
2f4cdd4fd0580e3121773e89a7c6e7a9e1ffa54b introduced three memory leaks
which only appear in error cases:
* unzip.c leaks if a ZIP archive uses a compression method other than
  store or Deflate
* xps-zip.c leaks if fz_open_archive_with_stream throws for broken
  ZIP archives
* xps-zip.c leaks also if a piece of a split file is missing
make xps_read_part report correct part sizes

Starting with commit 2f4cdd4fd0580e3121773e89a7c6e7a9e1ffa54b,
xps_read_part zero-terminates the read data. It does however also count
that zero-terminator to the part's size which confuses callers handling
non-text data.
prevent warning C4090

MSVC complains about using const char** as argument to qsort or free
which both expects pointers to (pointers to)* non-const values. Adding
type casts fixes the warning.