X-Git-Url: http://www.wagner.pp.ru/gitweb/?p=oss%2Fcatdoc.git;a=blobdiff_plain;f=src%2Frtfread.c;h=86a57fbb771a4f04a15b27a8890263cbf963f826;hp=8ed1be68c78bf0634c2690241bc7886772d35c74;hb=f03d3bbce7b36e358df5ee15fab1af190ffcad5a;hpb=0b4d0a1e010cf93c4b9311c9ebf27c91bc2714cc diff --git a/src/rtfread.c b/src/rtfread.c index 8ed1be6..86a57fb 100644 --- a/src/rtfread.c +++ b/src/rtfread.c @@ -103,6 +103,7 @@ RTFTypeMap rtf_types[]={ #define RTFNAMEMAXLEN 32 #define RTFARGSMAXLEN 64 +#define MAX_DIGITS_IN_NUMBER 10 /** * Structure describing rtf command @@ -261,8 +262,23 @@ int parse_rtf(FILE *f) { if (data_skip_mode == 0) add_to_buffer(&bufptr,com.numarg); i=groups[group_count].uc; - while((--i)>0) - fgetc(f); + while((--i)>0) { + int c=fgetc(f); + if (c == '\\') { + c = fgetc(f); + switch (c) { + case '\\': break; + case '\'': + /* skip two hex digits */ + fgetc(f); + fgetc(f); + break; + default: + break; + } + } + } + break; case RTF_PARA: /*if (para_mode > 0) {*/ @@ -355,6 +371,8 @@ signed long getNumber(FILE *f) { while(isdigit(c=fgetc(f)) || c=='-') { if(feof(f)) return -1; + if (count > MAX_DIGITS_IN_NUMBER) + break; buf[count++]=(char)c; } ungetc(c,f);