From: Junio C Hamano Date: Mon, 14 Jun 2010 20:40:21 GMT Subject: Re: [PATCH v2 2/3] textconv: support for blame Message-ID: <7vfx0p9wlm.fsf@alter.siamese.dyndns.org> In-Reply-To: <1275924218-20154-2-git-send-email-axel.bonnet@ensimag.imag.fr> Axel Bonnet writes: > @@ -86,16 +87,49 @@ struct origin { > ... > +static void fill_origin_blob(struct diff_options *opt, > + struct origin *o, mmfile_t *file) > { > if (!o->file.ptr) { > enum object_type type; > num_read_blob++; > - file->ptr = read_sha1_file(o->blob_sha1, &type, > - (unsigned long *)(&(file->size))); > + > + if (DIFF_OPT_TST(opt, ALLOW_TEXTCONV) && > + textconv_object(o->path, o->blob_sha1, &file->ptr, > + (size_t *) &file->size)) This cast is not correct, as there is no guarantee that your size_t and typeof(mmfile_t.size) are compatible. Depending on the gcc version, you would get "dereferencing type-punned pointer will break strict-aliasing rules" error. The same issue exists in Clément's patch to builtin/cat-file.c.