노현종

충돌

...@@ -229,6 +229,8 @@ namespace VulnCrawler ...@@ -229,6 +229,8 @@ namespace VulnCrawler
229 229
230 protected override IList<Block> GetCriticalBlocks(string srcCode, IEnumerable<string> criticalList) 230 protected override IList<Block> GetCriticalBlocks(string srcCode, IEnumerable<string> criticalList)
231 { 231 {
232 + // srcCode = Regex.Replace(srcCode, @"if.+\n\{", @"if.+\{", RegexOptions.Multiline);
233 +
232 var split = srcCode.Split('\n'); 234 var split = srcCode.Split('\n');
233 int bracketCount = 0; 235 int bracketCount = 0;
234 var blockList = new List<Block>(); 236 var blockList = new List<Block>();
...@@ -238,22 +240,46 @@ namespace VulnCrawler ...@@ -238,22 +240,46 @@ namespace VulnCrawler
238 { 240 {
239 return null; 241 return null;
240 } 242 }
243 + bool hasIf = false;
241 bool mainLine = true; /* 현재 라인이 메인 코드 라인인지 */ 244 bool mainLine = true; /* 현재 라인이 메인 코드 라인인지 */
242 - bool criticalBlock = false; /* 현재 라인이 메인 코드 라인인지 */ 245 + bool criticalBlock = false; /* 현재 라인이 크리티컬 블록 라인인지 */
243 - int blockNum = 1; /* 현재 라인이 메인 코드 라인인지 */ 246 + int blockNum = 1; /* 블록 번호 */
244 foreach (var line in split) 247 foreach (var line in split)
245 { 248 {
249 + bool hasRight = false;
250 +
246 string trim = line.Trim(); 251 string trim = line.Trim();
252 +
247 /* 중괄호 수 세기 */ 253 /* 중괄호 수 세기 */
248 int openBracketCount = trim.Count(c => c == '{'); 254 int openBracketCount = trim.Count(c => c == '{');
249 int closeBracketCount = trim.Count(c => c == '}'); 255 int closeBracketCount = trim.Count(c => c == '}');
256 + //if (!hasIf)
257 + //{
258 + // if (Regex.IsMatch(trim, @"^if.+\)$"))
259 + // {
260 + // // Console.WriteLine("if 들어감");
261 + // hasIf = true;
262 + // }
263 + //}
264 + //else
265 + //{
266 + // if (!Regex.IsMatch(trim, @"^\{"))
267 + // {
268 + // openBracketCount++;
269 + // }
270 + // hasIf = false;
271 + //}
272 +
273 +
274 +
250 int subtract = openBracketCount - closeBracketCount; 275 int subtract = openBracketCount - closeBracketCount;
251 bracketCount += subtract; 276 bracketCount += subtract;
252 277
278 +
253 if (trim.Equals("}")) 279 if (trim.Equals("}"))
254 { 280 {
255 builder.AppendLine(line); 281 builder.AppendLine(line);
256 - continue; 282 + hasRight = true;
257 } 283 }
258 /* 중괄호 연산 결과 1이라는 것은 메인 라인 */ 284 /* 중괄호 연산 결과 1이라는 것은 메인 라인 */
259 if (bracketCount == 1) 285 if (bracketCount == 1)
...@@ -313,10 +339,14 @@ namespace VulnCrawler ...@@ -313,10 +339,14 @@ namespace VulnCrawler
313 } 339 }
314 } 340 }
315 341
342 + if (!hasRight)
343 + {
316 builder.AppendLine(line); 344 builder.AppendLine(line);
317 345
318 } 346 }
319 347
348 + }
349 +
320 /* 마지막 남은게 있을 수 있으니 추가 */ 350 /* 마지막 남은게 있을 수 있으니 추가 */
321 string fs = builder.ToString(); 351 string fs = builder.ToString();
322 if (!string.IsNullOrWhiteSpace(fs)) 352 if (!string.IsNullOrWhiteSpace(fs))
......