|
25 | 25 | import hashlib |
26 | 26 | import tlsh |
27 | 27 | from io import open |
| 28 | +import subprocess |
| 29 | +import re |
28 | 30 |
|
29 | 31 | PKG_NAME = "fosslight_binary" |
30 | 32 | logger = logging.getLogger(constant.LOGGER_NAME) |
@@ -249,12 +251,19 @@ def find_binaries(path_to_find_bin, output_dir, formats, dburl="", simple_mode=F |
249 | 251 | try: |
250 | 252 | # Run OWASP Dependency-check |
251 | 253 | if found_jar: |
252 | | - logger.info("Run OWASP Dependency-check to analyze .jar file") |
253 | | - owasp_items, vulnerability_items, success = analyze_jar_file(path_to_find_bin, abs_path_to_exclude) |
254 | | - if success: |
255 | | - return_list = merge_binary_list(owasp_items, vulnerability_items, return_list) |
| 254 | + # Check Java version (Dependency-check requires Java 11+) |
| 255 | + java_ver = get_java_version() |
| 256 | + if java_ver is None: |
| 257 | + logger.warning("Java runtime not found. Skip OWASP Dependency-check for jar analysis.") |
| 258 | + elif java_ver < 11: |
| 259 | + logger.warning(f"Java version {java_ver} detected (<11). Skip OWASP Dependency-check for jar analysis.") |
256 | 260 | else: |
257 | | - logger.warning("Could not find OSS information for some jar files.") |
| 261 | + logger.info(f"Run OWASP Dependency-check to analyze .jar file") |
| 262 | + owasp_items, vulnerability_items, success = analyze_jar_file(path_to_find_bin, abs_path_to_exclude) |
| 263 | + if success: |
| 264 | + return_list = merge_binary_list(owasp_items, vulnerability_items, return_list) |
| 265 | + else: |
| 266 | + logger.warning("Could not find OSS information for some jar files.") |
258 | 267 |
|
259 | 268 | return_list, db_loaded_cnt = get_oss_info_from_db(return_list, dburl) |
260 | 269 | return_list = sorted(return_list, key=lambda row: (row.bin_name_with_path)) |
@@ -346,6 +355,19 @@ def check_binary(file_with_path): |
346 | 355 | return is_bin_confirmed |
347 | 356 |
|
348 | 357 |
|
| 358 | +def get_java_version(): |
| 359 | + try: |
| 360 | + completed = subprocess.run(["java", "-version"], capture_output=True, text=True) |
| 361 | + first_line = (completed.stderr or completed.stdout).splitlines()[0] |
| 362 | + |
| 363 | + m = re.search(r'"(\d+)', first_line) |
| 364 | + if not m: |
| 365 | + return None |
| 366 | + return int(m.group(1)) |
| 367 | + except Exception: |
| 368 | + return None |
| 369 | + |
| 370 | + |
349 | 371 | def error_occured(error_msg, exit=False, result_log={}, mode="Normal mode"): |
350 | 372 | _error_logs.append(error_msg) |
351 | 373 | if exit: |
|
0 commit comments