X-Git-Url: http://wagner.pp.ru/gitweb/?a=blobdiff_plain;f=src%2Frtfread.c;h=af6be86183986317643093fde87f6d03e36be582;hb=e2020c47c14a8a03f44734a6c0adc48fb5129c2f;hp=8ed1be68c78bf0634c2690241bc7886772d35c74;hpb=790e9375fd8612ef86f6acc6348a53d1ddc02f67;p=oss%2Fcatdoc.git diff --git a/src/rtfread.c b/src/rtfread.c index 8ed1be6..af6be86 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) {*/ @@ -352,9 +368,11 @@ signed long getNumber(FILE *f) { int c,count=0; char buf[RTFARGSMAXLEN]; - while(isdigit(c=fgetc(f)) || c=='-') { + 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);