Patchwork D6196: cext: make revlog.c PY_SSIZE_T_CLEAN

login
register
mail settings
Submitter Yuya Nishihara
Date April 9, 2019, 1:03 p.m.
Message ID <20190409220340.81ab9b3d8a06f3ed88ee272c@tcha.org>
Download mbox | patch
Permalink /patch/39547/
State New
Headers show

Comments

Yuya Nishihara - April 9, 2019, 1:03 p.m.
>     4   org.python.python             	0x00000001000eb761 va_build_value + 737
>     5   org.python.python             	0x00000001000eb837 _Py_BuildValue_SizeT + 167

Maybe we shouldn't trust the Python doc too much, which says 's#' of
Py_BuildValue() takes an int.

https://docs.python.org/2/c-api/arg.html#c.Py_BuildValue

Can you test if this patch fixes the problem?

```
```
phabricator - April 9, 2019, 1:05 p.m.
yuja added a comment.


  >   4   org.python.python             	0x00000001000eb761 va_build_value + 737
  >   5   org.python.python             	0x00000001000eb837 _Py_BuildValue_SizeT + 167
  
  Maybe we shouldn't trust the Python doc too much, which says 's#' of
  Py_BuildValue() takes an int.
  
  https://docs.python.org/2/c-api/arg.html#c.Py_BuildValue
  
  Can you test if this patch fixes the problem?
  
    diff --git a/mercurial/cext/parsers.c b/mercurial/cext/parsers.c
    --- a/mercurial/cext/parsers.c
    +++ b/mercurial/cext/parsers.c
    @@ -184,7 +184,8 @@ static PyObject *parse_dirstate(PyObject
     		goto quit;
     	}
     
    -	parents = Py_BuildValue(PY23("s#s#", "y#y#"), str, 20, str + 20, 20);
    +	parents = Py_BuildValue(PY23("s#s#", "y#y#"), str, (Py_ssize_t)20,
    +	                        str + 20, (Py_ssize_t)20);
     	if (!parents) {
     		goto quit;
     	}
    diff --git a/mercurial/cext/revlog.c b/mercurial/cext/revlog.c
    --- a/mercurial/cext/revlog.c
    +++ b/mercurial/cext/revlog.c
    @@ -366,7 +366,7 @@ static PyObject *index_get(indexObject *
     
     	entry = Py_BuildValue(tuple_format, offset_flags, comp_len, uncomp_len,
     	                      base_rev, link_rev, parent_1, parent_2, c_node_id,
    -	                      20);
    +	                      (Py_ssize_t)20);
     
     	if (entry) {
     		PyObject_GC_UnTrack(entry);
    @@ -3017,8 +3017,9 @@ void revlog_module_init(PyObject *mod)
     	PyModule_AddObject(mod, "nodetree", (PyObject *)&nodetreeType);
     
     	if (!nullentry) {
    -		nullentry = Py_BuildValue(PY23("iiiiiiis#", "iiiiiiiy#"), 0, 0,
    -		                          0, -1, -1, -1, -1, nullid, 20);
    +		nullentry =
    +		    Py_BuildValue(PY23("iiiiiiis#", "iiiiiiiy#"), 0, 0, 0, -1,
    +		                  -1, -1, -1, nullid, (Py_ssize_t)20);
     	}
     	if (nullentry)
     		PyObject_GC_UnTrack(nullentry);

REPOSITORY
  rHG Mercurial

REVISION DETAIL
  https://phab.mercurial-scm.org/D6196

To: indygreg, #hg-reviewers, pulkit
Cc: yuja, mharbison72, mercurial-devel

Patch

diff --git a/mercurial/cext/parsers.c b/mercurial/cext/parsers.c
--- a/mercurial/cext/parsers.c
+++ b/mercurial/cext/parsers.c
@@ -184,7 +184,8 @@  static PyObject *parse_dirstate(PyObject
 		goto quit;
 	}
 
-	parents = Py_BuildValue(PY23("s#s#", "y#y#"), str, 20, str + 20, 20);
+	parents = Py_BuildValue(PY23("s#s#", "y#y#"), str, (Py_ssize_t)20,
+	                        str + 20, (Py_ssize_t)20);
 	if (!parents) {
 		goto quit;
 	}
diff --git a/mercurial/cext/revlog.c b/mercurial/cext/revlog.c
--- a/mercurial/cext/revlog.c
+++ b/mercurial/cext/revlog.c
@@ -366,7 +366,7 @@  static PyObject *index_get(indexObject *
 
 	entry = Py_BuildValue(tuple_format, offset_flags, comp_len, uncomp_len,
 	                      base_rev, link_rev, parent_1, parent_2, c_node_id,
-	                      20);
+	                      (Py_ssize_t)20);
 
 	if (entry) {
 		PyObject_GC_UnTrack(entry);
@@ -3017,8 +3017,9 @@  void revlog_module_init(PyObject *mod)
 	PyModule_AddObject(mod, "nodetree", (PyObject *)&nodetreeType);
 
 	if (!nullentry) {
-		nullentry = Py_BuildValue(PY23("iiiiiiis#", "iiiiiiiy#"), 0, 0,
-		                          0, -1, -1, -1, -1, nullid, 20);
+		nullentry =
+		    Py_BuildValue(PY23("iiiiiiis#", "iiiiiiiy#"), 0, 0, 0, -1,
+		                  -1, -1, -1, nullid, (Py_ssize_t)20);
 	}
 	if (nullentry)
 		PyObject_GC_UnTrack(nullentry);