inet_ntop: pass the size of tmp to snprintf()

Fix runtime error when snprintf() FORTIFY_SOURCE protections are
applied. The size passed to snprintf() is larger than the tmp
buffer size, which results in a runtime assertion failure.

Even though the size passed to snprintf is larger than the buffer,
there's no danger of overwriting the buffer because of the format
string passed to snprintf.

Change-Id: I35f0217d25f3b9c6d04c5a76c3238759c235545a
This commit is contained in:
Nick Kralevich 2012-06-11 14:29:30 -07:00
parent 76656afc6d
commit 85b06f9365
1 changed files with 5 additions and 0 deletions

View File

@ -75,8 +75,13 @@ inet_ntop4(const u_char *src, char *dst, size_t size)
char tmp[sizeof "255.255.255.255"];
int l;
#if defined(ANDROID_CHANGES)
l = snprintf(tmp, sizeof(tmp), fmt, src[0], src[1], src[2], src[3]);
if (l <= 0 || (size_t)l >= size || (size_t)l >= sizeof(tmp)) {
#else
l = snprintf(tmp, size, fmt, src[0], src[1], src[2], src[3]);
if (l <= 0 || (size_t)l >= size) {
#endif
errno = ENOSPC;
return (NULL);
}