summaryrefslogtreecommitdiffstats
path: root/Objects/stringlib
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2024-05-28 09:01:37 (GMT)
committerGitHub <noreply@github.com>2024-05-28 09:01:37 (GMT)
commitb313cc68d50de5fb5f43acffd402c5c4da6516fc (patch)
tree3d25305bb921d8e3748db524ec9267e65ecb242f /Objects/stringlib
parentbf08f0a5fe5750904aa4a239945db16d2c43f6e7 (diff)
downloadcpython-b313cc68d50de5fb5f43acffd402c5c4da6516fc.zip
cpython-b313cc68d50de5fb5f43acffd402c5c4da6516fc.tar.gz
cpython-b313cc68d50de5fb5f43acffd402c5c4da6516fc.tar.bz2
gh-117557: Improve error messages when a string, bytes or bytearray of length 1 are expected (GH-117631)
Diffstat (limited to 'Objects/stringlib')
-rw-r--r--Objects/stringlib/clinic/transmogrify.h.h56
1 files changed, 49 insertions, 7 deletions
diff --git a/Objects/stringlib/clinic/transmogrify.h.h b/Objects/stringlib/clinic/transmogrify.h.h
index 3a985ab..cef7a94 100644
--- a/Objects/stringlib/clinic/transmogrify.h.h
+++ b/Objects/stringlib/clinic/transmogrify.h.h
@@ -113,10 +113,24 @@ stringlib_ljust(PyObject *self, PyObject *const *args, Py_ssize_t nargs)
if (nargs < 2) {
goto skip_optional;
}
- if (PyBytes_Check(args[1]) && PyBytes_GET_SIZE(args[1]) == 1) {
+ if (PyBytes_Check(args[1])) {
+ if (PyBytes_GET_SIZE(args[1]) != 1) {
+ PyErr_Format(PyExc_TypeError,
+ "ljust(): argument 2 must be a byte string of length 1, "
+ "not a bytes object of length %zd",
+ PyBytes_GET_SIZE(args[1]));
+ goto exit;
+ }
fillchar = PyBytes_AS_STRING(args[1])[0];
}
- else if (PyByteArray_Check(args[1]) && PyByteArray_GET_SIZE(args[1]) == 1) {
+ else if (PyByteArray_Check(args[1])) {
+ if (PyByteArray_GET_SIZE(args[1]) != 1) {
+ PyErr_Format(PyExc_TypeError,
+ "ljust(): argument 2 must be a byte string of length 1, "
+ "not a bytearray object of length %zd",
+ PyByteArray_GET_SIZE(args[1]));
+ goto exit;
+ }
fillchar = PyByteArray_AS_STRING(args[1])[0];
}
else {
@@ -169,10 +183,24 @@ stringlib_rjust(PyObject *self, PyObject *const *args, Py_ssize_t nargs)
if (nargs < 2) {
goto skip_optional;
}
- if (PyBytes_Check(args[1]) && PyBytes_GET_SIZE(args[1]) == 1) {
+ if (PyBytes_Check(args[1])) {
+ if (PyBytes_GET_SIZE(args[1]) != 1) {
+ PyErr_Format(PyExc_TypeError,
+ "rjust(): argument 2 must be a byte string of length 1, "
+ "not a bytes object of length %zd",
+ PyBytes_GET_SIZE(args[1]));
+ goto exit;
+ }
fillchar = PyBytes_AS_STRING(args[1])[0];
}
- else if (PyByteArray_Check(args[1]) && PyByteArray_GET_SIZE(args[1]) == 1) {
+ else if (PyByteArray_Check(args[1])) {
+ if (PyByteArray_GET_SIZE(args[1]) != 1) {
+ PyErr_Format(PyExc_TypeError,
+ "rjust(): argument 2 must be a byte string of length 1, "
+ "not a bytearray object of length %zd",
+ PyByteArray_GET_SIZE(args[1]));
+ goto exit;
+ }
fillchar = PyByteArray_AS_STRING(args[1])[0];
}
else {
@@ -225,10 +253,24 @@ stringlib_center(PyObject *self, PyObject *const *args, Py_ssize_t nargs)
if (nargs < 2) {
goto skip_optional;
}
- if (PyBytes_Check(args[1]) && PyBytes_GET_SIZE(args[1]) == 1) {
+ if (PyBytes_Check(args[1])) {
+ if (PyBytes_GET_SIZE(args[1]) != 1) {
+ PyErr_Format(PyExc_TypeError,
+ "center(): argument 2 must be a byte string of length 1, "
+ "not a bytes object of length %zd",
+ PyBytes_GET_SIZE(args[1]));
+ goto exit;
+ }
fillchar = PyBytes_AS_STRING(args[1])[0];
}
- else if (PyByteArray_Check(args[1]) && PyByteArray_GET_SIZE(args[1]) == 1) {
+ else if (PyByteArray_Check(args[1])) {
+ if (PyByteArray_GET_SIZE(args[1]) != 1) {
+ PyErr_Format(PyExc_TypeError,
+ "center(): argument 2 must be a byte string of length 1, "
+ "not a bytearray object of length %zd",
+ PyByteArray_GET_SIZE(args[1]));
+ goto exit;
+ }
fillchar = PyByteArray_AS_STRING(args[1])[0];
}
else {
@@ -279,4 +321,4 @@ stringlib_zfill(PyObject *self, PyObject *arg)
exit:
return return_value;
}
-/*[clinic end generated code: output=b409bdf9ab68d5a6 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=06dd79019356b6bb input=a9049054013a1b77]*/