mirror of git://sourceware.org/git/glibc.git
localedef: check LC_IDENTIFICATION.category values
Currently localedef accepts any value for the category keyword. This has allowed bad values to propagate to the vast majority of locales (~90%). Add some logic to only accept a few standards.
This commit is contained in:
parent
1a06eee869
commit
900f59f084
|
@ -164,14 +164,45 @@ No definition for %s category found"), "LC_IDENTIFICATION"));
|
||||||
TEST_ELEM (date);
|
TEST_ELEM (date);
|
||||||
|
|
||||||
for (num = 0; num < __LC_LAST; ++num)
|
for (num = 0; num < __LC_LAST; ++num)
|
||||||
if (num != LC_ALL && identification->category[num] == NULL)
|
{
|
||||||
{
|
/* We don't accept/parse this category, so skip it early. */
|
||||||
if (verbose && ! nothing)
|
if (num == LC_ALL)
|
||||||
WITH_CUR_LOCALE (error (0, 0, _("\
|
continue;
|
||||||
|
|
||||||
|
if (identification->category[num] == NULL)
|
||||||
|
{
|
||||||
|
if (verbose && ! nothing)
|
||||||
|
WITH_CUR_LOCALE (error (0, 0, _("\
|
||||||
%s: no identification for category `%s'"),
|
%s: no identification for category `%s'"),
|
||||||
"LC_IDENTIFICATION", category_name[num]));
|
"LC_IDENTIFICATION", category_name[num]));
|
||||||
identification->category[num] = "";
|
identification->category[num] = "";
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Only list the standards we care about. This is based on the
|
||||||
|
ISO 30112 WD10 [2014] standard which supersedes all previous
|
||||||
|
revisions of the ISO 14652 standard. */
|
||||||
|
static const char * const standards[] =
|
||||||
|
{
|
||||||
|
"posix:1993",
|
||||||
|
"i18n:2004",
|
||||||
|
"i18n:2012",
|
||||||
|
};
|
||||||
|
size_t i;
|
||||||
|
bool matched = false;
|
||||||
|
|
||||||
|
for (i = 0; i < sizeof (standards) / sizeof (standards[0]); ++i)
|
||||||
|
if (strcmp (identification->category[num], standards[i]) == 0)
|
||||||
|
matched = true;
|
||||||
|
|
||||||
|
if (matched != true)
|
||||||
|
WITH_CUR_LOCALE (error (0, 0, _("\
|
||||||
|
%s: unknown standard `%s' for category `%s'"),
|
||||||
|
"LC_IDENTIFICATION",
|
||||||
|
identification->category[num],
|
||||||
|
category_name[num]));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
2016-04-15 Mike Frysinger <vapier@gentoo.org>
|
||||||
|
|
||||||
|
* locale/programs/ld-identification.c (identification_finish): Check
|
||||||
|
that the values in identification->category are only known.
|
||||||
|
|
||||||
2016-04-15 Mike Frysinger <vapier@gentoo.org>
|
2016-04-15 Mike Frysinger <vapier@gentoo.org>
|
||||||
|
|
||||||
* locales/aa_DJ (LC_IDENTIFICATION): Change all category fields to
|
* locales/aa_DJ (LC_IDENTIFICATION): Change all category fields to
|
||||||
|
|
Loading…
Reference in New Issue