gdi32: Simplify font->aveWidth sanity-checking to fix possible division by zero. (try 2)

Christian Costa titan.costa at gmail.com
Wed May 8 06:44:52 CDT 2013


Le 08/05/2013 11:45, Sam Edwards a écrit :
> After feedback from Dmitry (thanks!), I redid this patch with the 
> following changes:
>
> * I misunderstood before what the test did; I initially thought this 
> was just a workaround to get aveWidth to behave, but as it turns out, 
> Windows has the same "maximum ratio of 100" limit. I changed the 
> comment to reflect that; hopefully this stops someone else from making 
> my mistake. :)
> * Negative aveWidth checking is removed. I agree that there should be 
> a test to put this in, but Windows treats negative aveWidths as 
> invalid (according to Aric), so it can't be tested on Windows. That's 
> a much bigger mess than a simple "fix divide by zero" patch is worth.
> * The division is done differently, to avoid potential overflow 
> problems. The result of the comparison is still exactly the same as 
> before the patch, except zero values are now handled gracefully.
>
> This supersedes 96111 (which, I forgot to mention before, supersedes 
> 96053 and 96047).
>
> Best,
> Sam
>
+        if (font->aveWidth &&
+                (font->aveWidth - 1) / 100 >= font->potm->otmTextMetrics.tmHeight)
          {
-            if ((font->aveWidth + font->potm->otmTextMetrics.tmHeight - 1) / font->potm->otmTextMetrics.tmHeight > 100)
-            {

Hi Sam,

The test in the if is not that long. Shouldn't this fit into a single like as the previous test?

Christian




More information about the wine-devel mailing list