mirror of https://github.com/python/cpython
Issue #13706: Add assertions to detect bugs earlier
This commit is contained in:
parent
5ea5b67a0b
commit
ed27785b32
|
@ -499,14 +499,17 @@ enum PyUnicode_Kind {
|
||||||
do { \
|
do { \
|
||||||
switch ((kind)) { \
|
switch ((kind)) { \
|
||||||
case PyUnicode_1BYTE_KIND: { \
|
case PyUnicode_1BYTE_KIND: { \
|
||||||
|
assert(value <= 0xff); \
|
||||||
((Py_UCS1 *)(data))[(index)] = (Py_UCS1)(value); \
|
((Py_UCS1 *)(data))[(index)] = (Py_UCS1)(value); \
|
||||||
break; \
|
break; \
|
||||||
} \
|
} \
|
||||||
case PyUnicode_2BYTE_KIND: { \
|
case PyUnicode_2BYTE_KIND: { \
|
||||||
|
assert(value <= 0xffff); \
|
||||||
((Py_UCS2 *)(data))[(index)] = (Py_UCS2)(value); \
|
((Py_UCS2 *)(data))[(index)] = (Py_UCS2)(value); \
|
||||||
break; \
|
break; \
|
||||||
} \
|
} \
|
||||||
default: { \
|
default: { \
|
||||||
|
assert(value <= 0x10ffff); \
|
||||||
assert((kind) == PyUnicode_4BYTE_KIND); \
|
assert((kind) == PyUnicode_4BYTE_KIND); \
|
||||||
((Py_UCS4 *)(data))[(index)] = (Py_UCS4)(value); \
|
((Py_UCS4 *)(data))[(index)] = (Py_UCS4)(value); \
|
||||||
} \
|
} \
|
||||||
|
|
|
@ -559,8 +559,9 @@ fill_number(PyObject *out, Py_ssize_t pos, const NumberFieldWidths *spec,
|
||||||
Py_ssize_t t;
|
Py_ssize_t t;
|
||||||
for (t = 0; t < spec->n_prefix; t++) {
|
for (t = 0; t < spec->n_prefix; t++) {
|
||||||
Py_UCS4 c = PyUnicode_READ(kind, data, pos + t);
|
Py_UCS4 c = PyUnicode_READ(kind, data, pos + t);
|
||||||
|
c = Py_TOUPPER(c);
|
||||||
assert (c <= 127);
|
assert (c <= 127);
|
||||||
PyUnicode_WRITE(kind, data, pos + t, Py_TOUPPER(c));
|
PyUnicode_WRITE(kind, data, pos + t, c);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pos += spec->n_prefix;
|
pos += spec->n_prefix;
|
||||||
|
@ -603,11 +604,12 @@ fill_number(PyObject *out, Py_ssize_t pos, const NumberFieldWidths *spec,
|
||||||
Py_ssize_t t;
|
Py_ssize_t t;
|
||||||
for (t = 0; t < spec->n_grouped_digits; t++) {
|
for (t = 0; t < spec->n_grouped_digits; t++) {
|
||||||
Py_UCS4 c = PyUnicode_READ(kind, data, pos + t);
|
Py_UCS4 c = PyUnicode_READ(kind, data, pos + t);
|
||||||
|
c = Py_TOUPPER(c);
|
||||||
if (c > 127) {
|
if (c > 127) {
|
||||||
PyErr_SetString(PyExc_SystemError, "non-ascii grouped digit");
|
PyErr_SetString(PyExc_SystemError, "non-ascii grouped digit");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
PyUnicode_WRITE(kind, data, pos + t, Py_TOUPPER(c));
|
PyUnicode_WRITE(kind, data, pos + t, c);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pos += spec->n_grouped_digits;
|
pos += spec->n_grouped_digits;
|
||||||
|
@ -733,6 +735,7 @@ format_string_internal(PyObject *value, const InternalFormatSpec *format)
|
||||||
Py_CLEAR(result);
|
Py_CLEAR(result);
|
||||||
|
|
||||||
done:
|
done:
|
||||||
|
assert(!result || _PyUnicode_CheckConsistency(result, 1));
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -759,7 +762,7 @@ format_int_or_long_internal(PyObject *value, const InternalFormatSpec *format,
|
||||||
produces non-digits */
|
produces non-digits */
|
||||||
Py_ssize_t n_prefix = 0; /* Count of prefix chars, (e.g., '0x') */
|
Py_ssize_t n_prefix = 0; /* Count of prefix chars, (e.g., '0x') */
|
||||||
Py_ssize_t n_total;
|
Py_ssize_t n_total;
|
||||||
Py_ssize_t prefix;
|
Py_ssize_t prefix = 0;
|
||||||
NumberFieldWidths spec;
|
NumberFieldWidths spec;
|
||||||
long x;
|
long x;
|
||||||
int err;
|
int err;
|
||||||
|
@ -894,6 +897,7 @@ format_int_or_long_internal(PyObject *value, const InternalFormatSpec *format,
|
||||||
|
|
||||||
done:
|
done:
|
||||||
Py_XDECREF(tmp);
|
Py_XDECREF(tmp);
|
||||||
|
assert(!result || _PyUnicode_CheckConsistency(result, 1));
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1036,6 +1040,7 @@ format_float_internal(PyObject *value,
|
||||||
done:
|
done:
|
||||||
PyMem_Free(buf);
|
PyMem_Free(buf);
|
||||||
Py_DECREF(unicode_tmp);
|
Py_DECREF(unicode_tmp);
|
||||||
|
assert(!result || _PyUnicode_CheckConsistency(result, 1));
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1270,6 +1275,7 @@ done:
|
||||||
PyMem_Free(im_buf);
|
PyMem_Free(im_buf);
|
||||||
Py_XDECREF(re_unicode_tmp);
|
Py_XDECREF(re_unicode_tmp);
|
||||||
Py_XDECREF(im_unicode_tmp);
|
Py_XDECREF(im_unicode_tmp);
|
||||||
|
assert(!result || _PyUnicode_CheckConsistency(result, 1));
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue