Hi, Greg.

I checked out CVS, but as I see pcf loader is not changed too much.
Let look at pcf_readbitmaps() function:

Spec says

>>>
int32 glyph_count;      /* byte ordering depends on format, should be the
same as the metrics count */
<<<

But pcf_readbitmaps() assumes that glyph_count is LSB:

num_glyphs = readLSB32(file);

----

I modified font_pcf.c as follows:

/******************************************************/
        if ((offset = pcf_get_offset(PCF_BITMAPS)) == -1)
                return -1;

        printf("PCF OFFSET %ld\n", offset);
        FSEEK(file, offset, SEEK_SET);

        format = readLSB32(file);
        printf("PCF FORMAT %ld\n", format);
        endian = (format & PCF_BIT_MASK)? PCF_LSB_FIRST: PCF_MSB_FIRST;

        printf("PCF ENDIAN %d\n", endian);
        num_glyphs = readLSB32(file);

        printf("PCF GLYPH %ld\n", num_glyphs);
        return -1; /* Avoid segfault on koi8 font */
/******************************************************/

Then I modified mtest.c demo as follows:

/******************************************************/
       case WM_CREATE:
                /* This will work */
                GdCreateFont(&scrdev, "lubI24.pcf", 0, NULL);

                /* This will segfault */
                GdCreateFont(&scrdev, "koi5x8.pcf", 0, NULL);
        break;
/******************************************************/

I got:

/* lubI24.pcf */
PCF OFFSET 2028
PCF FORMAT 2
PCF ENDIAN 1
PCF GLYPH 229 /* Ok */

/* koi5x8.pcf */
PCF OFFSET 2132
PCF FORMAT 14
PCF ENDIAN 0
PCF GLYPH -16777216 /* pcf loader will malloc() this number of
                                    bytes and segfault later */

--

Attachment: koi5x8.pcf
Description: Binary data

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to