[Bug 51139] Application T at X 2021 freezes when trying to transmit data to Elster (German Tax Application)

WineHQ Bugzilla wine-bugs at winehq.org
Tue Aug 3 11:45:02 CDT 2021


https://bugs.winehq.org/show_bug.cgi?id=51139

--- Comment #20 from Henri Verbeet <hverbeet at gmail.com> ---
(In reply to Dieter Jurzitza from comment #16)
> I tried to guess from ms' patch what is the culprit and tried to change the
> code a such for futher testing:
> 
> --- dlls/d2d1/geometry.c.original       2021-07-20 22:09:28.000000000 +0200
> +++ dlls/d2d1/geometry.c        2021-07-30 21:51:31.768045816 +0200
> @@ -1708,12 +1708,21 @@
>  {
>      D2D1_POINT_2F intersection;
>      float t;
> -
> +    double delta=0;
> +    
>      d2d_point_calculate_bezier(&intersection, p[0], p[1], p[2], s);
> -    if (fabsf(q[1]->x - q[0]->x) > fabsf(q[1]->y - q[0]->y))
> -        t = (intersection.x - q[0]->x) / (q[1]->x - q[0]->x);
> -    else
> -        t = (intersection.y - q[0]->y) / (q[1]->y - q[0]->y);
> +    if (fabsf(q[1]->x - q[0]->x) > fabsf(q[1]->y - q[0]->y)){
> +        delta=(q[1]->x - q[0]->x);
> +        if (delta < 1.0e-12)
> +          delta=1.0e-12;
> +        t = (intersection.x - q[0]->x) / delta;
> +    }
> +    else {
> +        delta = (q[1]->y - q[0]->y);
> +        if (delta < 1.0e-12)
> +          delta=1.0e-12;
> +        t = (intersection.y - q[0]->y) / delta;
> +    }
>      if (t < 0.0f || t > 1.0f)
>          return TRUE;
> 
> thereby trying to avoid a divide - by - zero situation. However, this did
> not change anything in regards to the system behavior and the bug apparently
> remained "as is", wine crashing after messaging that a severe error had
> occured.
> I guess my assumption is wrong - would some kind soul direct me to the right
> place that needs modification?
> 
Well, the issue is more with the numerator than with the denominator in that
code. E.g. for "t = 1.0f / 0.0f" we'd get "t = +INF", but the rest of the code
would handle that fine. The issue is specifically "t = 0.0f / 0.0f" giving us
"t = NAN". The right answer in that case is "t = 0.0f". (Or "t = 1.0f"; it
doesn't really matter.)

The real question then becomes whether a zero-length segment can legitimately
occur here, or if that's simply caused by a bug elsewhere.

(In reply to Nikolay Sivov from comment #18)
> We'll need a data set to recreate such geometry as a test case, so this
> could be solved properly.

Does the testcase from ms in comment 14 (I haven't looked myself yet, but
thanks for that) work for you?

-- 
Do not reply to this email, post in Bugzilla using the
above URL to reply.
You are receiving this mail because:
You are watching all bug changes.



More information about the wine-bugs mailing list