[comp.windows.interviews] doc crashes -- IV3.0b...

drich@klaatu.lanl.gov (David O. Rich) (05/14/91)

I've been playing around with "doc" lately and discovered that when I
tried to print a document it simply crashed (seg. fault).  There
doesn't appear to be any other problems since I can browse, edit, etc,
without a hitch.  I've applied all the recent patches (up to fix6 I
believe).  I'm wondering if I simply haven't set a property
properly...? Anyone else seen this behavior running on a SPARCstation1
with SunOS-4.1.1b?

Thanks,

--Dave

calder@uluru.stanford.edu (Paul Calder) (05/17/91)

David Rich uncovered a bug that triggered a core dump when printing
some documents.  The bug is tickled if these three conditions are met.

1. You are printing a document that contains an Idraw drawing that
   contains text.

2. You set the property '*idraw_font_metrics' to 'off'.

3. You have no PostScript font metrics files installed at your site.

This patch is archived as 'pub/3.0-fixes/fix8'.

============
    This patch assumes that fix6 has already been applied.
    Apply with ``patch -p -N < fix8'' at the top of the source tree.

*** iv/src/bin/doc/IdrawImage.c.beta+fix6  Thu Apr 11 23:21:20 1991
--- iv/src/bin/doc/IdrawImage.c            Thu May 16 12:01:21 1991
***************
*** 202,219 ****
          if (font == nil) {
            World* w = World::current();
              font = new FontInfo;
-             boolean screen_font_exists = Font::exists(w, buffer);
              if (_idraw_font_metrics) {
!                 if (screen_font_exists) {
                      font->_font = new Font(buffer);
                  } else {
                      font->_font = w->font();
                  }
              } else {
!                 if (screen_font_exists) {
                      font->_font = new PSFont(psname, pointsize, buffer, 1.0);
                  } else {
!                     font->_font = new PSFont(psname, pointsize, "fixed", 1.0);
                  }
              }
              font->_font->ref();
--- 202,218 ----
          if (font == nil) {
            World* w = World::current();
              font = new FontInfo;
              if (_idraw_font_metrics) {
!                 if (Font::exists(w, buffer)) {
                      font->_font = new Font(buffer);
                  } else {
                      font->_font = w->font();
                  }
              } else {
!                 if (PSFont::exists(psname)) {
                      font->_font = new PSFont(psname, pointsize, buffer, 1.0);
                  } else {
!                     font->_font = w->font();
                  }
              }
              font->_font->ref();
--
Paul Calder
Computer Systems Lab
Stanford University
calder@lurch.stanford.edu