[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