노현종

크리티컬 변수 보완

...@@ -69,12 +69,12 @@ namespace VulnCrawler ...@@ -69,12 +69,12 @@ namespace VulnCrawler
69 69
70 // var fields = VulnWorker.GetCriticalVariant(@"return _is_safe_url(url, host) and _is_safe_url(url.replace('\\', '/'), host)"); 70 // var fields = VulnWorker.GetCriticalVariant(@"return _is_safe_url(url, host) and _is_safe_url(url.replace('\\', '/'), host)");
71 var c = new VulnC(); 71 var c = new VulnC();
72 - var fields = c.GetCriticalVariant(@"cs64_chunk.chunkSize64 = 12345678;"); 72 + var fields = c.ExtractCriticalVariant(@"!DoReadFile (infile, &ds64_chunk, sizeof (DS64Chunk), &bcount) ||/* aaaa */");
73 foreach (var item in fields) 73 foreach (var item in fields)
74 { 74 {
75 Console.WriteLine(item); 75 Console.WriteLine(item);
76 } 76 }
77 - return; 77 + // return;
78 var directorys = Directory.GetDirectories(@"c:\VulnPy"); 78 var directorys = Directory.GetDirectories(@"c:\VulnPy");
79 if (directorys.Length == 0) { 79 if (directorys.Length == 0) {
80 Console.WriteLine("Repository 목록 찾기 실패"); 80 Console.WriteLine("Repository 목록 찾기 실패");
......
...@@ -168,24 +168,33 @@ namespace VulnCrawler ...@@ -168,24 +168,33 @@ namespace VulnCrawler
168 /// </summary> 168 /// </summary>
169 /// <param name="line">현재 코드줄</param> 169 /// <param name="line">현재 코드줄</param>
170 /// <returns></returns> 170 /// <returns></returns>
171 - public IEnumerable<string> GetCriticalVariant(string line) 171 + public IEnumerable<string> ExtractCriticalVariant(string line)
172 { 172 {
173 line = line.Trim(); 173 line = line.Trim();
174 + if (string.IsNullOrWhiteSpace(line))
175 + {
176 + yield break;
177 + }
174 if (line.StartsWith("//")) 178 if (line.StartsWith("//"))
175 { 179 {
176 yield break; 180 yield break;
177 } 181 }
178 string declarePattern = @"(?<Declare>[a-zA-Z0-9_\.]+) [a-zA-Z0-9_\.]+ ="; 182 string declarePattern = @"(?<Declare>[a-zA-Z0-9_\.]+) [a-zA-Z0-9_\.]+ =";
179 // 메서드 정규식 패턴 183 // 메서드 정규식 패턴
180 - string methodPattern = @"(\w+)\s*\("; 184 + string methodPattern = @"([a-zA-Z0-9_\.]+)\s*\(";
181 // 변수 정규식 패턴 185 // 변수 정규식 패턴
182 - string fieldPattern = @"^*?[a-zA-Z0-9_\.]+"; 186 + string fieldPattern = @"^*?[a-zA-Z0-9_\.\[\]]+";
183 187
184 string invalidPattern = @"^[\d\.]+"; 188 string invalidPattern = @"^[\d\.]+";
185 189
186 - string commentPattern = @"("".*"")"; 190 + string commentPattern = @"[""].*[""]";
191 +
192 + string commentPattern2 = @"\/\/.*";
193 + string commentPattern3 = @"\/\*.+\*\/";
187 194
188 line = Regex.Replace(line, commentPattern, ""); 195 line = Regex.Replace(line, commentPattern, "");
196 + line = Regex.Replace(line, commentPattern2, "");
197 + line = Regex.Replace(line, commentPattern3, "");
189 // 메서드 목록 198 // 메서드 목록
190 var methodSets = new HashSet<string>(); 199 var methodSets = new HashSet<string>();
191 200
...@@ -208,7 +217,7 @@ namespace VulnCrawler ...@@ -208,7 +217,7 @@ namespace VulnCrawler
208 if (method.Success) 217 if (method.Success)
209 { 218 {
210 Console.WriteLine(method.Groups[1].Value); 219 Console.WriteLine(method.Groups[1].Value);
211 - methodSets.Add(method.Groups[1].Value); 220 + methodSets.Add(method.Groups[1].Value); // aaaa
212 } 221 }
213 } 222 }
214 Console.WriteLine("----"); 223 Console.WriteLine("----");
......
...@@ -21,7 +21,7 @@ namespace VulnCrawler ...@@ -21,7 +21,7 @@ namespace VulnCrawler
21 protected override string RegexFuncPattern => $@"@@ \-(?<{OldStart}>\d+),(?<{OldLines}>\d+) \+(?<{NewStart}>\d+),(?<{NewLines}>\d+) @@ def (?<{MethodName}>\w+)"; 21 protected override string RegexFuncPattern => $@"@@ \-(?<{OldStart}>\d+),(?<{OldLines}>\d+) \+(?<{NewStart}>\d+),(?<{NewLines}>\d+) @@ def (?<{MethodName}>\w+)";
22 22
23 23
24 - protected override string ReservedFileName => throw new NotImplementedException(); 24 + protected override string ReservedFileName => "PyReserved.txt";
25 25
26 // protected override Regex MethodExtractor => new Regex(RegexFuncPattern); 26 // protected override Regex MethodExtractor => new Regex(RegexFuncPattern);
27 27
......
...@@ -14,24 +14,24 @@ namespace VulnCrawler ...@@ -14,24 +14,24 @@ namespace VulnCrawler
14 { 14 {
15 // 템플릿 메서드 패턴 15 // 템플릿 메서드 패턴
16 public static void Run<T>(string dirPath) where T : VulnAbstractCrawler, new() { 16 public static void Run<T>(string dirPath) where T : VulnAbstractCrawler, new() {
17 - var self = new T(); 17 + var crawler = new T();
18 - self.Init(dirPath); 18 + crawler.Init(dirPath);
19 - var commits = self.Commits; 19 + var commits = crawler.Commits;
20 foreach (var commit in commits) { 20 foreach (var commit in commits) {
21 // 커밋 메시지 21 // 커밋 메시지
22 string message = commit.Message; 22 string message = commit.Message;
23 - string cve = self.GetCVE(message); 23 + string cve = crawler.GetCVE(message);
24 if (string.IsNullOrEmpty(cve)) { 24 if (string.IsNullOrEmpty(cve)) {
25 continue; 25 continue;
26 } 26 }
27 foreach (var parent in commit.Parents) { 27 foreach (var parent in commit.Parents) {
28 // 부모 커밋과 현재 커밋을 Compare 하여 패치 내역을 가져옴 28 // 부모 커밋과 현재 커밋을 Compare 하여 패치 내역을 가져옴
29 - var patch = self.Repository.Diff.Compare<Patch>(parent.Tree, commit.Tree); 29 + var patch = crawler.Repository.Diff.Compare<Patch>(parent.Tree, commit.Tree);
30 // 패치 엔트리 파일 배열 중에 파일 확장자가 .py인 것만 가져옴 30 // 패치 엔트리 파일 배열 중에 파일 확장자가 .py인 것만 가져옴
31 // (실질적인 코드 변경 커밋만 보기 위해서) 31 // (실질적인 코드 변경 커밋만 보기 위해서)
32 - var entrys = self.GetPatchEntryChanges(patch); 32 + var entrys = crawler.GetPatchEntryChanges(patch);
33 // 현재 커밋에 대한 패치 엔트리 배열을 출력함 33 // 현재 커밋에 대한 패치 엔트리 배열을 출력함
34 - PrintPatchEntrys(entrys, self, message, cve); 34 + PrintPatchEntrys(entrys, crawler, message, cve);
35 } 35 }
36 } 36 }
37 } 37 }
......