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

Function header_check_ogg

src/file_ogg.c:108–136  ·  view source on GitHub ↗

@ @ requires buffer_size >= 0x78+7; @ requires separation: \separated(&file_hint_ogg, 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); @*/

Source from the content-addressed store, hash-verified

106 @ ensures valid_header_check_result(\result, file_recovery_new);
107 @*/
108static int header_check_ogg(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)
109{
110 static const unsigned char sign_theora[7]= {0x80, 't', 'h', 'e', 'o', 'r', 'a'};
111 /* http://en.wikipedia.org/wiki/Ogg#File_format */
112 /* Return if not Beginning Of Stream and already saving the file */
113 if((buffer[5]&0x02)!=0x02 &&
114 file_recovery->file_stat!=NULL &&
115 file_recovery->file_check!=NULL &&
116 file_recovery->file_stat->file_hint==&file_hint_ogg)
117 {
118 header_ignored(file_recovery_new);
119 return 0;
120 }
121 reset_file_recovery(file_recovery_new);
122 file_recovery_new->calculated_file_size=0;
123 if(file_recovery_new->blocksize > 27+255)
124 {
125 file_recovery_new->data_check=&data_check_ogg;
126 file_recovery_new->file_check=&file_check_size;
127 }
128 /* Ogg data, Theora video */
129 if(memcmp(&buffer[28], sign_theora, sizeof(sign_theora))==0)
130 file_recovery_new->extension="ogv";
131 else if(memcmp(&buffer[0x78], sign_theora, sizeof(sign_theora))==0)
132 file_recovery_new->extension="ogv";
133 else
134 file_recovery_new->extension=file_hint_ogg.extension;
135 return 1;
136}
137
138static void register_header_check_ogg(file_stat_t *file_stat)
139{

Callers

nothing calls this directly

Calls 2

header_ignoredFunction · 0.85
reset_file_recoveryFunction · 0.85

Tested by

no test coverage detected