[Libreoffice] RFC: Idea for fuzz-testing filters

Caolán McNamara caolanm at redhat.com
Wed Oct 5 06:11:31 PDT 2011


On Wed, 2011-10-05 at 18:25 +0530, Marc-André Laverdière wrote:
> Hi everyone,
> 
> Before I start writing code, I wanted to get the input of more
> experienced developers.
> 
> Why bother about this? Why not use what's available out there? Well...
>  - Fuzzgrind isn't well documented and won't work out of the box,
>  - zzuf has too many bells and whistles, and won't guarantee that every
> byte has been messed up with. I used it to generate a lot of cases, and
> it fills a disk quickly enough
>  - Peachfuzz and others that rely on a specification: well, we have file
> formats with hundreds of pages specified.
> 
> Here is the idea:
> One process if the fuzzer process, it does the following (pseudocode):
> 
>   spawn "valgrind test-program"
>   for (i = 0; i < file.length; i++)
>     fuzzed = memcpy(file)
>     fuzzed[i] = 0xFF (or whatever)
>     write(temp-dir/random-name, fuzzed)
>     read output from the spawned process until the marker is read
>     if valgrind output is more than the expected valgrind start/end markers
>       then copy valgrind output to results directory
>       then copy fuzzed to results directory
>     if spawned program crashed then restart it
> 
> The other process would do as follows:
>   while(forever)
>     check if a new file is in temp-dir
>     if the file name is "terminate-yourself", then exit
>     try to load the file with the filter
>     output a marker like "-------- Done trying to load ---------"
> 
> With this design, we avoid a lot of process creation overhead.
> We can probably generalize it enough that we can put pretty much any
> filter in there.
> 
> What do you think of this idea? What improvements we can add?

caolanm->huzaifas: any advice ?

C.



More information about the LibreOffice mailing list