MCPcopy Create free account
hub / github.com/MediaArea/MediaInfoLib / DetectPercentEncode

Function DetectPercentEncode

Source/MediaInfo/Reader/Reader_libcurl.cpp:286–349  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

284 return Result;
285}
286MediaInfo_Config::urlencode DetectPercentEncode(const string& In, bool AcceptSlash=false)
287{
288 MediaInfo_Config::urlencode Result=MediaInfo_Config::URLEncode_Guess;
289 for (string::size_type i=0; i<In.size(); i++)
290 {
291 char C=In[i];
292 switch (C)
293 {
294 case '%':
295 {
296 if (i+2>In.size())
297 return MediaInfo_Config::URLEncode_No;
298 char C1=In[++i];
299 if (!((C1>='0' && C1<='9')
300 || (C1>='A' && C1<='F')
301 || (C1>='a' && C1<='f')))
302 return MediaInfo_Config::URLEncode_No;
303 char C2=In[++i];
304 if (!((C2>='0' && C2<='9')
305 || (C2>='A' && C2<='F')
306 || (C2>='a' && C2<='f')))
307 return MediaInfo_Config::URLEncode_No;
308 Result=MediaInfo_Config::URLEncode_Yes;
309 continue;
310 }
311 case '+': // Often used as space separator
312 case '\'':
313 case '!':
314 case '(':
315 case ')':
316 case '*':
317 continue;
318 case ';':
319 case ':':
320 case '@':
321 case '&':
322 case '=':
323 case '$':
324 case ',':
325 case '?':
326 case '#':
327 case '[':
328 case ']':
329 return MediaInfo_Config::URLEncode_No;
330 case '/':
331 if (AcceptSlash)
332 continue;
333 return MediaInfo_Config::URLEncode_No;
334 default:
335 if (!((C>='0' && C<='9')
336 || (C>='A' && C<='Z')
337 || (C>='a' && C<='z')
338 || C=='-'
339 || C=='.'
340 || C=='_'
341 || C=='~'))
342 {
343 if (Result!=MediaInfo_Config::URLEncode_Yes)

Callers 1

Format_Test_PerParserMethod · 0.85

Calls 1

sizeMethod · 0.45

Tested by

no test coverage detected