On 05/04/2013 05:13 PM, Max TenEyck Woodbury wrote:

Having wine throw an exception where it did not do so before is another
kind of problem indicator.  One that hardly needs a special conformance
test. Hmm. As I suspected, that is a single point pass only test. It does
not explore any of the possible fail conditions.  Thus, it is also
definitely a possibility that Windows makes no such sanity check.

I suggested the conformance test for removing the sanity check, not for the crash. We need to know for sure whether Windows makes no such sanity check before we act on that possibility.

Almost certainly.  Without this patch, the 'make test' suit throws a
divide by zero exception and brings up a dialog box.  With this patch,
it does not.  I believe that is sufficient to convict the unpatched
code of having something wrong with it.
The flaw in your logic is that you're assuming the code which generates the exception is necessarily the code that's written incorrectly. By the same logic, you could patch out the crash handler and say "Look, no more crash dialog! It's fixed!"

I agree that the unpatched code is definitely dividing by zero in this case; but according to Dmitry, tmHeight is never supposed to be 0. If he's correct, it means that this code is correct (given the assumption), but something else is bugged (thereby violating that "contract of behavior") and that's what should be fixed instead.


 As Dmitry has said,
tmHeight should never be 0, so it's probably valid to assume
tmHeight!=0.

But that assumption can be checked.  Currently there is no such check.
'Should' in this context is a very bad word and has no place at the
foundation of an argument about what actually happens.
I agree that this assumption can/should be checked, but the appropriate place to do that is in unit tests. This also verifies that the assumption holds on Windows as well, ensuring that Wine's behavior doesn't diverge from that of Windows.

And yeah, sorry for using "should" - it is kind of a weak word, in retrospect... I think "must" would have been a better choice, but I'm not certain enough for a word so strong: We need to see what tmHeight does on Windows (that means tests!) before we can argue it one way or another. :)


 The bug may instead be in allowing the font to load with
tmHeight=0, and this is merely the first crash that the problem causes
for you. But what about apps that divide by tmHeight under the same
assumption? We can't change those, so it's better to fix tmHeight.

If the APP does the division, that is the APP's problem.  Wine, on the
other hand should not throw an exception, and it did NOT do so until
recently.  Whoever wrote the new code (Dmitry?) should have put in the
check or made the test work without doing a division.  The fact that it
fails is the problem being addressed.
If the app, which was made for Windows, works on Windows, but not on Wine, then it is our problem, not the app's. The crash that you're seeing is a clear indicator of *something* being wrong, but we don't yet know specifically what.


I have no objection to someone writing an alternative patch and backing
this one out when that patch goes in, but until then, this patch, or
something like it, needs to be applied.  With wine throwing the
exception, some Apps are going to fail that would not fail otherwise.
That is definitely a 'Bad Thing' and should be fixed ASAP (like right
now)!
Crashes are definitely a Bad Thing(TM), but this patch may not fix all of them (e.g. with apps that assume tmHeight!=0) without actually fixing the underlying problem. In fact, this patch itself could be a Bad Thing(TM) -- if something is wrong with tmHeight calculation/scaling, the patch might only mask the real issue, which would make a proper fix take even longer.

-----

I would like to reiterate: I simply don't know what tmHeight is supposed to do. According to Dmitry, the real bug is having tmHeight=0. If Windows allows tmHeight=0 under some circumstance, then your patch is the right thing to do, because we must prevent a division by zero in that case. If Windows absolutely disallows tmHeight=0, then the bug is actually that Wine allows tmHeight=0, and so we should be focusing on that instead.

Hope this helps,
Sam


Reply via email to