Fix segfault in general_textout with variable-pitch fonts: we can't
authorsimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Wed, 29 Dec 2010 16:00:58 +0000 (16:00 +0000)
committersimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Wed, 29 Dec 2010 16:00:58 +0000 (16:00 +0000)
pass null lpDx, because general_textout depends on it being filled in.
Instead we null it out in the calls to subroutines _from_
general_textout.

git-svn-id: svn://svn.tartarus.org/sgt/putty@9064 cda61777-01e9-0310-a592-d414129be87e

windows/window.c

index f47fb47..9060bd1 100644 (file)
@@ -1323,7 +1323,8 @@ for(k=0;k<j-i;k++)debug((" U+%04X", lpString[i+k]));
 debug(("\n           rect: [%d,%d %d,%d]\n", newrc.left, newrc.top, newrc.right, newrc.bottom));
 }
 #endif
-           exact_textout(hdc, xp, y, &newrc, lpString+i, j-i, lpDx+i, opaque);
+           exact_textout(hdc, xp, y, &newrc, lpString+i, j-i,
+                          font_varpitch ? NULL : lpDx+i, opaque);
        } else {
 #ifdef FIXME_REMOVE_BEFORE_CHECKIN
 {
@@ -1338,7 +1339,8 @@ debug(("\n           rect: [%d,%d %d,%d]\n", newrc.left, newrc.top, newrc.right,
            newrc.top = lprc->top;
            newrc.bottom = lprc->bottom;
            ExtTextOutW(hdc, xp, y, ETO_CLIPPED | (opaque ? ETO_OPAQUE : 0),
-                       &newrc, lpString+i, j-i, lpDx+i);
+                       &newrc, lpString+i, j-i,
+                        font_varpitch ? NULL : lpDx+i);
        }
 
        i = j;
@@ -3508,7 +3510,7 @@ void do_text_internal(Context ctx, int x, int y, wchar_t *text, int len,
             /* print Glyphs as they are, without Windows' Shaping*/
             general_textout(hdc, x + xoffset,
                             y - font_height * (lattr==LATTR_BOT) + text_adjust,
-                            &line_box, wbuf, len, IpDxReal,
+                            &line_box, wbuf, len, IpDx,
                             opaque && !(attr & TATTR_COMBINING));
 
             /* And the shadow bold hack. */