2007-08-3 1 Dan Hipschman <dsh@google.com>

gcc/
2007-08-3 1 Dan Hipschman  <dsh@google.com>

	PR 32953
	* c-format.c (check_format_arg): Move check for zero-length
	format strings below the check for unterminated strings.

testsuite/
2007-08-13  Dan Hipschman  <dsh@google.com>

	PR 32953
	* gcc.dg/format/array-1.c: Add an additional test for
	unterminated format strings of length 1.

From-SVN: r127399
This commit is contained in:
Dan Hipschman 2007-08-13 14:55:01 -07:00 committed by Dan Hipschman
parent eda0ed2597
commit d46571c803
4 changed files with 18 additions and 9 deletions

View File

@ -1,3 +1,9 @@
2007-08-13 Dan Hipschman <dsh@google.com>
PR c/32953
* c-format.c (check_format_arg): Move check for zero-length
format strings below the check for unterminated strings.
2007-08-13 Andrew Pinski <pinskia@gmail.com>
PR C/30427

View File

@ -1401,21 +1401,16 @@ check_format_arg (void *ctx, tree format_tree,
format_chars += offset;
format_length -= offset;
}
if (format_length < 1)
if (format_length < 1 || format_chars[--format_length] != 0)
{
res->number_unterminated++;
return;
}
if (format_length == 1)
if (format_length == 0)
{
res->number_empty++;
return;
}
if (format_chars[--format_length] != 0)
{
res->number_unterminated++;
return;
}
/* Skip to first argument to check. */
while (arg_num + 1 < info->first_arg_num)

View File

@ -1,3 +1,9 @@
2007-08-13 Dan Hipschman <dsh@google.com>
PR c/32953
* gcc.dg/format/array-1.c: Add an additional test for
unterminated format strings of length 1.
2007-08-13 Paul Thomas <pault@gcc.gnu.org>
PR fortran/32926

View File

@ -7,7 +7,8 @@
const char a1[] = "foo";
const char a2[] = "foo%d";
const char b[3] = "foo";
const char b1[3] = "foo";
const char b2[1] = "1";
static const char c1[] = "foo";
static const char c2[] = "foo%d";
char d[] = "foo";
@ -23,7 +24,8 @@ foo (int i, long l)
printf (a1);
printf (a2, i);
printf (a2, l); /* { dg-warning "format" "wrong type with array" } */
printf (b); /* { dg-warning "unterminated" "unterminated array" } */
printf (b1); /* { dg-warning "unterminated" "unterminated array" } */
printf (b2); /* { dg-warning "unterminated" "unterminated array" } */
printf (c1);
printf (c2, i);
printf (c2, l); /* { dg-warning "format" "wrong type with array" } */