getservbyport_r: fix wrong result if getnameinfo fails with EAI_OVERFLOW
[musl] / src / network / getservbyport_r.c
index b7f21c6..e4cc307 100644 (file)
@@ -26,7 +26,7 @@ int getservbyport_r(int port, const char *prots,
        /* Align buffer */
        i = (uintptr_t)buf & sizeof(char *)-1;
        if (!i) i = sizeof(char *);
-       if (buflen < 3*sizeof(char *)-i)
+       if (buflen <= 3*sizeof(char *)-i)
                return ERANGE;
        buf += sizeof(char *)-i;
        buflen -= sizeof(char *)-i;
@@ -46,6 +46,8 @@ int getservbyport_r(int port, const char *prots,
        case EAI_MEMORY:
        case EAI_SYSTEM:
                return ENOMEM;
+       case EAI_OVERFLOW:
+               return ERANGE;
        default:
                return ENOENT;
        case 0: