• Noah Misch's avatar
    Check return values of sensitive system library calls. · fd97bd41
    Noah Misch authored
    PostgreSQL already checked the vast majority of these, missing this
    handful that nearly cannot fail.  If putenv() failed with ENOMEM in
    pg_GSS_recvauth(), authentication would proceed with the wrong keytab
    file.  If strftime() returned zero in cache_locale_time(), using the
    unspecified buffer contents could lead to information exposure or a
    crash.  Back-patch to 9.0 (all supported versions).
    
    Other unchecked calls to these functions, especially those in frontend
    code, pose negligible security concern.  This patch does not address
    them.  Nonetheless, it is always better to check return values whose
    specification provides for indicating an error.
    
    In passing, fix an off-by-one error in strftime_win32()'s invocation of
    WideCharToMultiByte().  Upon retrieving a value of exactly MAX_L10N_DATA
    bytes, strftime_win32() would overrun the caller's buffer by one byte.
    MAX_L10N_DATA is chosen to exceed the length of every possible value, so
    the vulnerable scenario probably does not arise.
    
    Security: CVE-2015-3166
    fd97bd41
pg_locale.c 37.5 KB