Showing
1 changed file
with
24 additions
and
21 deletions
... | @@ -241,36 +241,21 @@ namespace VulnCrawler | ... | @@ -241,36 +241,21 @@ namespace VulnCrawler |
241 | return null; | 241 | return null; |
242 | } | 242 | } |
243 | bool hasIf = false; | 243 | bool hasIf = false; |
244 | + string prevLine = string.Empty; | ||
244 | bool mainLine = true; /* 현재 라인이 메인 코드 라인인지 */ | 245 | bool mainLine = true; /* 현재 라인이 메인 코드 라인인지 */ |
245 | bool criticalBlock = false; /* 현재 라인이 크리티컬 블록 라인인지 */ | 246 | bool criticalBlock = false; /* 현재 라인이 크리티컬 블록 라인인지 */ |
246 | int blockNum = 1; /* 블록 번호 */ | 247 | int blockNum = 1; /* 블록 번호 */ |
248 | + | ||
247 | foreach (var line in split) | 249 | foreach (var line in split) |
248 | { | 250 | { |
249 | bool hasRight = false; | 251 | bool hasRight = false; |
250 | - | 252 | + bool hasIf2 = false; |
253 | + | ||
251 | string trim = line.Trim(); | 254 | string trim = line.Trim(); |
252 | 255 | ||
253 | /* 중괄호 수 세기 */ | 256 | /* 중괄호 수 세기 */ |
254 | int openBracketCount = trim.Count(c => c == '{'); | 257 | int openBracketCount = trim.Count(c => c == '{'); |
255 | int closeBracketCount = trim.Count(c => c == '}'); | 258 | 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 | 259 | ||
275 | int subtract = openBracketCount - closeBracketCount; | 260 | int subtract = openBracketCount - closeBracketCount; |
276 | bracketCount += subtract; | 261 | bracketCount += subtract; |
... | @@ -284,12 +269,29 @@ namespace VulnCrawler | ... | @@ -284,12 +269,29 @@ namespace VulnCrawler |
284 | /* 중괄호 연산 결과 1이라는 것은 메인 라인 */ | 269 | /* 중괄호 연산 결과 1이라는 것은 메인 라인 */ |
285 | if (bracketCount == 1) | 270 | if (bracketCount == 1) |
286 | { | 271 | { |
272 | + if (!hasIf) | ||
273 | + { | ||
274 | + if (Regex.IsMatch(trim, @"^(if|for|while).+\)$")) | ||
275 | + { | ||
276 | + prevLine = line; | ||
277 | + hasIf = true; | ||
278 | + } | ||
279 | + } | ||
280 | + else | ||
281 | + { | ||
282 | + if (!trim.StartsWith("{")) | ||
283 | + { | ||
284 | + hasIf2 = true; | ||
285 | + builder.AppendLine(line); | ||
286 | + } | ||
287 | + hasIf = false; | ||
288 | + } | ||
287 | /* | 289 | /* |
288 | * 깊이가 1인데 mainLine이 | 290 | * 깊이가 1인데 mainLine이 |
289 | * false 이면 넘어왔다는 것이니 현재까지 코드 | 291 | * false 이면 넘어왔다는 것이니 현재까지 코드 |
290 | * blockList에 추가 | 292 | * blockList에 추가 |
291 | */ | 293 | */ |
292 | - if (!mainLine) | 294 | + if (!mainLine || hasIf2) |
293 | { | 295 | { |
294 | string s = builder.ToString(); | 296 | string s = builder.ToString(); |
295 | if (!string.IsNullOrWhiteSpace(s)) | 297 | if (!string.IsNullOrWhiteSpace(s)) |
... | @@ -299,6 +301,7 @@ namespace VulnCrawler | ... | @@ -299,6 +301,7 @@ namespace VulnCrawler |
299 | criticalBlock = false; | 301 | criticalBlock = false; |
300 | builder.Clear(); | 302 | builder.Clear(); |
301 | } | 303 | } |
304 | + | ||
302 | } | 305 | } |
303 | mainLine = true; | 306 | mainLine = true; |
304 | } | 307 | } |
... | @@ -339,7 +342,7 @@ namespace VulnCrawler | ... | @@ -339,7 +342,7 @@ namespace VulnCrawler |
339 | } | 342 | } |
340 | } | 343 | } |
341 | 344 | ||
342 | - if (!hasRight) | 345 | + if (!hasRight && !hasIf2) |
343 | { | 346 | { |
344 | builder.AppendLine(line); | 347 | builder.AppendLine(line); |
345 | 348 | ... | ... |
-
Please register or login to post a comment