• Fred Drake's avatar
    Trent Mick <trentm@activestate.com>: · 541dc3b7
    Fred Drake authored
    The cause: Relatively recent (last month) patches to getargs.c added
    overflow checking to the PyArg_Parse*() integral formatters thereby
    restricting 'b' to unsigned char value and 'h','i', and 'l' to signed
    integral values (i.e. if the incoming value is outside of the
    specified bounds you get an OverflowError, previous it silently
    overflowed).
    
    The problem: This broke the array module (as Fredrik pointed out)
    because *its* formatters relied on the loose allowance of signed and
    unsigned ranges being able to pass through PyArg_Parse*()'s
    formatters.
    
    The fix: This patch fixes the array module to work with the more
    strict bounds checking now in PyArg_Parse*().
    
    How: If the type signature of a formatter in the arraymodule exactly
    matches one in PyArg_Parse*(), then use that directly. If there is no
    equivalent type signature in PyArg_Parse*() (e.g. there is no unsigned
    int formatter in PyArg_Parse*()), then use the next one up and do some
    extra bounds checking in the array module.
    
    This partially closes SourceForge patch #100506.
    541dc3b7
arraymodule.c 34 KB