[Python-checkins] cpython: Issue #22218: Fix "comparison between signed and unsigned integers" warnings in

victor.stinner python-checkins at python.org
Sun Aug 17 21:07:28 CEST 2014


http://hg.python.org/cpython/rev/ca5eef14c1ab
changeset:   92139:ca5eef14c1ab
user:        Victor Stinner <victor.stinner at gmail.com>
date:        Sun Aug 17 21:05:55 2014 +0200
summary:
  Issue #22218: Fix "comparison between signed and unsigned integers" warnings in
Modules/_pickle.c.

files:
  Modules/_pickle.c |  21 +++++++++++----------
  1 files changed, 11 insertions(+), 10 deletions(-)


diff --git a/Modules/_pickle.c b/Modules/_pickle.c
--- a/Modules/_pickle.c
+++ b/Modules/_pickle.c
@@ -420,22 +420,22 @@
 Pdata_grow(Pdata *self)
 {
     PyObject **data = self->data;
-    Py_ssize_t allocated = self->allocated;
-    Py_ssize_t new_allocated;
+    size_t allocated = (size_t)self->allocated;
+    size_t new_allocated;
 
     new_allocated = (allocated >> 3) + 6;
     /* check for integer overflow */
-    if (new_allocated > PY_SSIZE_T_MAX - allocated)
+    if (new_allocated > (size_t)PY_SSIZE_T_MAX - allocated)
         goto nomemory;
     new_allocated += allocated;
-    if (new_allocated > (PY_SSIZE_T_MAX / sizeof(PyObject *)))
+    if (new_allocated > ((size_t)PY_SSIZE_T_MAX / sizeof(PyObject *)))
         goto nomemory;
     data = PyMem_REALLOC(data, new_allocated * sizeof(PyObject *));
     if (data == NULL)
         goto nomemory;
 
     self->data = data;
-    self->allocated = new_allocated;
+    self->allocated = (Py_ssize_t)new_allocated;
     return 0;
 
   nomemory:
@@ -850,7 +850,7 @@
 static void
 _write_size64(char *out, size_t value)
 {
-    int i;
+    size_t i;
 
     assert(sizeof(size_t) <= 8);
 
@@ -2118,12 +2118,13 @@
     char header[9];
     Py_ssize_t len;
 
+    assert(size >= 0);
     if (size <= 0xff && self->proto >= 4) {
         header[0] = SHORT_BINUNICODE;
         header[1] = (unsigned char)(size & 0xff);
         len = 2;
     }
-    else if (size <= 0xffffffffUL) {
+    else if ((size_t)size <= 0xffffffffUL) {
         header[0] = BINUNICODE;
         header[1] = (unsigned char)(size & 0xff);
         header[2] = (unsigned char)((size >> 8) & 0xff);
@@ -4505,10 +4506,10 @@
 calc_binsize(char *bytes, int nbytes)
 {
     unsigned char *s = (unsigned char *)bytes;
-    int i;
+    Py_ssize_t i;
     size_t x = 0;
 
-    for (i = 0; i < nbytes && i < sizeof(size_t); i++) {
+    for (i = 0; i < nbytes && (size_t)i < sizeof(size_t); i++) {
         x |= (size_t) s[i] << (8 * i);
     }
 
@@ -4527,7 +4528,7 @@
 calc_binint(char *bytes, int nbytes)
 {
     unsigned char *s = (unsigned char *)bytes;
-    int i;
+    Py_ssize_t i;
     long x = 0;
 
     for (i = 0; i < nbytes; i++) {

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list