Re: scanfs without field width limits making Gimp crash

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi!

On Mon, Jan 24, 2011 at 9:41 AM, Simon Budig <simon@xxxxxxxx> wrote:
> Ah sorry, should have mentioned that. The bug report is older than your
> mail to the list. We had a report on the %s conversion earlier which is
> what the patch attached to the bug attempts to fix.

Here (also from your patch):

snprintf (fmt_str, sizeof (fmt_str), "%%%lds %%%lds %%%lds %%%lds",
          sizeof (colorstr_r) - 1, sizeof (colorstr_g) - 1,
          sizeof (colorstr_b) - 1, sizeof (colorstr_a) - 1);

sscanf (ptr, fmt_str, colorstr_r, colorstr_g, colorstr_b, colorstr_a);

It will protects against the overflow, but there is a chance to get
wrong data (if the first string is also very big). For example, with
this ugly example code that I think that is similar to the one from
your patch:

#include <stdio.h>
int main()
{
  char str1[16];
  char str2[16];
  char str3[16];
  char str4[16];
  char fmt[128];
  char buf[] = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbb ccccccccccccccc ddddddddddddddd";

  snprintf(fmt, sizeof(fmt), "%%%lds %%%lds %%%lds %%%lds",
sizeof(str1) - 1, sizeof(str2) - 1, sizeof(str3) - 1, sizeof(str4) -
1);
  sscanf(buf, fmt, str1, str2, str3, str4);
  printf("*%s* *%s* *%s* *%s*", str1, str2, str3, str4);
  return 0;
}

See that we have one big string first and all the four vars (wrongly)
were used by it:
*aaaaaaaaaaaaaaa* *aaaaaaaaaaaaaaa* *aaaaaaaaaaaaaaa* *aaaaaaaaaaaaaaa*

Right?

Best regards,
Nelson
_______________________________________________
Gimp-developer mailing list
Gimp-developer@xxxxxxxxxxxxxxxxxxxxxx
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gimp-developer


[Index of Archives]     [Video For Linux]     [Photo]     [Yosemite News]     [gtk]     [GIMP for Windows]     [KDE]     [GEGL]     [Gimp's Home]     [Gimp on GUI]     [Gimp on Windows]     [Steve's Art]

  Powered by Linux