View | Details | Raw Unified | Return to bug 248932
Collapse All | Expand All

(-)lib/libc/gen/getgrent.c (-2 / +10 lines)
Lines 332-341 Link Here
332
	orig_buf_size = va_arg(ap, size_t);
332
	orig_buf_size = va_arg(ap, size_t);
333
	ret_errno = va_arg(ap, int *);
333
	ret_errno = va_arg(ap, int *);
334
334
335
	if (orig_buf_size <
335
	if (orig_buf_size + sizeof(struct group) + sizeof(char *) <
336
	    buffer_size - sizeof(struct group) - sizeof(char *)) {
336
	    buffer_size)
337
	{
337
		*ret_errno = ERANGE;
338
		*ret_errno = ERANGE;
338
		return (NS_RETURN);
339
		return (NS_RETURN);
340
	} else if (buffer_size < sizeof(struct group) + sizeof(char *)) {
341
		/*
342
		 * nscd(8) sometimes returns buffer_size=1 for nonexistent
343
		 * groups.
344
		 */
345
		*ret_errno = 0;
346
		return (NS_UNAVAIL);
339
	}
347
	}
340
348
341
	memcpy(grp, buffer, sizeof(struct group));
349
	memcpy(grp, buffer, sizeof(struct group));

Return to bug 248932