pgsql: Fix cidin() to handle values above 2^31 platform-independently.
От | Tom Lane |
---|---|
Тема | pgsql: Fix cidin() to handle values above 2^31 platform-independently. |
Дата | |
Msg-id | E1bwXCq-0003gJ-06@gemulon.postgresql.org обсуждение исходный текст |
Список | pgsql-committers |
Fix cidin() to handle values above 2^31 platform-independently. CommandId is declared as uint32, and values up to 4G are indeed legal. cidout() handles them properly by treating the value as unsigned int. But cidin() was just using atoi(), which has platform-dependent behavior for values outside the range of signed int, as reported by Bart Lengkeek in bug #14379. Use strtoul() instead, as xidin() does. In passing, make some purely cosmetic changes to make xidin/xidout look more like cidin/cidout; the former didn't have a monopoly on best practice IMO. Neither xidin nor cidin make any attempt to throw error for invalid input. I didn't change that here, and am not sure it's worth worrying about since neither is really a user-facing type. The point is just to ensure that indubitably-valid inputs work as expected. It's been like this for a long time, so back-patch to all supported branches. Report: <20161018152550.1413.6439@wrigleys.postgresql.org> Branch ------ REL9_2_STABLE Details ------- http://git.postgresql.org/pg/commitdiff/eb338c1cd5347b428725c8d7a79769640c2e10d3 Modified Files -------------- src/backend/utils/adt/xid.c | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-)
В списке pgsql-committers по дате отправления: