From: Zooko O'Whielacronx Date: Thu, 1 Feb 2007 02:01:40 +0000 (-0700) Subject: pyfec: fix precondition checks on k and m to actually check the value before coercing... X-Git-Tag: tahoe_v0.1.0-0-UNSTABLE~139 X-Git-Url: https://git.rkrishnan.org/Site/Content/Exhibitors/class-simplejson.JSONDecoder.html?a=commitdiff_plain;h=10530a25bce47db2c7b1fd84d51158eb40a8d029;p=tahoe-lafs%2Ftahoe-lafs.git pyfec: fix precondition checks on k and m to actually check the value before coercing it into a smaller type (oops) --- diff --git a/pyfec/fec/_fecmodule.c b/pyfec/fec/_fecmodule.c index e3d68c59..d1c31748 100644 --- a/pyfec/fec/_fecmodule.c +++ b/pyfec/fec/_fecmodule.c @@ -99,14 +99,15 @@ Encoder_init(Encoder *self, PyObject *args, PyObject *kwdict) { "m", NULL }; - if (!PyArg_ParseTupleAndKeywords(args, kwdict, "ii", kwlist, &self->kk, &self->mm)) + int ink, inm; + if (!PyArg_ParseTupleAndKeywords(args, kwdict, "ii", kwlist, &ink, &inm)) return -1; - if (self->kk < 1) { + if (ink < 1) { py_raise_fec_error("Precondition violation: first argument is required to be greater than or equal to 1, but it was %d", self->kk); return -1; } - if (self->mm < 1) { + if (inm < 1) { py_raise_fec_error("Precondition violation: second argument is required to be greater than or equal to 1, but it was %d", self->mm); return -1; } @@ -114,10 +115,12 @@ Encoder_init(Encoder *self, PyObject *args, PyObject *kwdict) { py_raise_fec_error("Precondition violation: second argument is required to be less than or equal to 255, but it was %d", self->mm); return -1; } - if (self->kk > self->mm) { - py_raise_fec_error("Precondition violation: first argument is required to be less than or equal to the second argument, but they were %d and %d respectively", self->kk, self->mm); + if (ink > inm) { + py_raise_fec_error("Precondition violation: first argument is required to be less than or equal to the second argument, but they were %d and %d respectively", ink, inm); return -1; } + self->kk = (unsigned char)ink; + self->mm = (unsigned char)inm; self->fec_matrix = fec_new(self->kk, self->mm); return 0; @@ -352,14 +355,15 @@ Decoder_init(Encoder *self, PyObject *args, PyObject *kwdict) { NULL }; - if (!PyArg_ParseTupleAndKeywords(args, kwdict, "ii", kwlist, &self->kk, &self->mm)) + int ink, inm; + if (!PyArg_ParseTupleAndKeywords(args, kwdict, "ii", kwlist, &ink, &inm)) return -1; - if (self->kk < 1) { + if (ink < 1) { py_raise_fec_error("Precondition violation: first argument is required to be greater than or equal to 1, but it was %d", self->kk); return -1; } - if (self->mm < 1) { + if (inm < 1) { py_raise_fec_error("Precondition violation: second argument is required to be greater than or equal to 1, but it was %d", self->mm); return -1; } @@ -367,10 +371,12 @@ Decoder_init(Encoder *self, PyObject *args, PyObject *kwdict) { py_raise_fec_error("Precondition violation: second argument is required to be less than or equal to 255, but it was %d", self->mm); return -1; } - if (self->kk > self->mm) { - py_raise_fec_error("Precondition violation: first argument is required to be less than or equal to the second argument, but they were %d and %d respectively", self->kk, self->mm); + if (ink > inm) { + py_raise_fec_error("Precondition violation: first argument is required to be less than or equal to the second argument, but they were %d and %d respectively", ink, inm); return -1; } + self->kk = (unsigned char)ink; + self->mm = (unsigned char)inm; self->fec_matrix = fec_new(self->kk, self->mm); return 0;