노현종

포인터 변수 추상화 버그 해결, 각 블록마다 추상화를 독립적으로 하도록 변경

a->b->c 같은 포인터 변수를 구분하여 추상화 할 수 있도록 수정, 정규식 성능 최적화
...@@ -84,6 +84,10 @@ namespace VulnCrawler ...@@ -84,6 +84,10 @@ namespace VulnCrawler
84 // Repository 목록 만큼 반복함. 84 // Repository 목록 만큼 반복함.
85 foreach (var directory in directorys) { 85 foreach (var directory in directorys) {
86 // 템플릿 패턴화 T : VulnAbstractCrawler 86 // 템플릿 패턴화 T : VulnAbstractCrawler
87 + if (directory.Contains("linux"))
88 + {
89 + continue;
90 + }
87 VulnWorker.Run<VulnC>(directory); 91 VulnWorker.Run<VulnC>(directory);
88 } 92 }
89 } 93 }
......
...@@ -336,7 +336,7 @@ namespace VulnCrawler ...@@ -336,7 +336,7 @@ namespace VulnCrawler
336 // 메서드 정규식 패턴 336 // 메서드 정규식 패턴
337 string methodPattern = @"([a-zA-Z0-9_\.]+)\s*\("; 337 string methodPattern = @"([a-zA-Z0-9_\.]+)\s*\(";
338 // 변수 정규식 패턴 338 // 변수 정규식 패턴
339 - string fieldPattern = @"\*?(?<Field>[a-zA-Z0-9_\.\[\]\-\>]+)"; 339 + string fieldPattern = @"\*?(?<Field>([a-zA-Z0-9_\.]|\-\>)+)";
340 string fieldArrayPattern = @"(?<ArrayName>[a-zA-Z0-9_\.]+)\[.+\]"; 340 string fieldArrayPattern = @"(?<ArrayName>[a-zA-Z0-9_\.]+)\[.+\]";
341 string invalidPattern = @"^[\d\.]+"; 341 string invalidPattern = @"^[\d\.]+";
342 342
...@@ -441,7 +441,10 @@ namespace VulnCrawler ...@@ -441,7 +441,10 @@ namespace VulnCrawler
441 { 441 {
442 return false; 442 return false;
443 } 443 }
444 - 444 + if (m.Value.StartsWith("-"))
445 + {
446 + return false;
447 + }
445 /* 알파벳이 하나도 없으면 넘어감 */ 448 /* 알파벳이 하나도 없으면 넘어감 */
446 if(!m.Value.Any(c => char.IsLetter(c))) 449 if(!m.Value.Any(c => char.IsLetter(c)))
447 { 450 {
...@@ -458,20 +461,53 @@ namespace VulnCrawler ...@@ -458,20 +461,53 @@ namespace VulnCrawler
458 }) 461 })
459 .Distinct(new MatchComparer()); 462 .Distinct(new MatchComparer());
460 463
464 +
461 foreach (var x in vars) 465 foreach (var x in vars)
462 { 466 {
463 if (x.Success) 467 if (x.Success)
464 { 468 {
465 - methodVarList.Vars.Add(x.Groups["Field"].Value); 469 + var field = x.Groups["Field"].Value;
470 +
471 + /* a->b 포인터 변수 나눠서 추가 */
472 + if (field.Contains("->"))
473 + {
474 + var connects = Regex.Split(field, "->");
475 + var connectList = new List<string>();
476 +
477 + string s = string.Empty;
478 + foreach (var c in connects)
479 + {
480 + if (s == string.Empty)
481 + {
482 + s = c;
483 + }
484 + else
485 + {
486 + s = string.Join("->", s, c);
487 + }
488 + connectList.Add(s);
489 + }
490 + foreach (var c in connectList)
491 + {
492 + if (c == connects[connects.Length-1])
493 + {
494 + continue;
495 + }
496 + if (methodVarList.Vars.Contains(c))
497 + {
498 + continue;
499 + }
500 + methodVarList.Vars.Add(c);
501 + }
502 + continue;
503 + }
504 + methodVarList.Vars.Add(field);
466 } 505 }
467 } 506 }
468 -
469 foreach (var x in arrays) 507 foreach (var x in arrays)
470 { 508 {
471 methodVarList.Vars.Add(x); 509 methodVarList.Vars.Add(x);
472 } 510 }
473 -
474 -
475 foreach (var m in methodSets) 511 foreach (var m in methodSets)
476 { 512 {
477 methodVarList.Methods.Add(m); 513 methodVarList.Methods.Add(m);
...@@ -499,8 +535,7 @@ namespace VulnCrawler ...@@ -499,8 +535,7 @@ namespace VulnCrawler
499 // 메서드 정규식 패턴 535 // 메서드 정규식 패턴
500 string methodPattern = @"([a-zA-Z0-9_\.]+)\s*\("; 536 string methodPattern = @"([a-zA-Z0-9_\.]+)\s*\(";
501 // 변수 정규식 패턴 537 // 변수 정규식 패턴
502 - string fieldPattern = @"^*?[a-zA-Z0-9_\.\[\]\-\>]+"; 538 + string fieldPattern = @"\*?(?<Field>([a-zA-Z0-9_\.]|\-\>)+)";
503 -
504 string invalidPattern = @"^[\d\.]+"; 539 string invalidPattern = @"^[\d\.]+";
505 540
506 string commentPattern = @"[""].*[""]"; 541 string commentPattern = @"[""].*[""]";
......
This diff is collapsed. Click to expand it.