Explorar o código

avoid unbounded strlen in gettext functions

use the standard strnlen idiom for cases where lengths greater than an
imposed limit are going to be rejected immediately anyway.
Rich Felker %!s(int64=8) %!d(string=hai) anos
pai
achega
d6601f0af0
Modificáronse 1 ficheiros con 3 adicións e 3 borrados
  1. 3 3
      src/locale/dcngettext.c

+ 3 - 3
src/locale/dcngettext.c

@@ -40,8 +40,8 @@ char *bindtextdomain(const char *domainname, const char *dirname)
 	if (!domainname) return 0;
 	if (!dirname) return gettextdir(domainname, &(size_t){0});
 
-	size_t domlen = strlen(domainname);
-	size_t dirlen = strlen(dirname);
+	size_t domlen = strnlen(domainname, NAME_MAX+1);
+	size_t dirlen = strnlen(dirname, PATH_MAX);
 	if (domlen > NAME_MAX || dirlen >= PATH_MAX) {
 		errno = EINVAL;
 		return 0;
@@ -127,7 +127,7 @@ char *dcngettext(const char *domainname, const char *msgid1, const char *msgid2,
 
 	if (!domainname) domainname = __gettextdomain();
 
-	domlen = strlen(domainname);
+	domlen = strnlen(domainname, NAME_MAX+1);
 	if (domlen > NAME_MAX) goto notrans;
 
 	dirname = gettextdir(domainname, &dirlen);