@ @ requires separation: \separated(&file_hint_fasttxt, buffer+(..), file_recovery, file_recovery_new); @ requires valid_header_check_param(buffer, buffer_size, safe_header_only, file_recovery, file_recovery_new); @ ensures valid_header_check_result(\result, file_recovery_new); @ ensures \result == 1; @ ensures file_recovery_new->calculated_file_size == 0; @ ensures file_recovery_n
| 1979 | file_recovery_new->file_rename == &file_rename_html; |
| 1980 | @*/ |
| 1981 | static int header_check_xml(const unsigned char *buffer, const unsigned int buffer_size, const unsigned int safe_header_only, const file_recovery_t *file_recovery, file_recovery_t *file_recovery_new) |
| 1982 | { |
| 1983 | const char *tmp; |
| 1984 | /* buffer may not be null-terminated */ |
| 1985 | char *buf=(char *)MALLOC(buffer_size+1); |
| 1986 | memcpy(buf, buffer, buffer_size); |
| 1987 | buf[buffer_size]='\0'; |
| 1988 | reset_file_recovery(file_recovery_new); |
| 1989 | file_recovery_new->data_check=&data_check_txt; |
| 1990 | file_recovery_new->file_check=&file_check_xml; |
| 1991 | file_recovery_new->extension=NULL; |
| 1992 | tmp=strchr(buf,'<'); |
| 1993 | /*@ |
| 1994 | @ loop invariant valid_file_recovery(file_recovery_new); |
| 1995 | @ loop assigns tmp; |
| 1996 | @*/ |
| 1997 | while(tmp!=NULL) |
| 1998 | { |
| 1999 | if(strncasecmp(tmp, "<Grisbi>", 8)==0) |
| 2000 | { |
| 2001 | /* Grisbi - Personal Finance Manager XML data */ |
| 2002 | file_recovery_new->extension=extension_gsb; |
| 2003 | free(buf); |
| 2004 | return 1; |
| 2005 | } |
| 2006 | else if(strncasecmp(tmp, "<collection type=\"GC", 20)==0) |
| 2007 | { |
| 2008 | /* GCstart, personal collections manager, http://www.gcstar.org/ */ |
| 2009 | file_recovery_new->extension=extension_gcs; |
| 2010 | free(buf); |
| 2011 | return 1; |
| 2012 | } |
| 2013 | else if(strncasecmp(tmp, "<html", 5)==0) |
| 2014 | { |
| 2015 | file_recovery_new->data_check=&data_check_html; |
| 2016 | file_recovery_new->extension=extension_html; |
| 2017 | file_recovery_new->file_rename=&file_rename_html; |
| 2018 | free(buf); |
| 2019 | return 1; |
| 2020 | } |
| 2021 | else if(strncasecmp(tmp, "<Version>QBFSD", 14)==0) |
| 2022 | { |
| 2023 | /* QuickBook */ |
| 2024 | file_recovery_new->extension=extension_fst; |
| 2025 | free(buf); |
| 2026 | return 1; |
| 2027 | } |
| 2028 | else if(strncasecmp(tmp, "<svg", 4)==0) |
| 2029 | { |
| 2030 | /* Scalable Vector Graphics */ |
| 2031 | file_recovery_new->extension=extension_svg; |
| 2032 | file_recovery_new->file_check=&file_check_svg; |
| 2033 | free(buf); |
| 2034 | return 1; |
| 2035 | } |
| 2036 | else if(strncasecmp(tmp, "<!DOCTYPE CDXML", 15)==0) |
| 2037 | { |
| 2038 | file_recovery_new->extension=extension_cdxml; |
no test coverage detected