Issue #3129: Trailing digits in format string are no longer ignored.

This commit is contained in:
Alexander Belopolsky 2010-06-11 16:04:59 +00:00
parent 9b88b916a9
commit 177e8530cb
3 changed files with 36 additions and 3 deletions

View File

@ -443,7 +443,7 @@ def test_pack_into(self):
# Test bogus offset (issue 3694) # Test bogus offset (issue 3694)
sb = small_buf sb = small_buf
self.assertRaises(TypeError, struct.pack_into, b'1', sb, None) self.assertRaises(TypeError, struct.pack_into, b'', sb, None)
def test_pack_into_fn(self): def test_pack_into_fn(self):
test_string = b'Reykjavik rocks, eow!' test_string = b'Reykjavik rocks, eow!'
@ -510,6 +510,32 @@ def test_bool(self):
def test_crasher(self): def test_crasher(self):
self.assertRaises(MemoryError, struct.pack, "357913941b", "a") self.assertRaises(MemoryError, struct.pack, "357913941b", "a")
def test_trailing_counter(self):
store = array.array('b', b' '*100)
# format lists containing only count spec should result in an error
self.assertRaises(struct.error, struct.pack, '12345')
self.assertRaises(struct.error, struct.unpack, '12345', '')
self.assertRaises(struct.error, struct.pack_into, '12345', store, 0)
self.assertRaises(struct.error, struct.unpack_from, '12345', store, 0)
# Format lists with trailing count spec should result in an error
self.assertRaises(struct.error, struct.pack, 'c12345', 'x')
self.assertRaises(struct.error, struct.unpack, 'c12345', 'x')
self.assertRaises(struct.error, struct.pack_into, 'c12345', store, 0,
'x')
self.assertRaises(struct.error, struct.unpack_from, 'c12345', store,
0)
# Mixed format tests
self.assertRaises(struct.error, struct.pack, '14s42', 'spam and eggs')
self.assertRaises(struct.error, struct.unpack, '14s42',
'spam and eggs')
self.assertRaises(struct.error, struct.pack_into, '14s42', store, 0,
'spam and eggs')
self.assertRaises(struct.error, struct.unpack_from, '14s42', store, 0)
def test_main(): def test_main():
run_unittest(StructTest) run_unittest(StructTest)

View File

@ -1283,6 +1283,10 @@ Library
Extension Modules Extension Modules
----------------- -----------------
- Issue #3129: Trailing digits in format string are no longer ignored.
For example, "1" or "ilib123" are now invalid formats and cause
``struct.error`` to be raised.
- Issue #7384: If the system readline library is linked against ncurses, - Issue #7384: If the system readline library is linked against ncurses,
the curses module must be linked against ncurses as well. Otherwise it the curses module must be linked against ncurses as well. Otherwise it
is not safe to load both the readline and curses modules in an application. is not safe to load both the readline and curses modules in an application.

View File

@ -1195,8 +1195,11 @@ prepare_s(PyStructObject *self)
} }
num = x; num = x;
} }
if (c == '\0') if (c == '\0') {
break; PyErr_SetString(StructError,
"repeat count given without format specifier");
return -1;
}
} }
else else
num = 1; num = 1;