*> Looks good! Please submit a Pull Request that Armin (and others) can > review. *
Done! The fuzzer already found a bug in the renderer, I have attached a patch (diff.txt) to fix this (https://github.com/freetype/freetype2-testing/runs/3213214141). If you require a merge request instead, then I'll make it tomorrow. Also, there is a timeout in one of the tests: 240 - truetype-render-i38:oss-fuzz/10398-5653547685773312-timeout (Timeout) Is there a way to increase the timeout ? As I would like to test this locally and confirm that it's just a timeout and not a bug. *> I think generally there are two options:* * > > - We do have a few screws at this point to steer how many glyphs we're > looking at in a single fuzzer run. We could either use one of the existing > ones or, if they are to coarse, we could introduce new screws that > specifically target the SDF mode. > > - Alternatively SDF could get it's very own fuzzer. We've already done this > to separate rendering from utility access; we _could_ look into further > separating fuzzing rendering from fuzzing SDF rendering. Although, that* *> would be quite a lot of work. * Seeing how slow the `sdf` renderer is I think the second option would be better. Dominik recently added the COLRv1 fuzzer, if the process is similar, then I can work on adding a new fuzzer for SDF. Thanks, Anuj
diff --git a/src/sdf/ftsdfrend.c b/src/sdf/ftsdfrend.c index 420ad496c..6fd104dbf 100644 --- a/src/sdf/ftsdfrend.c +++ b/src/sdf/ftsdfrend.c @@ -350,6 +350,8 @@ error = render->raster_render( render->raster, (const FT_Raster_Params*)¶ms ); + if ( x_shift || y_shift ) + FT_Outline_Translate( outline, -x_shift, -y_shift ); Exit: if ( !error ) { @@ -362,9 +364,6 @@ slot->internal->flags &= ~FT_GLYPH_OWN_BITMAP; } - if ( x_shift || y_shift ) - FT_Outline_Translate( outline, -x_shift, -y_shift ); - return error; } @@ -506,6 +505,16 @@ goto Exit; } + /* do not convert to SDF if the bitmap is not owned by glyph */ + if ( !(slot->internal->flags & FT_GLYPH_OWN_BITMAP) ) + { + FT_ERROR(( "ft_bsdf_render: can't convert bitmap to sdf;\n" )); + FT_ERROR(( " bitmap not owned by glyph.\n" )); + + error = FT_THROW( Invalid_Argument ); + goto Exit; + } + if ( !bitmap->rows || !bitmap->pitch ) goto Exit;