X-Git-Url: http://www.wagner.pp.ru/gitweb/?p=oss%2Fcatdoc.git;a=blobdiff_plain;f=src%2Fanalyze.c;h=6ed7ea60844b8960dc57d3b99d837c3f5c343d9a;hp=b721ce6d77d1191f560bf22ede79681e54d46cef;hb=ccf8e1947728585acd2301c9b8e459e6918bfb5f;hpb=51f0f8ed69b065cd2577a27c2a2911cdda243b99 diff --git a/src/analyze.c b/src/analyze.c index b721ce6..6ed7ea6 100644 --- a/src/analyze.c +++ b/src/analyze.c @@ -12,7 +12,7 @@ #include #include #include "catdoc.h" -char ole_sign[]={0xD0,0xCF,0x11,0xE0,0xA1,0xB1,0x1A,0xE1,0}; +extern char ole_sign[], zip_sign[]; /* from ole.c */ char rtf_sign[]="{\\rtf"; char old_word_sign[]={0xdb,0xa5,0}; char write_sign[]={0x31,0xBE,0}; @@ -39,18 +39,22 @@ int analyze_format(FILE *f) { } catdoc_read(buffer,4,1,f); buffer[4]=0; - if (strncmp(buffer,write_sign,2)==0) { + if (strncmp((char *)&buffer,write_sign,2)==0) { printf("[Windows Write file. Some garbage expected]\n"); get_unicode_char=get_8bit_char; return process_file(f,LONG_MAX); - } else if (strncmp(buffer,rtf_sign,4)==0) { + } else if (strncmp((char *)&buffer,rtf_sign,4)==0) { return parse_rtf(f); - } else if (strncmp(buffer,old_word_sign,2)==0) { + } else if (strncmp((char *)&buffer, zip_sign,4) == 0) { + fprintf(stderr,"This file looks like ZIP archive or Office 2007 " + "or later file.\nNot supported by catdoc\n"); + exit(1); + } else if (strncmp((char *)&buffer,old_word_sign,2)==0) { fread(buffer+4,1,124,f); return parse_word_header(buffer,f,128,0); } fread(buffer+4,1,4,f); - if (strncmp(buffer,ole_sign,8)==0) { + if (strncmp((char *)&buffer,ole_sign,8)==0) { if ((new_file=ole_init(f, buffer, 8)) != NULL) { set_ole_func(); while((ole_file=ole_readdir(new_file)) != NULL) { @@ -66,12 +70,12 @@ int analyze_format(FILE *f) { set_std_func(); ole_finish(); } else { - fprintf(stderr,"Broken OLE file. Try using -b switch"); + fprintf(stderr,"Broken OLE file. Try using -b switch\n"); exit(1); } } else { - set_std_func(); - copy_out(f,buffer); + + copy_out(f,(char *)&buffer); return 0; }