From 12b34912086ff5007ac14e6397f622ad3ac98ad1 Mon Sep 17 00:00:00 2001
From: Petro Karashchenko <petro.karashchenko@gmail.com>
Date: Mon, 13 Dec 2021 21:22:59 +0200
Subject: [PATCH] libc/textdomain: Fix error behaviour

- textdomain should set errno to ENOMEM in case if it is not
  possible to store domainname
- fix buffer overflow in textdomain if domainname is a string
  of NAME_MAX length
- improve textdomain error detection in case if domainname
  points to non null terminated buffer

Signed-off-by: Petro Karashchenko <petro.karashchenko@gmail.com>
---
 libs/libc/locale/lib_gettext.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/libs/libc/locale/lib_gettext.c b/libs/libc/locale/lib_gettext.c
index d0c52d85de..cb16c2eb45 100644
--- a/libs/libc/locale/lib_gettext.c
+++ b/libs/libc/locale/lib_gettext.c
@@ -373,10 +373,10 @@ FAR char *textdomain(FAR const char *domainname)
       return *domain ? domain : "messages";
     }
 
-  domainlen = strlen(domainname);
-  if (domainlen > NAME_MAX)
+  domainlen = strnlen(domainname, NAME_MAX);
+  if (domainlen == NAME_MAX)
     {
-      set_errno(EINVAL);
+      set_errno(ENOMEM);
       return NULL;
     }