github.com/anchore/syft@v1.38.2/syft/pkg/cataloger/binary/classifiers_java.go (about)

     1  package binary
     2  
     3  import (
     4  	"github.com/anchore/syft/syft/cpe"
     5  	"github.com/anchore/syft/syft/pkg/cataloger/internal/binutils"
     6  )
     7  
     8  //nolint:funlen
     9  func defaultJavaClassifiers() []binutils.Classifier {
    10  	m := binutils.ContextualEvidenceMatchers{CatalogerName: catalogerName}
    11  
    12  	return []binutils.Classifier{
    13  		{
    14  			Class:    "java-binary",
    15  			FileGlob: "**/java",
    16  			EvidenceMatcher: binutils.BranchingEvidenceMatcher([]binutils.Classifier{
    17  				{
    18  					Class: "java-binary-graalvm",
    19  					EvidenceMatcher: m.FileContentsVersionMatcher(
    20  						`(?m)\x00(?P<version>[0-9]+[.0-9]+[.0-9]+\+[0-9]+-jvmci-[0-9]+[.0-9]+-b[0-9]+)\x00`),
    21  					Package: "graalvm",
    22  					PURL:    mustPURL("pkg:generic/oracle/graalvm@version"),
    23  					CPEs:    singleCPE("cpe:2.3:a:oracle:graalvm:*:*:*:*:*:*:*:*", cpe.NVDDictionaryLookupSource),
    24  				},
    25  				{
    26  					Class: "java-binary-openjdk-zulu",
    27  					EvidenceMatcher: binutils.MatchAll(
    28  						binutils.MatchPath(`**/*zulu*/**`),
    29  						binutils.MatchAny(
    30  							m.FileContentsVersionMatcher(
    31  								// [NUL]openjdk[NUL]java[NUL]0.0[NUL]11.0.17+8-LTS[NUL]
    32  								`(?m)\x00java\x00(?P<release>[0-9]+[.0-9]*)\x00(?P<version>[0-9]+[^\x00]+)\x00`),
    33  							m.FileContentsVersionMatcher(
    34  								// arm64 versions: [NUL]0.0[NUL][NUL][NUL][NUL][NUL]11.0.22+7[NUL][NUL][NUL][NUL][NUL][NUL][NUL]openjdk[NUL]java[NUL]
    35  								`(?m)\x00(?P<release>[0-9]+[.0-9]*)\x00+(?P<version>[0-9]+[^\x00]+)\x00+(openjdk|java)`),
    36  						),
    37  					),
    38  					Package: "zulu",
    39  					PURL:    mustPURL("pkg:generic/azul/zulu@version"),
    40  					CPEs:    singleCPE("cpe:2.3:a:azul:zulu:*:*:*:*:*:*:*:*", cpe.NVDDictionaryLookupSource),
    41  				},
    42  				{
    43  					Class: "java-binary-openjdk-with-update",
    44  					EvidenceMatcher: binutils.MatchAny(
    45  						m.FileContentsVersionMatcher(
    46  							`openjdk`,
    47  							// [NUL]openjdk[NUL]java[NUL]1.8[NUL]1.8.0_352-b08[NUL]
    48  							`(?m)java\x00(?P<release>[0-9]+[.0-9]*)\x00(?P<version>(?<primary>[0-9]+[^\x00]+)_(?<update>[^\x00]+)-[^\x00]+)\x00`),
    49  						m.FileContentsVersionMatcher(
    50  							`openjdk`,
    51  							// arm64 versions: [NUL]0.0[NUL][NUL][NUL][NUL][NUL]1.8.0_352-b08[NUL][NUL][NUL][NUL][NUL][NUL][NUL]openjdk[NUL]java[NUL]
    52  							`(?m)\x00(?P<release>[0-9]+[.0-9]*)\x00+(?P<version>(?<primary>[0-9]+[^\x00]+)_(?<update>[^\x00]+)-[^\x00]+)\x00+openjdk\x00java`),
    53  					),
    54  					Package: "openjdk",
    55  					PURL:    mustPURL("pkg:generic/oracle/openjdk@version"),
    56  					CPEs:    singleCPE("cpe:2.3:a:oracle:openjdk:{{.primary}}:update{{.update}}:*:*:*:*:*:*", cpe.NVDDictionaryLookupSource),
    57  				},
    58  				{
    59  					Class: "java-binary-openjdk",
    60  					EvidenceMatcher: binutils.MatchAny(
    61  						m.FileContentsVersionMatcher(
    62  							// [NUL]openjdk[NUL]java[NUL]0.0[NUL]11.0.17+8-LTS[NUL]
    63  							`(?m)\x00openjdk\x00java\x00(?P<release>[0-9]+[.0-9]*)\x00(?P<version>[0-9]+[^\x00]+)\x00`),
    64  						m.FileContentsVersionMatcher(
    65  							// arm64 versions: [NUL]0.0[NUL][NUL][NUL][NUL][NUL]11.0.22+7[NUL][NUL][NUL][NUL][NUL][NUL][NUL]openjdk[NUL]java[NUL]
    66  							`(?m)\x00(?P<release>[0-9]+[.0-9]*)\x00+(?P<version>[0-9]+[^\x00]+)\x00+openjdk\x00java`),
    67  					),
    68  					Package: "openjdk",
    69  					PURL:    mustPURL("pkg:generic/oracle/openjdk@version"),
    70  					CPEs:    singleCPE("cpe:2.3:a:oracle:openjdk:*:*:*:*:*:*:*:*", cpe.NVDDictionaryLookupSource),
    71  				},
    72  				{
    73  					Class: "java-binary-ibm",
    74  					EvidenceMatcher: binutils.MatchAll(
    75  						binutils.MatchAny(
    76  							binutils.MatchPath("**/ibm/**"),
    77  							binutils.SharedLibraryLookup(
    78  								`^libjli\.so$`,
    79  								m.FileContentsVersionMatcher("IBM_JAVA")),
    80  						),
    81  						m.FileContentsVersionMatcher(
    82  							// [NUL]java[NUL]1.8[NUL][NUL][NUL]1.8.0-foreman_2022_01_20_09_33-b00[NUL]
    83  							`(?m)\x00java\x00+(?P<release>[0-9]+[.0-9]+)\x00+(?P<version>[0-9]+[-._a-zA-Z0-9]+)\x00`),
    84  					),
    85  					Package: "java",
    86  					PURL:    mustPURL("pkg:generic/ibm/java@version"),
    87  					CPEs:    singleCPE("cpe:2.3:a:ibm:java:*:*:*:*:*:*:*:*", cpe.NVDDictionaryLookupSource),
    88  				},
    89  				{
    90  					Class: "java-binary-openjdk-fallthrough",
    91  					EvidenceMatcher: m.FileContentsVersionMatcher(
    92  						"openjdk",
    93  						// [NUL]19.0.1+10-21[NUL]
    94  						`(?m)\x00(?P<version>[0-9]+[.0-9]+[+][-0-9]+)\x00`,
    95  					),
    96  					Package: "jre",
    97  					PURL:    mustPURL("pkg:generic/oracle/jre@version"),
    98  					CPEs:    singleCPE("cpe:2.3:a:oracle:jre:*:*:*:*:*:*:*:*", cpe.NVDDictionaryLookupSource),
    99  				},
   100  				{
   101  					Class: "java-binary-oracle",
   102  					EvidenceMatcher: m.FileContentsVersionMatcher(
   103  						// [NUL]19.0.1+10-21[NUL]
   104  						// java[NUL]1.8[NUL]1.8.0_451-b10
   105  						`(?m)\x00(?P<version>[0-9]+\.[0-9]+\.[-._+a-zA-Z0-9]+)\x00`,
   106  					),
   107  					Package: "jre",
   108  					PURL:    mustPURL("pkg:generic/oracle/jre@version"),
   109  					CPEs:    singleCPE("cpe:2.3:a:oracle:jre:*:*:*:*:*:*:*:*", cpe.NVDDictionaryLookupSource),
   110  				},
   111  			}...),
   112  		},
   113  		{
   114  			Class:    "java-jdb-binary",
   115  			FileGlob: "**/jdb",
   116  			EvidenceMatcher: binutils.BranchingEvidenceMatcher([]binutils.Classifier{
   117  				{
   118  					Class: "java-binary-graalvm",
   119  					EvidenceMatcher: m.FileContentsVersionMatcher(
   120  						`(?m)\x00(?P<version>[0-9]+[.0-9]+[.0-9]+\+[0-9]+-jvmci-[0-9]+[.0-9]+-b[0-9]+)\x00`),
   121  					Package: "graalvm",
   122  					PURL:    mustPURL("pkg:generic/oracle/graalvm@version"),
   123  					CPEs:    singleCPE("cpe:2.3:a:oracle:graalvm_for_jdk:*:*:*:*:*:*:*:*", cpe.NVDDictionaryLookupSource),
   124  				},
   125  				{
   126  					Class: "jdb-binary-openjdk-zulu",
   127  					EvidenceMatcher: binutils.MatchAll(
   128  						binutils.MatchPath("**/*zulu*/**"),
   129  						binutils.MatchAny(
   130  							m.FileContentsVersionMatcher(
   131  								// [NUL]jdb[NUL]0.0[NUL]11.0.17+8-LTS[NUL]
   132  								`(?m)(java|jdb)\x00(?P<release>[0-9]+[.0-9]*)\x00(?P<version>[0-9]+[^\x00]+)\x00`),
   133  							m.FileContentsVersionMatcher(
   134  								// arm64 versions: [NUL]0.0[NUL][NUL][NUL][NUL][NUL]11.0.22+7[NUL][NUL][NUL][NUL][NUL][NUL][NUL]jdb[NUL]
   135  								`(?m)\x00(?P<release>[0-9]+[.0-9]*)\x00+(?P<version>[0-9]+[^\x00]+)\x00+(java|jdb)`),
   136  						),
   137  					),
   138  					Package: "zulu",
   139  					PURL:    mustPURL("pkg:generic/azul/zulu@version"),
   140  					CPEs:    singleCPE("cpe:2.3:a:azul:zulu:*:*:*:*:*:*:*:*", cpe.NVDDictionaryLookupSource),
   141  				},
   142  				{
   143  					Class: "java-jdb-binary-openjdk",
   144  					EvidenceMatcher: binutils.MatchAll(
   145  						m.FileContentsVersionMatcher(
   146  							// [NUL]openjdk[NUL]java[NUL]0.0[NUL]11.0.17+8-LTS[NUL]
   147  							// [NUL]openjdk[NUL]java[NUL]1.8[NUL]1.8.0_352-b08[NUL]
   148  							`(?m)\x00openjdk\x00java\x00(?P<release>[0-9]+[.0-9]*)\x00(?P<version>[0-9]+[^\x00]+)\x00`),
   149  						m.FileContentsVersionMatcher(
   150  							// arm64 versions: [NUL]0.0[NUL][NUL][NUL][NUL][NUL]11.0.22+7[NUL][NUL][NUL][NUL][NUL][NUL][NUL]openjdk[NUL]java[NUL]
   151  							`(?m)\x00(?P<release>[0-9]+[.0-9]*)\x00+(?P<version>[0-9]+[^\x00]+)\x00+openjdk\x00java`),
   152  					),
   153  					Package: "openjdk",
   154  					PURL:    mustPURL("pkg:generic/oracle/openjdk@version"),
   155  					CPEs:    singleCPE("cpe:2.3:a:oracle:openjdk:*:*:*:*:*:*:*:*", cpe.NVDDictionaryLookupSource),
   156  				},
   157  				{
   158  					Class: "java-sdk-binary-ibm",
   159  					EvidenceMatcher: binutils.MatchAll(
   160  						binutils.MatchAny(
   161  							binutils.MatchPath("**/ibm/**"),
   162  							binutils.SharedLibraryLookup(
   163  								`^libjli\.so$`,
   164  								m.FileContentsVersionMatcher("IBM_JAVA")),
   165  						),
   166  						m.FileContentsVersionMatcher(
   167  							// [NUL]java[NUL]./lib/tools.jar./lib/sa-jdi.jar./classes.-J-ms8m[NUL][NUL]1.8[NUL][NUL][NUL]1.8.0-foreman_2022_01_20_09_33-b00[NUL]
   168  							`(?m)\x00java\x00.+?\x00(?P<version>[0-9]+[-._a-zA-Z0-9]+)\x00`),
   169  					),
   170  					Package: "java_sdk",
   171  					PURL:    mustPURL("pkg:generic/ibm/java_sdk@version"),
   172  					CPEs:    singleCPE("cpe:2.3:a:ibm:java_sdk:*:*:*:*:*:*:*:*", cpe.NVDDictionaryLookupSource),
   173  				},
   174  				{
   175  					Class: "java-binary-openjdk-fallthrough",
   176  					EvidenceMatcher: binutils.MatchAll(
   177  						m.FileContentsVersionMatcher(
   178  							"openjdk",
   179  							`(?m)\x00(?P<version>[0-9]+\.[0-9]+\.[0-9]+(\+[0-9]+)?([-._a-zA-Z0-9]+)?)\x00`),
   180  					),
   181  					Package: "openjdk",
   182  					PURL:    mustPURL("pkg:generic/oracle/openjdk@version"),
   183  					CPEs:    singleCPE("cpe:2.3:a:oracle:openjdk:*:*:*:*:*:*:*:*", cpe.NVDDictionaryLookupSource),
   184  				},
   185  				{
   186  					Class: "java-binary-jdk",
   187  					EvidenceMatcher: m.FileContentsVersionMatcher(
   188  						`(?m)\x00(?P<version>[0-9]+\.[0-9]+\.[0-9]+(\+[0-9]+)?([-._a-zA-Z0-9]+)?)\x00`),
   189  					Package: "jdk",
   190  					PURL:    mustPURL("pkg:generic/oracle/jdk@version"),
   191  					CPEs:    singleCPE("cpe:2.3:a:oracle:jdk:*:*:*:*:*:*:*:*", cpe.NVDDictionaryLookupSource),
   192  				},
   193  			}...),
   194  		},
   195  	}
   196  }