Skip to content

Commit 3df6652

Browse files
committed
Fixes np_short error message
1 parent 9f285bb commit 3df6652

File tree

3 files changed

+17
-7
lines changed

3 files changed

+17
-7
lines changed

Lib/test/test_struct.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -679,14 +679,23 @@ def test_issue35714(self):
679679
struct.calcsize(s)
680680

681681
@support.cpython_only
682-
def test_issue45034(self):
682+
def test_issue45034_unsigned(self):
683683
from _testcapi import USHRT_MAX
684684
error_msg = f'ushort format requires 0 <= number <= {USHRT_MAX}'
685685
with self.assertRaisesRegex(struct.error, error_msg):
686686
struct.pack('H', 70000) # too large
687687
with self.assertRaisesRegex(struct.error, error_msg):
688688
struct.pack('H', -1) # too small
689689

690+
@support.cpython_only
691+
def test_issue45034_signed(self):
692+
from _testcapi import SHRT_MIN, SHRT_MAX
693+
error_msg = f'short format requires {SHRT_MIN} <= number <= {SHRT_MAX}'
694+
with self.assertRaisesRegex(struct.error, error_msg):
695+
struct.pack('h', 70000) # too large
696+
with self.assertRaisesRegex(struct.error, error_msg):
697+
struct.pack('h', -70000) # too small
698+
690699

691700
class UnpackIteratorTest(unittest.TestCase):
692701
"""
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
Changes how max value is formatted for ``struct.pack`` with ``'H'`` mode and
2-
too large / small numbers.
1+
Changes how error is formatted for ``struct.pack`` with ``'H'`` and ``'h'`` modes and
2+
too large / small numbers. Now it shows the actual numeric limits, while previously it was showing arithmetic expressions.

Modules/_struct.c

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -589,9 +589,10 @@ np_short(_structmodulestate *state, char *p, PyObject *v, const formatdef *f)
589589
if (get_long(state, v, &x) < 0)
590590
return -1;
591591
if (x < SHRT_MIN || x > SHRT_MAX) {
592-
PyErr_SetString(state->StructError,
593-
"short format requires " Py_STRINGIFY(SHRT_MIN)
594-
" <= number <= " Py_STRINGIFY(SHRT_MAX));
592+
PyErr_Format(state->StructError,
593+
"short format requires %d <= number <= %d",
594+
SHRT_MIN,
595+
SHRT_MAX);
595596
return -1;
596597
}
597598
y = (short)x;
@@ -609,7 +610,7 @@ np_ushort(_structmodulestate *state, char *p, PyObject *v, const formatdef *f)
609610
if (x < 0 || x > USHRT_MAX) {
610611
PyErr_Format(state->StructError,
611612
"ushort format requires 0 <= number <= %u",
612-
(unsigned int)(USHRT_MAX));
613+
(unsigned int)USHRT_MAX);
613614
return -1;
614615
}
615616
y = (unsigned short)x;

0 commit comments

Comments
 (0)