mirror of
https://https.git.savannah.gnu.org/git/gettext.git
synced 2026-01-26 07:37:57 +00:00
Make header checking more reliable
This commit is contained in:
parent
ea9a855bf0
commit
d47ceb27a4
@ -1,3 +1,9 @@
|
||||
2013-04-22 Daiki Ueno <ueno@gnu.org>
|
||||
|
||||
Make msgfmt --check-header more reliable.
|
||||
* msgl-check.c (check_header_entry): Don't use c_strstr to parse
|
||||
message header.
|
||||
|
||||
2013-04-22 Daiki Ueno <ueno@gnu.org>
|
||||
|
||||
Support CR/LF line terminators in Python sources even on Unix.
|
||||
|
||||
@ -770,39 +770,24 @@ check_header_entry (const message_ty *mp, const char *msgstr_string)
|
||||
};
|
||||
const size_t nfields = SIZEOF (required_fields);
|
||||
const size_t nrequiredfields = nfields - 1;
|
||||
int initial = -1;
|
||||
int cnt;
|
||||
|
||||
for (cnt = 0; cnt < nfields; ++cnt)
|
||||
{
|
||||
int severity =
|
||||
(cnt < nrequiredfields ? PO_SEVERITY_ERROR : PO_SEVERITY_WARNING);
|
||||
const char *endp = c_strstr (msgstr_string, required_fields[cnt]);
|
||||
const char *field = required_fields[cnt];
|
||||
size_t len = strlen (field);
|
||||
const char *line;
|
||||
|
||||
if (endp == NULL)
|
||||
for (line = msgstr_string; *line != '\0'; )
|
||||
{
|
||||
char *msg =
|
||||
xasprintf (_("header field '%s' missing in header\n"),
|
||||
required_fields[cnt]);
|
||||
po_xerror (severity, mp, NULL, 0, 0, true, msg);
|
||||
free (msg);
|
||||
}
|
||||
else if (endp != msgstr_string && endp[-1] != '\n')
|
||||
if (strncmp (line, field, len) == 0 && line[len] == ':')
|
||||
{
|
||||
char *msg =
|
||||
xasprintf (_("\
|
||||
header field '%s' should start at beginning of line\n"),
|
||||
required_fields[cnt]);
|
||||
po_xerror (severity, mp, NULL, 0, 0, true, msg);
|
||||
free (msg);
|
||||
}
|
||||
else
|
||||
{
|
||||
const char *p = endp + strlen (required_fields[cnt]);
|
||||
const char *p = line + len + 1;
|
||||
|
||||
/* Test whether the field's value, starting at p, is the default
|
||||
value. */
|
||||
if (*p == ':')
|
||||
p++;
|
||||
if (*p == ' ')
|
||||
p++;
|
||||
if (default_values[cnt] != NULL
|
||||
@ -812,31 +797,28 @@ header field '%s' should start at beginning of line\n"),
|
||||
p += strlen (default_values[cnt]);
|
||||
if (*p == '\0' || *p == '\n')
|
||||
{
|
||||
if (initial != -1)
|
||||
{
|
||||
po_xerror (severity,
|
||||
mp, NULL, 0, 0, true, _("\
|
||||
some header fields still have the initial default value\n"));
|
||||
initial = -1;
|
||||
break;
|
||||
}
|
||||
else
|
||||
initial = cnt;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (initial != -1)
|
||||
{
|
||||
int severity =
|
||||
(initial < nrequiredfields ? PO_SEVERITY_ERROR : PO_SEVERITY_WARNING);
|
||||
char *msg =
|
||||
xasprintf (_("header field '%s' still has the initial default value\n"),
|
||||
required_fields[initial]);
|
||||
field);
|
||||
po_xerror (severity, mp, NULL, 0, 0, true, msg);
|
||||
free (msg);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
line = strchrnul (line, '\n');
|
||||
if (*line == '\n')
|
||||
line++;
|
||||
}
|
||||
if (*line == '\0')
|
||||
{
|
||||
char *msg =
|
||||
xasprintf (_("header field '%s' missing in header\n"),
|
||||
field);
|
||||
po_xerror (severity, mp, NULL, 0, 0, true, msg);
|
||||
free (msg);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -17,6 +17,7 @@ msgstr ""
|
||||
"PO-Revision-Date: 2001-04-05 19:47+0200\n"
|
||||
"Last-Translator: ABC DEF <abc@gnu.uucp>\n"
|
||||
"Language-Team: test <test@li.org>\n"
|
||||
"Language: test\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=ISO-8859-9\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
@ -74,6 +75,7 @@ ${MSGFMT} --check -o /dev/null mf-test10.po2 \
|
||||
|
||||
tmpfiles="$tmpfiles mf-test10.ok"
|
||||
cat << EOF > mf-test10.ok
|
||||
mf-test10.po2:6: warning: header field 'Language' missing in header
|
||||
mf-test10.po2:20: number of format specifications in 'msgid_plural' and 'msgstr[1]' does not match
|
||||
msgfmt: found 1 fatal error
|
||||
EOF
|
||||
|
||||
@ -24,6 +24,7 @@ msgstr ""
|
||||
"PO-Revision-Date: 2001-04-05 19:47+0200\n"
|
||||
"Last-Translator: ABC DEF <abc@gnu.uucp>\n"
|
||||
"Language-Team: test <test@li.org>\n"
|
||||
"Language: test\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
@ -54,6 +55,7 @@ msgstr ""
|
||||
"PO-Revision-Date: 2001-04-05 19:47+0200\n"
|
||||
"Last-Translator: ABC DEF <abc@gnu.uucp>\n"
|
||||
"Language-Team: test <test@li.org>\n"
|
||||
"Language: test\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
@ -84,6 +86,7 @@ msgstr ""
|
||||
"PO-Revision-Date: 2001-04-05 19:47+0200\n"
|
||||
"Last-Translator: ABC DEF <abc@gnu.uucp>\n"
|
||||
"Language-Team: test <test@li.org>\n"
|
||||
"Language: test\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
@ -114,6 +117,7 @@ msgstr ""
|
||||
"PO-Revision-Date: 2001-04-05 19:47+0200\n"
|
||||
"Last-Translator: ABC DEF <abc@gnu.uucp>\n"
|
||||
"Language-Team: test <test@li.org>\n"
|
||||
"Language: test\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
@ -23,6 +23,7 @@ msgstr ""
|
||||
"PO-Revision-Date: 2001-04-05 19:47+0200\n"
|
||||
"Last-Translator: ABC DEF <abc@gnu.uucp>\n"
|
||||
"Language-Team: test <test@li.org>\n"
|
||||
"Language: test\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
@ -53,6 +54,7 @@ msgstr ""
|
||||
"PO-Revision-Date: 2001-04-05 19:47+0200\n"
|
||||
"Last-Translator: ABC DEF <abc@gnu.uucp>\n"
|
||||
"Language-Team: test <test@li.org>\n"
|
||||
"Language: test\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
@ -83,6 +85,7 @@ msgstr ""
|
||||
"PO-Revision-Date: 2001-04-05 19:47+0200\n"
|
||||
"Last-Translator: ABC DEF <abc@gnu.uucp>\n"
|
||||
"Language-Team: test <test@li.org>\n"
|
||||
"Language: test\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
@ -113,6 +116,7 @@ msgstr ""
|
||||
"PO-Revision-Date: 2001-04-05 19:47+0200\n"
|
||||
"Last-Translator: ABC DEF <abc@gnu.uucp>\n"
|
||||
"Language-Team: test <test@li.org>\n"
|
||||
"Language: test\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user