[git commit master 1/1] getservice: getservent_r must return ERANGE when buffer is too small
Bernhard Reutner-Fischer
rep.dot.nop at gmail.com
Thu Oct 14 13:00:04 UTC 2010
commit: http://git.uclibc.org/uClibc/commit/?id=5cb23c3c734fad8fcfcd09eef34f666f04a0af5e
branch: http://git.uclibc.org/uClibc/commit/?id=refs/heads/master
This fixes issue introduced by 72e1a1ce186c39f07282398e2af9eb0253e60f15
This should also fix the following testcase to exit with error rather
than cause an endless loop.
int main(void) {
if (getservbyname("non-existing", "udp") == NULL)
err(1, "getservbyname");
return 0;
}
Reported by Pirmin Walthert
http://lists.uclibc.org/pipermail/uclibc/2010-August/044277.html
Signed-off-by: Natanael Copa <natanael.copa at gmail.com>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop at gmail.com>
---
libc/inet/getservice.c | 5 ++---
1 files changed, 2 insertions(+), 3 deletions(-)
diff --git a/libc/inet/getservice.c b/libc/inet/getservice.c
index 47d26a2..c38ff80 100644
--- a/libc/inet/getservice.c
+++ b/libc/inet/getservice.c
@@ -69,7 +69,7 @@ int getservent_r(struct servent *result_buf,
char **serv_aliases;
char **tok = NULL;
const size_t aliaslen = sizeof(*serv_aliases) * MAXALIASES;
- int ret = ENOENT;
+ int ret = ERANGE;
*result = NULL;
if (buflen < aliaslen
@@ -77,7 +77,7 @@ int getservent_r(struct servent *result_buf,
goto DONE_NOUNLOCK;
__UCLIBC_MUTEX_LOCK(mylock);
-
+ ret = ENOENT;
if (servp == NULL)
setservent(serv_stayopen);
if (servp == NULL)
@@ -88,7 +88,6 @@ int getservent_r(struct servent *result_buf,
servp->line_len = buflen - aliaslen;
/* <name>[[:space:]]<port>/<proto>[[:space:]][<aliases>] */
if (!config_read(servp, &tok, MAXALIASES, 3, "# \t/", PARSE_NORMAL)) {
- ret = ERANGE;
goto DONE;
}
result_buf->s_name = *(tok++);
--
1.7.1
More information about the uClibc-cvs
mailing list