[Linux-bruxelles] segfault dans evolution-vcard-importer
Dany De Bontridder
dany at alchimerys.be
Jeu 20 Mai 18:36:06 CEST 2004
On Thu, 20 May 2004 18:09:49 +0200
Stan Pinte wrote:
> hello,
>
> en débuggant l'import d'un fichier .vcf dans evolution, je tombe sur
> une segfault, là:
>
> static char *
> read_file (char *name)
> {
> int len;
> char buff[65536];
> char line[1024];
> FILE *f;
>
> f = fopen (name, "r");
> if (f == NULL)
> g_error ("Unable to open %s!\n", name);
>
> len = 0;
> while (fgets (line, sizeof (line), f) != NULL) {
> SEGFAULT --> strcpy (buff + len, line);
> len += strlen (line);
> }
>
> fclose (f);
Les problèmes est si len devient > à 65536 alors plantage, car buf
limité à 65536 (et dernier char doit être égal à \0)
Que faire ?
ajouter un test : if ( (len += strlen(line) ) > sizeof (buf) )
g_error("File too big !!!");
au lieu d'utiliser strcpy, utiliser strcat, ça m'a l'air plus cohérent
puisque c'est ce que strcpy(char *a+offset,char *b) fait
strcat (buff,line);
> return g_strdup (buff);
> }
>
> quelqu'un a-t'il un conseil pour débugger cela, dans ce merveilleux
> language de programmation?
>
> Merci!
>
> Stan.
>
>
> --
> ------
> join me at spinte at jabber.org
> GPG: CBAC 1C79 D133 D3D7 247D D723 FCF9 AEB9 BC4F 5802
> ------
>
Plus d'informations sur la liste de diffusion Linux-bruxelles