* For `mp', don't allow the `or' mask to be wider than the requested
result.
* For `range', insist that the limit is strictly positive, so that the
output range is actually inhabited.
These parallel currently unreleased fixes to the underlying library,
which are required for things to work properly; so bump the dependency.
Maintainer: Mark Wooding <mdw@distorted.org.uk>
Build-Depends: debhelper (>= 9), pkg-config,
python, python2.6-dev, python2.7-dev,
Maintainer: Mark Wooding <mdw@distorted.org.uk>
Build-Depends: debhelper (>= 9), pkg-config,
python, python2.6-dev, python2.7-dev,
- mlib-dev (>= 2.2.2.1), catacomb-dev (>= 2.2.0)
+ mlib-dev (>= 2.2.2.1), catacomb-dev (>= 2.2.5+14)
Standards-Version: 3.8.0
Package: python-catacomb
Standards-Version: 3.8.0
Package: python-catacomb
if (!PyArg_ParseTuple(arg, "O:range", &m)) return (0);
if (PyInt_Check(m)) {
long mm = PyInt_AS_LONG(m);
if (!PyArg_ParseTuple(arg, "O:range", &m)) return (0);
if (PyInt_Check(m)) {
long mm = PyInt_AS_LONG(m);
- if (mm < 0)
- goto negative;
+ if (mm <= 0)
+ goto notpos;
if (mm <= 0xffffffff)
return (PyInt_FromLong(grand_range(GRAND_R(me), mm)));
}
if ((x = getmp(m)) == 0)
goto end;
if (mm <= 0xffffffff)
return (PyInt_FromLong(grand_range(GRAND_R(me), mm)));
}
if ((x = getmp(m)) == 0)
goto end;
- if (MP_NEGP(x))
- goto negative;
+ if (!MP_POSP(x))
+ goto notpos;
y = mprand_range(MP_NEW, x, GRAND_R(me), 0);
MP_DROP(x);
return (mp_pywrap(y));
y = mprand_range(MP_NEW, x, GRAND_R(me), 0);
MP_DROP(x);
return (mp_pywrap(y));
-negative:
- TYERR("range must be nonnegative");
+notpos:
+ VALERR("range must be strictly positive");
end:
if (x) MP_DROP(x);
return (0);
end:
if (x) MP_DROP(x);
return (0);
static PyObject *grmeth_mp(PyObject *me, PyObject *arg, PyObject *kw)
{
size_t l;
static PyObject *grmeth_mp(PyObject *me, PyObject *arg, PyObject *kw)
{
size_t l;
char *kwlist[] = { "bits", "or", 0 };
if (!PyArg_ParseTupleAndKeywords(arg, kw, "O&|O&:mp", kwlist,
convszt, &l, convmpw, &o))
goto end;
char *kwlist[] = { "bits", "or", 0 };
if (!PyArg_ParseTupleAndKeywords(arg, kw, "O&|O&:mp", kwlist,
convszt, &l, convmpw, &o))
goto end;
+ if (l < MPW_BITS && (o >> l)) VALERR("or mask too large");
return (mp_pywrap(mprand(MP_NEW, l, GRAND_R(me), o)));
end:
return (0);
return (mp_pywrap(mprand(MP_NEW, l, GRAND_R(me), o)));
end:
return (0);