Merge pull request #10173 from zbazztian/spring-crudrepository

Java: Add data flow model for Spring's CrudRepository.save() method
This commit is contained in:
Anders Schack-Mulligen
2022-08-29 15:00:07 +02:00
committed by GitHub
8 changed files with 45 additions and 0 deletions

View File

@@ -0,0 +1,4 @@
---
category: minorAnalysis
---
* Added flow summary for `org.springframework.data.repository.CrudRepository.save()`.

View File

@@ -120,6 +120,7 @@ private module Frameworks {
private import semmle.code.java.frameworks.ratpack.RatpackExec
private import semmle.code.java.frameworks.spring.SpringCache
private import semmle.code.java.frameworks.spring.SpringContext
private import semmle.code.java.frameworks.spring.SpringData
private import semmle.code.java.frameworks.spring.SpringHttp
private import semmle.code.java.frameworks.spring.SpringUtil
private import semmle.code.java.frameworks.spring.SpringUi

View File

@@ -13,6 +13,7 @@ import semmle.code.java.frameworks.spring.SpringContext
import semmle.code.java.frameworks.spring.SpringComponentScan
import semmle.code.java.frameworks.spring.SpringConstructorArg
import semmle.code.java.frameworks.spring.SpringController
import semmle.code.java.frameworks.spring.SpringData
import semmle.code.java.frameworks.spring.SpringDescription
import semmle.code.java.frameworks.spring.SpringEntry
import semmle.code.java.frameworks.spring.SpringFlex

View File

@@ -0,0 +1,17 @@
/**
* Provides classes and predicates for working with Spring classes and interfaces from
* `org.springframework.data`.
*/
import java
private import semmle.code.java.dataflow.ExternalFlow
/**
* Provides models for the `org.springframework.data` package.
*/
private class FlowSummaries extends SummaryModelCsv {
override predicate row(string row) {
row =
"org.springframework.data.repository;CrudRepository;true;save;;;Argument[0];ReturnValue;value;manual"
}
}

View File

@@ -0,0 +1,19 @@
import org.springframework.data.repository.CrudRepository;
class Struct {
public String field;
public Struct(String f){
this.field = f;
}
}
public class Test {
String source() { return null; }
void sink(Object o) {}
void testCrudRepository(CrudRepository<Struct, Integer> cr) {
Struct s = new Struct(source());
s = cr.save(s);
sink(s.field); //$hasValueFlow
}
}

View File

@@ -0,0 +1 @@
//semmle-extractor-options: --javac-args -cp ${testdir}/../../../../stubs/spring-data-commons-2.5.1

View File

@@ -0,0 +1,2 @@
import java
import TestUtilities.InlineFlowTest