proposed_upstream__revlog_s390x_part1
authorDebian Python Team <team+python@tracker.debian.org>
Wed, 25 Aug 2021 17:54:04 +0000 (18:54 +0100)
committerJulien Cristau <jcristau@debian.org>
Wed, 25 Aug 2021 17:54:04 +0000 (18:54 +0100)
# HG changeset patch
# User Julien Cristau <jcristau@mozilla.com>
# Date 1629801874 -7200
#      Tue Aug 24 12:44:34 2021 +0200
# Branch stable
# Node ID 518dd67482c0bde8636d1a5e6f10cb369b522e1f
# Parent  df94c13ddf60b5c355db04d9a6dde9ce80d58df3
revlog: fix type confusion with sidedata_comp_len (issue6580)

The format string uses "i" (int) for sidedata_comp_len, so we shouldn't
be passing a pointer to Py_ssize_t to PyArg_ParseTuple.  On 64-bit
big-endian, this would result in python only writing to the upper 32
bits, and things go downhill from there.

Differential Revision: https://phab.mercurial-scm.org/D11334

Gbp-Pq: Name proposed_upstream__revlog_s390x_part1.patch

mercurial/cext/revlog.c

index ea255f68fb9e03014f80d837978f452cc06f2493..1ea4d4f75799761b63a09e67bf8a8ed2d3e42410 100644 (file)
@@ -452,9 +452,10 @@ static int node_check(Py_ssize_t nodelen, PyObject *obj, char **node)
 static PyObject *index_append(indexObject *self, PyObject *obj)
 {
        uint64_t offset_flags, sidedata_offset;
-       int rev, comp_len, uncomp_len, base_rev, link_rev, parent_1, parent_2;
+       int rev, comp_len, uncomp_len, base_rev, link_rev, parent_1, parent_2,
+           sidedata_comp_len;
        char data_comp_mode, sidedata_comp_mode;
-       Py_ssize_t c_node_id_len, sidedata_comp_len;
+       Py_ssize_t c_node_id_len;
        const char *c_node_id;
        char comp_field;
        char *data;
@@ -534,9 +535,8 @@ static PyObject *index_append(indexObject *self, PyObject *obj)
 static PyObject *index_replace_sidedata_info(indexObject *self, PyObject *args)
 {
        uint64_t offset_flags, sidedata_offset;
-       int rev;
+       int rev, sidedata_comp_len;
        char comp_mode;
-       Py_ssize_t sidedata_comp_len;
        char *data;
 #if LONG_MAX == 0x7fffffffL
        const char *const sidedata_format = PY23("nKiKB", "nKiKB");