MCPcopy Create free account
hub / github.com/cgsecurity/testdisk / header_check_xml

Function header_check_xml

src/file_txt.c:1981–2095  ·  view source on GitHub ↗

@ @ 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

Source from the content-addressed store, hash-verified

1979 file_recovery_new->file_rename == &file_rename_html;
1980 @*/
1981static 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;

Callers 1

main_xmlFunction · 0.70

Calls 3

MALLOCFunction · 0.85
reset_file_recoveryFunction · 0.85
strncasecmpFunction · 0.85

Tested by

no test coverage detected