1
0
mirror of https://github.com/cc65/cc65.git synced 2024-12-26 08:32:00 +00:00

Check for end-of-data while reading the vector definitions. Other small

changes.


git-svn-id: svn://svn.cc65.org/cc65/trunk@5087 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
uz 2011-07-17 16:46:06 +00:00
parent dcd91b5d53
commit e33bd9a44c

View File

@ -6,7 +6,7 @@
/* */
/* */
/* */
/* (C) 2000-2009, Ullrich von Bassewitz */
/* (C) 2000-2011, Ullrich von Bassewitz */
/* Roemerstrasse 52 */
/* D-70794 Filderstadt */
/* EMail: uz@cc65.org */
@ -220,18 +220,23 @@ static void OptVersion (const char* Opt attribute ((unused)),
static void ConvertChar (StrBuf* Data, const unsigned char* Buf)
static void ConvertChar (StrBuf* Data, const unsigned char* Buf, int Remaining)
/* Convert data for one character. Original data is in Buf, converted data
* will be placed in Data.
*/
{
/* We should check here for reading past the end of the buffer in case the
* input data is not sane.
*/
/* Convert all drawing vectors for this character */
while (1) {
unsigned Op;
/* Check if we have enough data left */
if (Remaining < 2) {
Error ("End of file while parsing character definitions");
}
/* Get the next op word */
unsigned Op = (Buf[0] + (Buf[1] << 8)) & 0x8080;
Op = (Buf[0] + (Buf[1] << 8)) & 0x8080;
/* Check the opcode */
switch (Op) {
@ -267,6 +272,7 @@ static void ConvertChar (StrBuf* Data, const unsigned char* Buf)
/* Next Op */
Buf += 2;
Remaining -= 2;
}
}
@ -277,7 +283,12 @@ static void ConvertFile (const char* Input, const char* Output)
{
/* The header of a BGI vector font file */
static const unsigned char ChrHeader[] = {
/* 0x50, 0x4B, 0x08, 0x08, 0x42, 0x47, 0x49, 0x20 */
/* According to the Borland docs, the following should work, but it
* doesn't. Seems like there are fonts that work, but don't have the
* "BGI" string in the header. So we use just the PK\b\b mark as
* a header.
*
* 0x50, 0x4B, 0x08, 0x08, 0x42, 0x47, 0x49, 0x20 */
0x50, 0x4B, 0x08, 0x08
};
@ -373,6 +384,8 @@ static void ConvertFile (const char* Input, const char* Output)
/* Convert the characters */
for (Char = 0x20; Char <= 0x7E; ++Char, OffsetBuf += 2) {
int Remaining;
/* Add the offset to the offset table */
Offs = SB_GetLen (&VectorData);
SB_AppendChar (&Offsets, Offs & 0xFF);
@ -381,13 +394,16 @@ static void ConvertFile (const char* Input, const char* Output)
/* Get the offset of the vector data in the BGI data buffer */
Offs = OffsetBuf[0] + (OffsetBuf[1] << 8);
/* Calculate the remaining data in the buffer for this character */
Remaining = Size - (Offs + (VectorBuf - Buf));
/* Check if the offset is valid */
if (Offs + (VectorBuf - Buf) > Size) {
if (Remaining <= 0) {
Error ("Invalid data offset in input file `%s'", Input);
}
/* Convert the vector data and place it into the buffer */
ConvertChar (&VectorData, VectorBuf + Offs);
ConvertChar (&VectorData, VectorBuf + Offs, Remaining);
}
/* Complete the TCH header */