Skip to content

Commit 6ab20f1

Browse files
committed
add asserts
1 parent 541441e commit 6ab20f1

File tree

1 file changed

+7
-6
lines changed

1 file changed

+7
-6
lines changed

Modules/_decimal/_decimal.c

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3675,8 +3675,8 @@ dec_as_long(PyObject *dec, PyObject *context, int round)
36753675
return PyLong_FromInt64(val);
36763676
}
36773677

3678-
n = (mpd_sizeinbase(x, 2) + PyLong_SHIFT - 1)/PyLong_SHIFT;
3679-
PyLongWriter *writer = PyLongWriter_Create(mpd_isnegative(x), n, &digits);
3678+
size_t len = mpd_sizeinbase(x, PyLong_BASE);
3679+
PyLongWriter *writer = PyLongWriter_Create(mpd_isnegative(x), len, &digits);
36803680
if (writer == NULL) {
36813681
mpd_del(x);
36823682
return NULL;
@@ -3685,14 +3685,15 @@ dec_as_long(PyObject *dec, PyObject *context, int round)
36853685
status = 0;
36863686
/* mpd_sizeinbase can overestimate size by 1 digit, set it to zero. */
36873687
#if PYLONG_BITS_IN_DIGIT == 30
3688-
((uint32_t *)digits)[n - 1] = 0;
3689-
n = mpd_qexport_u32((uint32_t **)&digits, n, PyLong_BASE, x, &status);
3688+
((uint32_t *)digits)[len - 1] = 0;
3689+
n = mpd_qexport_u32((uint32_t **)&digits, len, PyLong_BASE, x, &status);
36903690
#elif PYLONG_BITS_IN_DIGIT == 15
3691-
((uint16_t *)digits)[n - 1] = 0;
3692-
n = mpd_qexport_u16((uint16_t **)&digits, n, PyLong_BASE, x, &status);
3691+
((uint16_t *)digits)[len - 1] = 0;
3692+
n = mpd_qexport_u16((uint16_t **)&digits, len, PyLong_BASE, x, &status);
36933693
#else
36943694
#error "PYLONG_BITS_IN_DIGIT should be 15 or 30"
36953695
#endif
3696+
assert(n == len || n == len - 1);
36963697

36973698
if (n == SIZE_MAX) {
36983699
PyErr_NoMemory();

0 commit comments

Comments
 (0)