[Linux-bruxelles] segfault dans evolution-vcard-importer

Stan Pinte stanpinte at fastmail.fm
Ven 21 Mai 10:05:48 CEST 2004


Frederic Peters wrote:

>Dany De Bontridder écrivait :
>
>  
>
>>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 !!!");
>>    
>>
>
>Pas du tout, c'est de l'amputage inutile.  Pourquoi partir en pleurant
>des points d'exclamation alors qu'il est tout à fait possible de gérer
>les fichiers de toute taille ?
>
>
>Le code pourrait ainsi devenir:
>
>char* read_file (char *name)
>{
>	char *buf;
>	size_t len;
>	FILE *f;
>
>	f = fopen(name, "r");
>	if (f == NULL) {
>		g_error ("Unable to open %s!\n", name);
>	}
>
>	fseek(f, 0, SEEK_END);
>	len = ftell(f);
>	buf = g_malloc(len+1);
>                /* non, ne venez pas dire que la valeur de buf devrait
>                 * être vérifiée ici avant d'avoir lu g_malloc() */
>	fseek(f, 0, SEEK_SET);
>  
>

petite question, fred:  fread, il devine l'encodage de ton fichier?

>	fread(buf, len, 1, f);
>  
>

merci,

Stan.

>        fclose(f);
>	
>	return buf;
>}
>
>Et puis, on peut continuer à explorer la GLib et découvrir qu'il y a
>moyen de faire:
>
>char* readfile (char *name)
>{
>        gboolean rc;
>        gsize len;
>        gchar *contents;
>        GError *errors;
>
>        rc = g_file_get_contents(name, &contents, &len, &errors);
>  
>

trop beau!!

Stan.

>        if ( rc == FALSE ) {
>                /* ici, on pourrait regarder dans errors pour dire ce
>                 * qui s'est mal passé */
>                g_error("badaboom\n");
>        }
>        
>        return contents;
>}
>
>
>
>        Frédéric
>
>  
>

-------------- section suivante --------------
Une pièce jointe autre que texte a été nettoyée...
Nom: signature.asc
Type: application/pgp-signature
Taille: 261 octets
Desc: OpenPGP digital signature
URL: </pipermail/linux-bruxelles/attachments/20040521/630c7edb/attachment-0001.sig>


Plus d'informations sur la liste de diffusion Linux-bruxelles