> let snprintf_va = makeVarinfo true "snprintf" (TVoid [])> let snprintf =
Lval((Var snprintf_va),NoOffset)
> >
> > class snprintfV ?(tracelist=[]) file = object
> > inherit nopCilVisitor
> > method vstmt s = ChangeDoChildrenPost(
> > s,
> > fun s -> if L.mem (s.sid) tracelist then (
> > match s.skind with
> > |Instr il -> let new_il = L.map (
> > fun ins -> match ins with
> > |Call(None,Lval(Var {vname="sprintf"},_),expl,loc)->
> > let to_buf = L.hd expl in
> > Call(None,snprintf,to_buf::(SizeOfE(to_buf)::L.tl
> expl),loc)
>
> I'm not sure the SizeOfE will give a reliable result (imagine buf is a
> pointer on a malloc()ed area, rather than an static array - this is
> undecidable in the general case). But if your tracelist contains only
> statements on which this transformation is sound, this should be good.
>
>
I don't know if using SizeOfE is right either ---
if the program is
char dest [100] = "";
char *src = "hello world";
sprintf(dest,src);
so if I want to change it to
snprintf(dest,src,sizeof(dest));
then I am not sure which SizeOf to use ? should I use AddressOf something
here?
------------------------------------------------------------------------------
This SF.Net email is sponsored by the Verizon Developer Community
Take advantage of Verizon's best-in-class app development support
A streamlined, 14 day to market process makes app distribution fast and easy
Join now and get one step closer to millions of Verizon customers
http://p.sf.net/sfu/verizon-dev2dev
_______________________________________________
CIL-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/cil-users