|
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)); |