DF-2234 / fix.diff
--- a/sys/libiconv/iconv.c +++ b/sys/libiconv/iconv.c @@ -184,6 +184,8 @@ char *cp; int csize, ucsto, ucsfrom; + if (strlen(to) >= ICONV_CSNMAXLEN || strlen(from) >= ICONV_CSNMAXLEN) + return EINVAL; if (iconv_lookupcs(to, from, NULL) == 0) return EEXIST; csize = sizeof(*csp); @@ -365,8 +367,8 @@ csi.cs_id = csp->cp_id; csi.cs_refcount = csp->cp_refcount; csi.cs_base = csp->cp_base ? csp->cp_base->cp_id : 0; - strcpy(csi.cs_to, csp->cp_to); - strcpy(csi.cs_from, csp->cp_from); + strlcpy(csi.cs_to, csp->cp_to, sizeof(csi.cs_to)); + strlcpy(csi.cs_from, csp->cp_from, sizeof(csi.cs_from)); error = SYSCTL_OUT(req, &csi, sizeof(csi)); if (error) break; |