How Pom xml is parsed by CxSAST - checkmarx-ts/CxDOM-Types GitHub Wiki

More on How POM xml is parsed in CxSAST

XML files are transpiled into Java code during the pre-processing stage.

This conversion is language-agnostic:

Each XML tag opening <tag becomes an IfStmt if (TAG) {

Each attribute <tag attr=”x” becomes an assignment TAG.attr = “x”; inside the above IfStmt.

The content of a Y becomes an assignment TAG.TEXT = “Y”; inside the above IfStmt.

Each XML tag closing becomes an ExpressionStmt PARENT_TAGS.TAG;}, together with the } closing the open IfStmt, where PARENT_TAGS is the stack of parent tags separated by .

These conversions are then put into the constructor of a randomly named class CxXmlConfigClass. ss

Sample pom.XML file content:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.checkmarx</groupId>
	<artifactId>mybatis-test</artifactId>
	<version>1.0.0-SNAPSHOT</version>
	<packaging>war</packaging>
	<name>mybatis-test</name>
	<description>Configuration via XML</description>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<maven.compiler.source>1.7</maven.compiler.source>
		<maven.compiler.target>1.7</maven.compiler.target>
	</properties>

	<dependencies>
		<!-- https://mvnrepository.com/artifact/junit/junit -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.12</version>
			<scope>test</scope>
		</dependency>
	</dependencies>
</project>

The above pom.xml file is converted to a Java Class:

public class CxXmlConfigClass1622594767 { 
  public CxXmlConfigClass() {
    if (PROJECT) {
      PROJECT.XMLNS = "http://maven.apache.org/POM/4.0.0";
      PROJECT.XMLNS_XSI = "http://www.w3.org/2001/XMLSchema-instance";
      PROJECT.XSI_SCHEMALOCATION = "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd";     
      PROJECT;
      if (MODELVERSION) {
        PROJECT.MODELVERSION.TEXT = "4.0.0";
        PROJECT.MODELVERSION;
      }
      if (GROUPID) {
        PROJECT.GROUPID.TEXT = "com.checkmarx";
        PROJECT.GROUPID;
      }
	  if (ARTIFACTID) {
		PROJECT.ARTIFACTID.TEXT = "mybatis-test";
		PROJECT.ARTIFACTID;
	  }
	  
	  if (PROPERTIES) {
		if (PROJECT.BUILD.SOURCEENCODING) {
			PROJECT.PROPERTIES.PROJECT.BUILD.SOURCEENCODING.TEXT = "UTF-8";
			PROJECT.PROPERTIES.PROJECT.BUILD.SOURCEENCODING;
		}
		if (MAVEN.COMPILER.SOURCE) {
			PROJECT.PROPERTIES.MAVEN.COMPILER.SOURCE.TEXT = "1.7";
			PROJECT.PROPERTIES.MAVEN.COMPILER.SOURCE;
		}
		if (MAVEN.COMPILER.TARGET) {
			PROJECT.PROPERTIES.MAVEN.COMPILER.TARGET.TEXT = "1.7";
			PROJECT.PROPERTIES.MAVEN.COMPILER.TARGET;
		}
	  }
	  
	  if (DEPENDENCIES) {
	    if (DEPENDENCY) {
			if (GROUPID) {
				PROJECT.DEPENDENCIES.DEPENDENCY.GROUPID.TEXT = "junit";
				PROJECT.DEPENDENCIES.DEPENDENCY.GROUPID;
			}
			if (ARTIFACTID) {
				PROJECT.DEPENDENCIES.DEPENDENCY.ARTIFACTID.TEXT = "junit";
				PROJECT.DEPENDENCIES.DEPENDENCY.ARTIFACTID;
			}
			if (VERSION) {
				PROJECT.DEPENDENCIES.DEPENDENCY.VERSION.TEXT = "4.12"; // Something wrong here in CxSAST 9.3
				PROJECT.DEPENDENCIES.DEPENDENCY.VERSION;
			}
			if (SCOPE) {
				PROJECT.DEPENDENCIES.DEPENDENCY.SCOPE.TEXT = “test";
				PROJECT.DEPENDENCIES.DEPENDENCY.SCOPE;
			}
		}
	  }
	  
    }
  }
}
⚠️ **GitHub.com Fallback** ⚠️