From: Mark Wooding Date: Thu, 26 May 2016 08:26:09 +0000 (+0100) Subject: *.c: Declare `PY_SSIZE_T_CLEAN'. X-Git-Tag: 1.2.0~45 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/catacomb-python/commitdiff_plain/6b54260d1f5312a3ec58be3ee1eb168ddf9cf2e2 *.c: Declare `PY_SSIZE_T_CLEAN'. Now we can process large strings on 64-bit targets. Err, win? --- diff --git a/algorithms.c b/algorithms.c index 2f9889d..3f9d4b7 100644 --- a/algorithms.c +++ b/algorithms.c @@ -462,7 +462,7 @@ static PyObject *gcipher_pynew(PyTypeObject *ty, PyObject *arg, PyObject *kw) { char *kwlist[] = { "k", 0 }; char *k; - int sz; + Py_ssize_t sz; if (!PyArg_ParseTupleAndKeywords(arg, kw, "s#:new", kwlist, &k, &sz)) goto end; @@ -511,7 +511,7 @@ static PyObject *gccget_blksz(PyObject *me, void *hunoz) static PyObject *gcmeth_encrypt(PyObject *me, PyObject *arg) { char *p; - int sz; + Py_ssize_t sz; PyObject *rc = 0; if (!PyArg_ParseTuple(arg, "s#:encrypt", &p, &sz)) return (0); @@ -537,7 +537,7 @@ static PyObject *gcmeth_enczero(PyObject *me, PyObject *arg) static PyObject *gcmeth_decrypt(PyObject *me, PyObject *arg) { char *p; - int sz; + Py_ssize_t sz; PyObject *rc = 0; if (!PyArg_ParseTuple(arg, "s#:decrypt", &p, &sz)) return (0); @@ -563,7 +563,7 @@ static PyObject *gcmeth_deczero(PyObject *me, PyObject *arg) static PyObject *gcmeth_setiv(PyObject *me, PyObject *arg) { char *p; - int sz; + Py_ssize_t sz; if (!PyArg_ParseTuple(arg, "s#:setiv", &p, &sz)) goto end; if (!GC_CLASS(GCIPHER_C(me))->blksz) VALERR("not a block cipher mode"); @@ -766,7 +766,7 @@ static PyObject *gchget_bufsz(PyObject *me, void *hunoz) static PyObject *ghmeth_hash(PyObject *me, PyObject *arg) { char *p; - int sz; + Py_ssize_t sz; if (!PyArg_ParseTuple(arg, "s#:hash", &p, &sz)) return (0); GH_HASH(GHASH_H(me), p, sz); RETURN_ME; @@ -788,7 +788,7 @@ DOUINTCONV(GHMETH_HASHU_) static PyObject *ghmeth_hashbuf##w(PyObject *me, PyObject *arg) \ { \ char *p; \ - int sz; \ + Py_ssize_t sz; \ if (!PyArg_ParseTuple(arg, "s#:hashbuf" #w, &p, &sz)) goto end; \ if (sz > MASK##n) TYERR("string too long"); \ GH_HASHBUF##W(GHASH_H(me), p, sz); \ @@ -950,7 +950,7 @@ static PyObject *gmac_pynew(PyTypeObject *ty, PyObject *arg, PyObject *kw) { char *kwlist[] = { "k", 0 }; char *k; - int sz; + Py_ssize_t sz; if (!PyArg_ParseTupleAndKeywords(arg, kw, "s#:new", kwlist, &k, &sz)) goto end; @@ -1212,7 +1212,7 @@ static PyObject *poly1305hash_pynew(PyTypeObject *ty, poly1305key_pyobj *pk = (poly1305key_pyobj *)ty; poly1305hash_pyobj *ph; char *m = 0; - int sz; + Py_ssize_t sz; if (!PyArg_ParseTupleAndKeywords(arg, kw, "|s#:new", kwlist, &m, &sz)) return (0); @@ -1233,7 +1233,7 @@ static PyObject *poly1305key_pynew(PyTypeObject *ty, char *kwlist[] = { "k", 0 }; poly1305key_pyobj *pk; char *k; - int sz; + Py_ssize_t sz; if (!PyArg_ParseTupleAndKeywords(arg, kw, "s#:new", kwlist, &k, &sz)) goto end; @@ -1285,7 +1285,7 @@ static PyObject *polymeth_copy(PyObject *me, PyObject *arg) static PyObject *polymeth_hash(PyObject *me, PyObject *arg) { char *p; - int sz; + Py_ssize_t sz; if (!PyArg_ParseTuple(arg, "s#:hash", &p, &sz)) return (0); poly1305_hash(P1305_CTX(me), p, sz); RETURN_ME; @@ -1308,7 +1308,7 @@ DOUINTCONV(POLYMETH_HASHU_) static PyObject *polymeth_hashbuf##w(PyObject *me, PyObject *arg) \ { \ char *p; \ - int sz; \ + Py_ssize_t sz; \ octet b[SZ_##W]; \ if (!PyArg_ParseTuple(arg, "s#:hashbuf" #w, &p, &sz)) goto end; \ if (sz > MASK##n) TYERR("string too long"); \ @@ -1542,7 +1542,7 @@ static PyTypeObject poly1305hash_pytype_skel = { { \ dance##_ctx dance; \ char *k, *n; \ - int ksz, nsz; \ + Py_ssize_t ksz, nsz; \ PyObject *rc; \ if (!PyArg_ParseTuple(arg, "s#s#:" #hdance "_prf", \ &k, &ksz, &n, &nsz)) \ @@ -1626,7 +1626,7 @@ static PyObject *gprp_pynew(PyTypeObject *ty, PyObject *arg, PyObject *kw) { char *kwlist[] = { "key", 0 }; char *k; - int sz; + Py_ssize_t sz; const prpinfo *prp = GCPRP_PRP(ty); PyObject *me; @@ -1672,7 +1672,7 @@ static PyObject *gcpget_blksz(PyObject *me, void *hunoz) static PyObject *gpmeth_encrypt(PyObject *me, PyObject *arg) { char *p; - int n; + Py_ssize_t n; PyObject *rc = 0; if (!PyArg_ParseTuple(arg, "s#:encrypt", &p, &n)) goto end; @@ -1686,7 +1686,7 @@ end: static PyObject *gpmeth_decrypt(PyObject *me, PyObject *arg) { char *p; - int n; + Py_ssize_t n; PyObject *rc = 0; if (!PyArg_ParseTuple(arg, "s#:decrypt", &p, &n)) goto end; diff --git a/buffer.c b/buffer.c index 6569516..43bf02d 100644 --- a/buffer.c +++ b/buffer.c @@ -53,7 +53,7 @@ static PyObject *buferr; static PyObject *rbuf_pynew(PyTypeObject *ty, PyObject *arg, PyObject *kw) { char *p, *q; - int n; + Py_ssize_t n; buf_pyobj *me = 0; static char *kwlist[] = { "data", 0 }; @@ -387,7 +387,7 @@ static PyObject *wbmeth_zero(PyObject *me, PyObject *arg) static PyObject *wbmeth_put(PyObject *me, PyObject *arg) { void *p; - int n; + Py_ssize_t n; if (!PyArg_ParseTuple(arg, "s#:put", &p, &n)) return (0); ensure(me, n); buf_put(BUF_B(me), p, n); assert(BOK(BUF_B(m))); @@ -410,7 +410,7 @@ DOUINTCONV(WBMETH_PUTU_) static PyObject *wbmeth_putblk##w(PyObject *me, PyObject *arg) \ { \ char *p; \ - int sz; \ + Py_ssize_t sz; \ if (!PyArg_ParseTuple(arg, "s#:putblk" #w, &p, &sz)) return (0); \ ensure(me, sz + SZ_##n); \ buf_putmem##w(BUF_B(me), p, sz); assert(BOK(BUF_B(me))); \ diff --git a/bytestring.c b/bytestring.c index b3b32de..b78ec14 100644 --- a/bytestring.c +++ b/bytestring.c @@ -54,7 +54,7 @@ static PyObject *bytestring_pynew(PyTypeObject *ty, PyObject *arg, PyObject *kw) { const char *p; - int n; + Py_ssize_t n; static char *kwlist[] = { "data", 0 }; if (!PyArg_ParseTupleAndKeywords(arg, kw, "s#:new", kwlist, &p, &n)) return (0); diff --git a/catacomb-python.h b/catacomb-python.h index 0949562..77c7eae 100644 --- a/catacomb-python.h +++ b/catacomb-python.h @@ -33,6 +33,8 @@ /*----- Header files ------------------------------------------------------*/ +#define PY_SSIZE_T_CLEAN + #include #include #include diff --git a/ec.c b/ec.c index 9d4d6e7..6dcf1cb 100644 --- a/ec.c +++ b/ec.c @@ -835,7 +835,7 @@ static PyObject *ecmeth_mmul(PyObject *me, PyObject *arg) static PyObject *meth__ECPtCurve_fromraw(PyObject *me, PyObject *arg) { char *p; - int len; + Py_ssize_t len; buf b; PyObject *rc = 0; ec_curve *cc; @@ -857,7 +857,7 @@ static PyObject *meth__ECPtCurve_os2ecp(PyObject *me, PyObject *arg, PyObject *kw) { char *p; - int len; + Py_ssize_t len; buf b; PyObject *rc = 0; ec_curve *cc; @@ -881,7 +881,7 @@ static PyObject *meth__ECPt_frombuf(PyObject *me, PyObject *arg) { buf b; char *p; - int sz; + Py_ssize_t sz; PyObject *rc = 0; ec pp = EC_INIT; diff --git a/group.c b/group.c index 5cc40e5..e591301 100644 --- a/group.c +++ b/group.c @@ -184,7 +184,7 @@ static PyObject *meth__DHInfo_gendsa(PyObject *me, unsigned steps = 0; dsa_seed ds; char *k; - int ksz; + Py_ssize_t ksz; pgev evt = { 0 }; char *kwlist[] = { "class", "pbits", "qbits", "seed", "event", "nsteps", 0 }; @@ -815,7 +815,7 @@ static PyObject *meth__GE_frombuf(PyObject *me, PyObject *arg) { buf b; char *p; - int n; + Py_ssize_t n; group *g; ge *x = 0; @@ -836,7 +836,7 @@ static PyObject *meth__GE_fromraw(PyObject *me, PyObject *arg) { buf b; char *p; - int n; + Py_ssize_t n; group *g; ge *x = 0; @@ -857,7 +857,7 @@ static PyObject *meth__GE_fromstring(PyObject *me, PyObject *arg) { mptext_stringctx sc; char *p; - int n; + Py_ssize_t n; group *g; ge *x = 0; @@ -870,7 +870,7 @@ static PyObject *meth__GE_fromstring(PyObject *me, PyObject *arg) if (G_READ(g, x, &mptext_stringops, &sc)) VALERR("bad group element string"); return (Py_BuildValue("(Ns#)", ge_pywrap(me, x), - sc.buf, (int)(sc.lim - sc.buf))); + sc.buf, (Py_ssize_t)(sc.lim - sc.buf))); end: if (x) G_DESTROY(g, x); return (0); diff --git a/key.c b/key.c index a3cd200..8dec99c 100644 --- a/key.c +++ b/key.c @@ -414,7 +414,7 @@ end: static PyObject *kdmeth_lock(PyObject *me, PyObject *arg) { char *p; - int n; + Py_ssize_t n; PyObject *rc = 0; key_data *kd; @@ -445,7 +445,7 @@ end: static PyObject *meth__KeyData_decode(PyObject *me, PyObject *arg) { const char *p; - int n; + Py_ssize_t n; key_data *kd; PyObject *rc = 0; @@ -533,7 +533,7 @@ static PyObject *keydatabin_pynew(PyTypeObject *ty, PyObject *arg, PyObject *kw) { char *p; - int n; + Py_ssize_t n; unsigned f = 0; keydata_pyobj *me = 0; static char *kwlist[] = { "key", "flags", 0 }; @@ -610,7 +610,7 @@ static PyObject *keydataenc_pynew(PyTypeObject *ty, PyObject *arg, PyObject *kw) { char *p; - int n; + Py_ssize_t n; unsigned f = 0; keydata_pyobj *me = 0; static char *kwlist[] = { "key", "flags", 0 }; @@ -636,7 +636,7 @@ end: static PyObject *kdemeth_lock(PyObject *me, PyObject *arg) { char *hunoz; - int hukairz; + Py_ssize_t hukairz; if (!PyArg_ParseTuple(arg, "s#:lock", &hunoz, &hukairz)) goto end; KEYERR(KERR_WRONGTYPE); end: @@ -662,7 +662,7 @@ end: static PyObject *kdemeth_unlock(PyObject *me, PyObject *arg) { char *p; - int n; + Py_ssize_t n; int err; PyObject *rc = 0; key_data *kd; @@ -1969,7 +1969,7 @@ static PyObject *kfmeth_qtag(PyObject *me, PyObject *arg, PyObject *kw) } key_incref(*kd); rc = Py_BuildValue("(s#NN)", - d.buf, d.len, + d.buf, (Py_ssize_t)d.len, key_pywrap(me, k), keydata_pywrap(okd)); end: diff --git a/mp.c b/mp.c index 8f57ad1..eb6a496 100644 --- a/mp.c +++ b/mp.c @@ -711,7 +711,7 @@ STOREOP(storeb2c, 2c) { \ buf b; \ char *p; \ - int sz; \ + Py_ssize_t sz; \ PyObject *rc = 0; \ mp *x; \ \ @@ -909,7 +909,7 @@ static PyObject *meth__MP_fromstring(PyObject *me, { int r = 0; char *p; - int len; + Py_ssize_t len; PyObject *z = 0; mp *zz; mptext_stringctx sc; @@ -922,7 +922,8 @@ static PyObject *meth__MP_fromstring(PyObject *me, sc.buf = p; sc.lim = p + len; if ((zz = mp_read(MP_NEW, r, &mptext_stringops, &sc)) == 0) VALERR("bad integer"); - z = Py_BuildValue("(Ns#)", mp_pywrap(zz), sc.buf, (int)(sc.lim - sc.buf)); + z = Py_BuildValue("(Ns#)", mp_pywrap(zz), + sc.buf, (Py_ssize_t)(sc.lim - sc.buf)); end: return (z); } @@ -950,7 +951,7 @@ static PyObject *meth__MP_fibonacci(PyObject *me, PyObject *arg) static PyObject *meth__##py##_##name(PyObject *me, PyObject *arg) \ { \ char *p; \ - int len; \ + Py_ssize_t len; \ if (!PyArg_ParseTuple(arg, "Os#:" #name, &me, &p, &len)) return (0); \ return (pre##_pywrap(mp_##name(MP_NEW, p, len))); \ } @@ -2109,7 +2110,7 @@ static PyObject *meth__GF_fromstring(PyObject *me, { int r = 0; char *p; - int len; + Py_ssize_t len; PyObject *z = 0; mp *zz; mptext_stringctx sc; @@ -2125,7 +2126,8 @@ static PyObject *meth__GF_fromstring(PyObject *me, if (zz) MP_DROP(zz); VALERR("bad binary polynomial"); } - z = Py_BuildValue("(Ns#)", gf_pywrap(zz), sc.buf, (int)(sc.lim - sc.buf)); + z = Py_BuildValue("(Ns#)", gf_pywrap(zz), + sc.buf, (Py_ssize_t)(sc.lim - sc.buf)); end: return (z); } diff --git a/pubkey.c b/pubkey.c index 4c4eb1d..311152a 100644 --- a/pubkey.c +++ b/pubkey.c @@ -120,7 +120,7 @@ static PyObject *dsameth_sign(PyObject *me, PyObject *arg, PyObject *kw) { gdsa_sig s = GDSA_SIG_INIT; char *p; - int n; + Py_ssize_t n; mp *k = 0; PyObject *rc = 0; char *kwlist[] = { "msg", "k", 0 }; @@ -140,7 +140,7 @@ end: static PyObject *dsameth_verify(PyObject *me, PyObject *arg) { char *p; - int n; + Py_ssize_t n; gdsa_sig s = GDSA_SIG_INIT; PyObject *rc = 0; @@ -365,7 +365,7 @@ static PyObject *kcdsameth_sign(PyObject *me, PyObject *arg, PyObject *kw) { gkcdsa_sig s = GKCDSA_SIG_INIT; char *p; - int n; + Py_ssize_t n; mp *k = 0; PyObject *r = 0, *rc = 0; char *kwlist[] = { "msg", "k", 0 }; @@ -388,7 +388,7 @@ end: static PyObject *kcdsameth_verify(PyObject *me, PyObject *arg) { char *p; - int n, rn; + Py_ssize_t n, rn; gkcdsa_sig s = GKCDSA_SIG_INIT; PyObject *rc = 0; @@ -865,7 +865,7 @@ static PyObject *meth__p1crypt_encode(PyObject *me, { pkcs1 p1; char *m, *ep; - int msz, epsz; + Py_ssize_t msz, epsz; unsigned long nbits; PyObject *rc = 0; octet *b = 0; @@ -894,7 +894,7 @@ static PyObject *meth__p1crypt_decode(PyObject *me, { pkcs1 p1; char *ep; - int epsz; + Py_ssize_t epsz; unsigned long nbits; int n; PyObject *rc = 0; @@ -926,7 +926,7 @@ static PyObject *meth__p1sig_encode(PyObject *me, { pkcs1 p1; char *m, *ep; - int msz, epsz; + Py_ssize_t msz, epsz; unsigned long nbits; PyObject *rc = 0; octet *b = 0; @@ -955,7 +955,7 @@ static PyObject *meth__p1sig_decode(PyObject *me, { pkcs1 p1; char *ep; - int epsz; + Py_ssize_t epsz; unsigned long nbits; int n; PyObject *hukairz; @@ -988,7 +988,7 @@ static PyObject *meth__oaep_encode(PyObject *me, { oaep o; char *m, *ep; - int msz, epsz; + Py_ssize_t msz, epsz; unsigned long nbits; PyObject *rc = 0; octet *b = 0; @@ -1020,7 +1020,7 @@ static PyObject *meth__oaep_decode(PyObject *me, { oaep o; char *ep; - int epsz; + Py_ssize_t epsz; unsigned long nbits; int n; PyObject *rc = 0; @@ -1055,7 +1055,7 @@ static PyObject *meth__pss_encode(PyObject *me, { pss p; char *m; - int msz; + Py_ssize_t msz; unsigned long nbits; PyObject *rc = 0; octet *b = 0; @@ -1087,7 +1087,7 @@ static PyObject *meth__pss_decode(PyObject *me, { pss p; char *m; - int msz; + Py_ssize_t msz; unsigned long nbits; PyObject *rc = 0; octet *b = 0; diff --git a/rand.c b/rand.c index 784fd93..f163efa 100644 --- a/rand.c +++ b/rand.c @@ -173,7 +173,7 @@ end: static PyObject *grmeth_seedblock(PyObject *me, PyObject *arg) { char *p; - int n; + Py_ssize_t n; grand *r = GRAND_R(me); if (!PyArg_ParseTuple(arg, "s#:seedblock", &p, &n) || checkop(r, GRAND_SEEDBLOCK, "seedblock")) @@ -219,7 +219,7 @@ static PyObject *grmeth_mask(PyObject *me, PyObject *arg) { grand *r = GRAND_R(me); char *p, *q; - int sz; + Py_ssize_t sz; PyObject *rc; if (!PyArg_ParseTuple(arg, "s#:mask", &p, &sz)) return (0); @@ -452,7 +452,7 @@ static PyObject *trmeth_stretch(PyObject *me, PyObject *arg) static PyObject *trmeth_add(PyObject *me, PyObject *arg) { grand *r = GRAND_R(me); - char *p; int n; unsigned goodbits; + char *p; Py_ssize_t n; unsigned goodbits; if (!PyArg_ParseTuple(arg, "s#O&:add", &p, &n, convuint, &goodbits)) return (0); r->ops->misc(r, RAND_ADD, p, (size_t)n, goodbits); @@ -462,7 +462,7 @@ static PyObject *trmeth_add(PyObject *me, PyObject *arg) static PyObject *trmeth_key(PyObject *me, PyObject *arg) { grand *r = GRAND_R(me); - char *p; int n; + char *p; Py_ssize_t n; if (!PyArg_ParseTuple(arg, "s#:key", &p, &n)) return (0); r->ops->misc(r, RAND_KEY, p, (size_t)n); RETURN_ME; @@ -617,7 +617,7 @@ static PyObject *gcrand_pynew(PyTypeObject *ty, PyObject *arg, PyObject *kw) const gccrand_info *info = GCCRAND_INFO(ty); static char *kwlist[] = { "key", 0 }; char *k; - int n; + Py_ssize_t n; if (!PyArg_ParseTupleAndKeywords(arg, kw, "s#:new", kwlist, &k, &n)) goto end; @@ -633,7 +633,7 @@ static PyObject *gcirand_pynew(PyTypeObject *ty, PyObject *arg, PyObject *kw) uint32 i = 0; static char *kwlist[] = { "key", "i", 0 }; char *k; - int n; + Py_ssize_t n; if (!PyArg_ParseTupleAndKeywords(arg, kw, "s#O&:new", kwlist, &k, &n, convu32, &i)) @@ -651,7 +651,7 @@ static PyObject *gcnrand_pynew(PyTypeObject *ty, PyObject *arg, PyObject *kw) const gccrand_info *info = GCCRAND_INFO(ty); static char *kwlist[] = { "key", "nonce", 0 }; char *k, *n; - int ksz, nsz; + Py_ssize_t ksz, nsz; if (!PyArg_ParseTupleAndKeywords(arg, kw, "s#s#:new", kwlist, &k, &ksz, &n, &nsz)) diff --git a/share.c b/share.c index ad56d31..2caa718 100644 --- a/share.c +++ b/share.c @@ -113,7 +113,7 @@ static PyObject *gfsharesplit_pynew(PyTypeObject *ty, PyObject *arg, PyObject *kw) { char *p; - int n; + Py_ssize_t n; unsigned t; grand *r = &rand_global; gfshare_pyobj *s; @@ -228,7 +228,7 @@ static PyObject *gfsmeth_add(PyObject *me, PyObject *arg) { unsigned i; char *p; - int n; + Py_ssize_t n; if (!PyArg_ParseTuple(arg, "O&s#:add", convuint, &i, &p, &n)) goto end; if (i > 254) VALERR("index must be < 255"); if (n != GFSHARE_S(me)->sz) VALERR("bad share size");