--- Please note the new email address --- On Thu, 28 Nov 2019, Strace Labs wrote: > Hi, > I am working on a semantic patch for replacing specific format string token based on the used data-type. > so, I have several calls of my_printf() and some special macros pointing to them around my code. > > e.g: part of my code. > ..... > struct mydata *m; > struct mydata h; > ..... > my_printf("%s", m->name); > ..... > my_printf("%s", h.name); > ..... > my_printf("whatever id %d following the string %s\n", id, m->name); > .... > Macro_to_my_printf("Hey id %d, let's see %s\n", id, h.name); > ..... > Macro2_to_my_printf(fd, "Hey id %d, let's see %s\n", id, m->name); > ..... > > My current humble *.cocci > > $ cat fix-my_printf.cocci > @r1_heap@ > struct mydata *SMD; > format F =~ "s"; > @@ > -my_printf("%@F@", SMD->name); > +my_printf("%m", SMD); > > @r1_stack@ > struct mydata SMD; > format F =~ "s"; > @@ > -my_printf("%@F@", SMD.name); > +my_printf("%m", &SMD); > $ > > But, I can match only with partial content as can be seen below. > > $ spatch --partial-match --sp-file fix-my_printf.cocci sample-format-string.c | egrep "^(\+|-)" > HANDLING: sample-format-string.c > diff = > HANDLING: /Volumes/Users/jpereira/Devel/Sandbox/sample-format-string.c > diff = > --- /Volumes/Users/jpereira/Devel/Sandbox/sample-format-string.c > +++ /var/folders/ld/6tg9c6qj4fx4c85q26mcqrsh0000gn/T/cocci-output-24659-130f86-sample-format-string.c > - my_printf("%s", m->name); > + my_printf("%m", m); > - my_printf("%s", h.name); > + my_printf("%m", &h); > $ > > Anyone could give me a light about how to proceed to match the entire ".....string format..." ? I think that what you are asking is why you can't write a pattern like: foo("... -%@d@ +%x ...") At the moment, there seems to be a bug. I will check on that. julia