Re: overflow in snprintf() when printing INT64_MIN

Tom Lane <tgl@sss.pgh.pa.us>

From: Tom Lane <tgl@sss.pgh.pa.us>
To: Andres Freund <andres@anarazel.de>
Cc: pgsql-hackers@postgresql.org
Date: 2018-09-28T00:18:12Z
Lists: pgsql-hackers
Andres Freund <andres@anarazel.de> writes:
> I just noticed, while reviewing a patch that corrects overflow handing
> in snprintf, that we don't correctly handle INT64_MIN in snprintf.c:

Well, you still get the right answer, even if the "-value" is
nominally undefined.

> I suspect the best way to fix this, would be to instead do:

> 	/* Handle +/- */
> 	if (dosign && adjust_sign((value < 0), forcesign, &signvalue);
> 		uvalue = -(uint64) value;
> 	else
> 		uvalue = (uint64) value;

Hm, what does -x mean for an unsigned value?  I'm not really
convinced this is conceptually better.

			regards, tom lane


Commits

  1. Ensure that snprintf.c's fmtint() doesn't overflow when printing INT64_MIN.