포인터 변수 추상화 버그 해결, 각 블록마다 추상화를 독립적으로 하도록 변경
a->b->c 같은 포인터 변수를 구분하여 추상화 할 수 있도록 수정, 정규식 성능 최적화
Showing
3 changed files
with
47 additions
and
8 deletions
... | @@ -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.
-
Please register or login to post a comment