From 016b772ceb6978b13948827e3ee776c41a7b09ce Mon Sep 17 00:00:00 2001 From: Marc Miltenberger Date: Thu, 18 Jan 2018 12:33:18 +0100 Subject: [PATCH 1/2] Adding an eager summary provider and load all manual summaries during testing --- .../data/provider/EagerSummaryProvider.java | 48 +++ .../data/provider/LazySummaryProvider.java | 248 +-------------- .../data/provider/XMLSummaryProvider.java | 289 ++++++++++++++++++ .../taintWrappers/TaintWrapperFactory.java | 17 +- .../junit/SummaryTaintWrapperTests.java | 21 +- 5 files changed, 375 insertions(+), 248 deletions(-) create mode 100644 soot-infoflow-summaries/src/soot/jimple/infoflow/methodSummary/data/provider/EagerSummaryProvider.java create mode 100644 soot-infoflow-summaries/src/soot/jimple/infoflow/methodSummary/data/provider/XMLSummaryProvider.java diff --git a/soot-infoflow-summaries/src/soot/jimple/infoflow/methodSummary/data/provider/EagerSummaryProvider.java b/soot-infoflow-summaries/src/soot/jimple/infoflow/methodSummary/data/provider/EagerSummaryProvider.java new file mode 100644 index 000000000..678119935 --- /dev/null +++ b/soot-infoflow-summaries/src/soot/jimple/infoflow/methodSummary/data/provider/EagerSummaryProvider.java @@ -0,0 +1,48 @@ +package soot.jimple.infoflow.methodSummary.data.provider; + +import java.io.File; +import java.io.IOException; +import java.net.URISyntaxException; +import java.util.Collections; +import java.util.List; + +/** + * This class loads all method summary xml files. + * + */ +public class EagerSummaryProvider extends XMLSummaryProvider { + + /** + * Loads a summary from a folder within the StubDroid jar file. + * + * @param folderInJar + * The folder in the JAR file from which to load the summary files + * @throws URISyntaxException + * @throws IOException + */ + public EagerSummaryProvider(String folderInJar) throws URISyntaxException, IOException { + super(folderInJar); + load(); + } + + /** + * Loads a file or all files in a dir (not recursively) + * + * @param source + */ + public EagerSummaryProvider(File source) { + super(source); + load(); + } + + public EagerSummaryProvider(List files) { + super(files); + load(); + } + + private void load() { + for (Object s : loadableClasses.toArray()) + loadClass(s.toString()); + loadableClasses = Collections.emptySet(); + } +} diff --git a/soot-infoflow-summaries/src/soot/jimple/infoflow/methodSummary/data/provider/LazySummaryProvider.java b/soot-infoflow-summaries/src/soot/jimple/infoflow/methodSummary/data/provider/LazySummaryProvider.java index 9b9a4ca0c..d9f5d0f20 100644 --- a/soot-infoflow-summaries/src/soot/jimple/infoflow/methodSummary/data/provider/LazySummaryProvider.java +++ b/soot-infoflow-summaries/src/soot/jimple/infoflow/methodSummary/data/provider/LazySummaryProvider.java @@ -2,47 +2,14 @@ import java.io.File; import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.net.URI; import java.net.URISyntaxException; -import java.net.URL; -import java.nio.file.FileSystem; -import java.nio.file.FileSystemNotFoundException; -import java.nio.file.FileSystems; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashSet; -import java.util.Iterator; import java.util.List; -import java.util.Set; -import java.util.stream.Stream; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import soot.jimple.infoflow.methodSummary.data.summary.ClassSummaries; -import soot.jimple.infoflow.methodSummary.data.summary.MethodSummaries; -import soot.jimple.infoflow.methodSummary.xml.XMLReader; /** * This class loads method summary xml files on demand. * */ -public class LazySummaryProvider implements IMethodSummaryProvider { - - private final Logger logger = LoggerFactory.getLogger(getClass()); - - private XMLReader reader; - private ClassSummaries summaries = new ClassSummaries(); - private Set supportedClasses = new HashSet(); - private Set loadableClasses = new HashSet(); - private Set files; - private Set pathes; - private FileSystem fileSystem; +public class LazySummaryProvider extends XMLSummaryProvider { /** * Loads a summary from a folder within the StubDroid jar file. @@ -53,72 +20,7 @@ public class LazySummaryProvider implements IMethodSummaryProvider { * @throws IOException */ public LazySummaryProvider(String folderInJar) throws URISyntaxException, IOException { - File f = new File(folderInJar); - if (f.exists()) { - load(f); - return; - } - - URI uri = null; - String jarRelativePath = folderInJar.startsWith("/") ? folderInJar : "/" + folderInJar; - URL resourceURL = LazySummaryProvider.class.getResource(jarRelativePath); - if (resourceURL == null) { - logger.warn(String.format("Could not find folder %s in JAR, trying normal folder on disk...", folderInJar)); - String classLocation = LazySummaryProvider.class.getProtectionDomain().getCodeSource().getLocation() - .getPath(); - File classFile = new File(new URI("file:///" + classLocation)); - if (classFile.getCanonicalPath().endsWith("build" + File.separator + "classes")) - classFile = classFile.getParentFile().getParentFile(); - classFile = new File(classFile, folderInJar); - if (classFile.exists()) - uri = classFile.toURI(); - } else - uri = resourceURL.toURI(); - - // Do we have the summaries - if (uri == null) - throw new RuntimeException(String.format("Could not find summaries in folder %s", folderInJar)); - - Path path; - // We load a file system to retrieve all available class summaries - // Note that we cannot close the file system, since it may not be - // possible to reopen it - // using the same URL. - // However, since we are loading from inside the JAR, we only create a - // few file systems this way - // File systems are reused automatically between different - // LazySummaryProviders if their URL is the same. - // Thus, in worst case, we open file systems for all different summary - // folders in the JAR, which are being closed - // when the JVM terminates. - if (uri.getScheme().equals("jar")) { - try { - fileSystem = FileSystems.getFileSystem(uri); - } catch (FileSystemNotFoundException e) { - fileSystem = FileSystems.newFileSystem(uri, Collections.emptyMap()); - } - path = fileSystem.getPath(folderInJar); - } else { - path = Paths.get(uri); - } - fileSystem = path.getFileSystem(); - Stream walk = Files.walk(path, 1); - try { - pathes = new HashSet(); - for (Iterator it = walk.iterator(); it.hasNext();) { - Path classp = it.next(); - pathes.add(classp); - loadableClasses.add(fileToClass(getFileName(classp))); - } - } finally { - walk.close(); - } - init(); - - } - - private String getFileName(Path path) { - return path.getFileName().toString(); + super(folderInJar); } /** @@ -127,152 +29,10 @@ private String getFileName(Path path) { * @param source */ public LazySummaryProvider(File source) { - load(source); - } - - private void load(File source) { - if (!source.exists()) - throw new RuntimeException("Source directory " + source + " does not exist"); - - if (source.isFile()) - files = Collections.singleton(source); - else if (source.isDirectory()) { - File[] filesInDir = source.listFiles(); - if (filesInDir == null) - throw new RuntimeException("Could not get files in directory " + source); - files = new HashSet(Arrays.asList(filesInDir)); - } else - throw new RuntimeException("Invalid input file: " + source); - - init(); + super(source); } public LazySummaryProvider(List files) { - this.files = new HashSet(); - for (File f : files) { - // Check if the file exists - if (!f.exists()) - throw new RuntimeException("Input file does not exist: " + f); - - // Distinguish between files and directories - if (f.isFile()) - this.files.add(f); - else if (f.isDirectory()) { - File[] filesInDir = f.listFiles(); - if (filesInDir == null) - throw new RuntimeException("Could not get files in directory " + f); - this.files.addAll(Arrays.asList(filesInDir)); - } else - throw new RuntimeException("Invalid input file: " + f); - } - - init(); - } - - private void init() { - this.reader = new XMLReader(); - if (files != null) { - for (File f : files) { - if (f.isFile() && f.getName().endsWith(".xml")) { - loadableClasses.add(f.getName().replace(".xml", "")); - } - } - } - } - - @Override - public boolean supportsClass(String clazz) { - if (supportedClasses.contains(clazz)) - return true; - if (loadableClasses.contains(clazz)) - return true; - return false; - } - - @Override - public ClassSummaries getMethodFlows(Set classes, String methodSignature) { - for (String className : classes) - if (loadableClasses.contains(className)) - loadClass(className); - return summaries.filterForMethod(classes, methodSignature); + super(files); } - - @Override - public MethodSummaries getMethodFlows(String className, String methodSignature) { - if (loadableClasses.contains(className)) - loadClass(className); - MethodSummaries classSummaries = summaries.getClassSummaries(className); - return classSummaries == null ? null : classSummaries.filterForMethod(methodSignature); - } - - private void loadClass(String clazz) { - // Do not load classes more than once - if (supportedClasses.contains(clazz)) - return; - - if (files != null) { - for (File f : files) { - if (fileToClass(f).equals(clazz)) { - try { - summaries.merge(clazz, reader.read(f)); - loadableClasses.remove(clazz); - supportedClasses.add(clazz); - break; - } catch (Exception e) { - e.printStackTrace(); - } - } - } - } - if (pathes != null) { - for (Path path : pathes) { - if (fileToClass(getFileName(path)).equals(clazz)) { - try (InputStream inputStream = path.getFileSystem().provider().newInputStream(path)) { - summaries.merge(clazz, reader.read(new InputStreamReader(inputStream))); - loadableClasses.remove(clazz); - supportedClasses.add(clazz); - break; - } catch (Exception e) { - LoggerFactory.getLogger(getClass()) - .error(String.format("An error occurred while loading the summary of %s", clazz), e); - } - } - } - } - } - - private String fileToClass(File f) { - return fileToClass(f.getName()); - } - - private String fileToClass(String s) { - return s.replace(".xml", ""); - } - - @Override - public Set getSupportedClasses() { - return this.supportedClasses; - } - - @Override - public Set getLoadableClasses() { - return this.loadableClasses; - } - - /** - * Gets all method flow summaries that have been loaded so far - * - * @return All summaries that have been loaded so far - */ - public ClassSummaries getSummaries() { - return summaries; - } - - @Override - public MethodSummaries getClassFlows(String className) { - if (loadableClasses.contains(className)) - loadClass(className); - return summaries.getClassSummaries(className); - } - } diff --git a/soot-infoflow-summaries/src/soot/jimple/infoflow/methodSummary/data/provider/XMLSummaryProvider.java b/soot-infoflow-summaries/src/soot/jimple/infoflow/methodSummary/data/provider/XMLSummaryProvider.java new file mode 100644 index 000000000..cb703cc1b --- /dev/null +++ b/soot-infoflow-summaries/src/soot/jimple/infoflow/methodSummary/data/provider/XMLSummaryProvider.java @@ -0,0 +1,289 @@ +package soot.jimple.infoflow.methodSummary.data.provider; + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.URL; +import java.nio.file.FileSystem; +import java.nio.file.FileSystemNotFoundException; +import java.nio.file.FileSystems; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Set; +import java.util.stream.Stream; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import soot.jimple.infoflow.methodSummary.data.summary.ClassSummaries; +import soot.jimple.infoflow.methodSummary.data.summary.MethodSummaries; +import soot.jimple.infoflow.methodSummary.xml.XMLReader; + +/** + * This class loads method summary xml files. + * + */ +public class XMLSummaryProvider implements IMethodSummaryProvider { + + private final Logger logger = LoggerFactory.getLogger(getClass()); + + private XMLReader reader; + private ClassSummaries summaries = new ClassSummaries(); + private Set supportedClasses = new HashSet(); + protected Set loadableClasses = new HashSet(); + private Set files; + private Set pathes; + private FileSystem fileSystem; + + private boolean hasLoadingErrors; + + /** + * Loads a summary from a folder within the StubDroid jar file. + * + * @param folderInJar + * The folder in the JAR file from which to load the summary files + * @throws URISyntaxException + * @throws IOException + */ + public XMLSummaryProvider(String folderInJar) throws URISyntaxException, IOException { + File f = new File(folderInJar); + if (f.exists()) { + load(f); + return; + } + + URI uri = null; + String jarRelativePath = folderInJar.startsWith("/") ? folderInJar : "/" + folderInJar; + URL resourceURL = XMLSummaryProvider.class.getResource(jarRelativePath); + if (resourceURL == null) { + logger.warn(String.format("Could not find folder %s in JAR, trying normal folder on disk...", folderInJar)); + String classLocation = XMLSummaryProvider.class.getProtectionDomain().getCodeSource().getLocation() + .getPath(); + File classFile = new File(new URI("file:///" + classLocation)); + if (classFile.getCanonicalPath().endsWith("build" + File.separator + "classes")) + classFile = classFile.getParentFile().getParentFile(); + classFile = new File(classFile, folderInJar); + if (classFile.exists()) + uri = classFile.toURI(); + } else + uri = resourceURL.toURI(); + + // Do we have the summaries + if (uri == null) + throw new RuntimeException(String.format("Could not find summaries in folder %s", folderInJar)); + + Path path; + // We load a file system to retrieve all available class summaries + // Note that we cannot close the file system, since it may not be + // possible to reopen it + // using the same URL. + // However, since we are loading from inside the JAR, we only create a + // few file systems this way + // File systems are reused automatically between different + // LazySummaryProviders if their URL is the same. + // Thus, in worst case, we open file systems for all different summary + // folders in the JAR, which are being closed + // when the JVM terminates. + if (uri.getScheme().equals("jar")) { + try { + fileSystem = FileSystems.getFileSystem(uri); + } catch (FileSystemNotFoundException e) { + fileSystem = FileSystems.newFileSystem(uri, Collections.emptyMap()); + } + path = fileSystem.getPath(folderInJar); + } else { + path = Paths.get(uri); + } + fileSystem = path.getFileSystem(); + Stream walk = Files.walk(path, 1); + try { + pathes = new HashSet(); + for (Iterator it = walk.iterator(); it.hasNext();) { + Path classp = it.next(); + pathes.add(classp); + String name = getFileName(classp); + if (name.endsWith(".xml")) + loadableClasses.add(fileToClass(name)); + } + } finally { + walk.close(); + } + init(); + + } + + private String getFileName(Path path) { + return path.getFileName().toString(); + } + + /** + * Loads a file or all files in a dir (not recursively) + * + * @param source + */ + public XMLSummaryProvider(File source) { + load(source); + } + + private void load(File source) { + if (!source.exists()) + throw new RuntimeException("Source directory " + source + " does not exist"); + + if (source.isFile()) + files = Collections.singleton(source); + else if (source.isDirectory()) { + File[] filesInDir = source.listFiles(); + if (filesInDir == null) + throw new RuntimeException("Could not get files in directory " + source); + files = new HashSet(Arrays.asList(filesInDir)); + } else + throw new RuntimeException("Invalid input file: " + source); + + init(); + } + + public XMLSummaryProvider(List files) { + this.files = new HashSet(); + for (File f : files) { + // Check if the file exists + if (!f.exists()) + throw new RuntimeException("Input file does not exist: " + f); + + // Distinguish between files and directories + if (f.isFile()) + this.files.add(f); + else if (f.isDirectory()) { + File[] filesInDir = f.listFiles(); + if (filesInDir == null) + throw new RuntimeException("Could not get files in directory " + f); + this.files.addAll(Arrays.asList(filesInDir)); + } else + throw new RuntimeException("Invalid input file: " + f); + } + + init(); + } + + private void init() { + this.reader = new XMLReader(); + if (files != null) { + for (File f : files) { + if (f.isFile() && f.getName().endsWith(".xml")) { + loadableClasses.add(f.getName().replace(".xml", "")); + } + } + } + } + + @Override + public boolean supportsClass(String clazz) { + if (supportedClasses.contains(clazz)) + return true; + if (loadableClasses.contains(clazz)) + return true; + return false; + } + + @Override + public ClassSummaries getMethodFlows(Set classes, String methodSignature) { + for (String className : classes) + if (loadableClasses.contains(className)) + loadClass(className); + return summaries.filterForMethod(classes, methodSignature); + } + + @Override + public MethodSummaries getMethodFlows(String className, String methodSignature) { + if (loadableClasses.contains(className)) + loadClass(className); + MethodSummaries classSummaries = summaries.getClassSummaries(className); + return classSummaries == null ? null : classSummaries.filterForMethod(methodSignature); + } + + protected void loadClass(String clazz) { + // Do not load classes more than once + if (supportedClasses.contains(clazz)) + return; + + if (files != null) { + for (File f : files) { + if (fileToClass(f).equals(clazz)) { + try { + summaries.merge(clazz, reader.read(f)); + loadableClasses.remove(clazz); + supportedClasses.add(clazz); + break; + } catch (Exception e) { + LoggerFactory.getLogger(getClass()) + .error(String.format("An error occurred while loading the summary of %s", clazz), e); + hasLoadingErrors = true; + } + } + } + } + if (pathes != null) { + for (Path path : pathes) { + if (fileToClass(getFileName(path)).equals(clazz)) { + try (InputStream inputStream = path.getFileSystem().provider().newInputStream(path)) { + summaries.merge(clazz, reader.read(new InputStreamReader(inputStream))); + loadableClasses.remove(clazz); + supportedClasses.add(clazz); + break; + } catch (Exception e) { + LoggerFactory.getLogger(getClass()) + .error(String.format("An error occurred while loading the summary of %s", clazz), e); + hasLoadingErrors = true; + } + } + } + } + } + + public boolean hasLoadingErrors() { + return hasLoadingErrors; + } + + private String fileToClass(File f) { + return fileToClass(f.getName()); + } + + private String fileToClass(String s) { + return s.replace(".xml", ""); + } + + @Override + public Set getSupportedClasses() { + return this.supportedClasses; + } + + @Override + public Set getLoadableClasses() { + return this.loadableClasses; + } + + /** + * Gets all method flow summaries that have been loaded so far + * + * @return All summaries that have been loaded so far + */ + public ClassSummaries getSummaries() { + return summaries; + } + + @Override + public MethodSummaries getClassFlows(String className) { + if (loadableClasses.contains(className)) + loadClass(className); + return summaries.getClassSummaries(className); + } + +} diff --git a/soot-infoflow-summaries/src/soot/jimple/infoflow/methodSummary/taintWrappers/TaintWrapperFactory.java b/soot-infoflow-summaries/src/soot/jimple/infoflow/methodSummary/taintWrappers/TaintWrapperFactory.java index 173c8249a..a331a5c64 100644 --- a/soot-infoflow-summaries/src/soot/jimple/infoflow/methodSummary/taintWrappers/TaintWrapperFactory.java +++ b/soot-infoflow-summaries/src/soot/jimple/infoflow/methodSummary/taintWrappers/TaintWrapperFactory.java @@ -10,10 +10,13 @@ import javax.xml.stream.XMLStreamException; +import soot.jimple.infoflow.methodSummary.data.provider.EagerSummaryProvider; import soot.jimple.infoflow.methodSummary.data.provider.LazySummaryProvider; public class TaintWrapperFactory { + public static final String DEFAULT_SUMMARY_DIR = "/summariesManual"; + public static SummaryTaintWrapper createTaintWrapper(Collection files) throws FileNotFoundException, XMLStreamException { List fs = new LinkedList(); @@ -22,12 +25,24 @@ public static SummaryTaintWrapper createTaintWrapper(Collection files) return new SummaryTaintWrapper(new LazySummaryProvider(fs)); } + public static SummaryTaintWrapper createTaintWrapperEager(Collection files) + throws FileNotFoundException, XMLStreamException { + List fs = new LinkedList(); + for (String s : files) + fs.add(new File(s)); + return new SummaryTaintWrapper(new EagerSummaryProvider(fs)); + } + public static SummaryTaintWrapper createTaintWrapper(String f) throws FileNotFoundException, XMLStreamException { return createTaintWrapper(java.util.Collections.singletonList(f)); } public static SummaryTaintWrapper createTaintWrapper() throws URISyntaxException, IOException { - return new SummaryTaintWrapper(new LazySummaryProvider("/summariesManual")); + return new SummaryTaintWrapper(new LazySummaryProvider(DEFAULT_SUMMARY_DIR)); + } + + public static SummaryTaintWrapper createTaintWrapperEager() throws URISyntaxException, IOException { + return new SummaryTaintWrapper(new EagerSummaryProvider(DEFAULT_SUMMARY_DIR)); } public static SummaryTaintWrapper createTaintWrapper(File f) { diff --git a/soot-infoflow-summaries/test/soot/jimple/infoflow/test/methodSummary/junit/SummaryTaintWrapperTests.java b/soot-infoflow-summaries/test/soot/jimple/infoflow/test/methodSummary/junit/SummaryTaintWrapperTests.java index 676d18b69..16c740073 100644 --- a/soot-infoflow-summaries/test/soot/jimple/infoflow/test/methodSummary/junit/SummaryTaintWrapperTests.java +++ b/soot-infoflow-summaries/test/soot/jimple/infoflow/test/methodSummary/junit/SummaryTaintWrapperTests.java @@ -1,12 +1,14 @@ package soot.jimple.infoflow.test.methodSummary.junit; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; +import java.net.URISyntaxException; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -25,6 +27,7 @@ import soot.jimple.infoflow.InfoflowConfiguration; import soot.jimple.infoflow.config.IInfoflowConfig; import soot.jimple.infoflow.entryPointCreators.DefaultEntryPointCreator; +import soot.jimple.infoflow.methodSummary.data.provider.EagerSummaryProvider; import soot.jimple.infoflow.methodSummary.taintWrappers.TaintWrapperFactory; import soot.jimple.infoflow.results.InfoflowResults; import soot.jimple.infoflow.taintWrappers.ITaintPropagationWrapper; @@ -210,6 +213,12 @@ public void killTaint2() { testNoFlowForMethod(""); } + @Test + public void testAllSummaries() throws URISyntaxException, IOException { + EagerSummaryProvider provider = new EagerSummaryProvider(TaintWrapperFactory.DEFAULT_SUMMARY_DIR); + assertFalse(provider.hasLoadingErrors()); + } + private void testFlowForMethod(String m) { Infoflow iFlow = null; try { @@ -244,7 +253,8 @@ private void checkInfoflow(Infoflow infoflow, int resultCount) { InfoflowResults map = infoflow.getResults(); assertTrue(map.containsSinkMethod(sink)); - assertTrue(map.isPathBetweenMethods(sink, source[0]) || map.isPathBetweenMethods(sink, source[1]) + assertTrue(map.isPathBetweenMethods(sink, source[0]) + || map.isPathBetweenMethods(sink, source[1]) || map.isPathBetweenMethods(sink, source[2])); assertEquals(resultCount, map.size()); } else { @@ -301,8 +311,13 @@ public static void setUp() throws IOException { fail("Test aborted - none of the test sources are available"); } - appPath = testSrc1.getCanonicalPath() + sep + testSrc2.getCanonicalPath() + sep + testSrc3.getCanonicalPath() - + sep + testSrc4.getCanonicalPath(); + appPath = testSrc1.getCanonicalPath() + + sep + + testSrc2.getCanonicalPath() + + sep + + testSrc3.getCanonicalPath() + + sep + + testSrc4.getCanonicalPath(); libPath = System.getProperty("java.home") + File.separator + "lib" + File.separator + "rt.jar"; } From 8c77f716db5ed02bcd92706fd1d98892db22cfd5 Mon Sep 17 00:00:00 2001 From: Marc Miltenberger Date: Thu, 18 Jan 2018 13:12:25 +0100 Subject: [PATCH 2/2] Fixing broken summaries --- .../java.io.ObjectInputStream$GetField.xml | 18 +++++++++--------- .../org.apache.http.RequestLine.xml | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/soot-infoflow-summaries/summariesManual/java.io.ObjectInputStream$GetField.xml b/soot-infoflow-summaries/summariesManual/java.io.ObjectInputStream$GetField.xml index fff39004c..818458d0d 100644 --- a/soot-infoflow-summaries/summariesManual/java.io.ObjectInputStream$GetField.xml +++ b/soot-infoflow-summaries/summariesManual/java.io.ObjectInputStream$GetField.xml @@ -6,7 +6,7 @@ - + @@ -15,7 +15,7 @@ - + @@ -24,7 +24,7 @@ - + @@ -33,7 +33,7 @@ - + @@ -42,7 +42,7 @@ - + @@ -51,7 +51,7 @@ - + @@ -60,7 +60,7 @@ - + @@ -69,7 +69,7 @@ - + @@ -78,7 +78,7 @@ - + diff --git a/soot-infoflow-summaries/summariesManual/org.apache.http.RequestLine.xml b/soot-infoflow-summaries/summariesManual/org.apache.http.RequestLine.xml index 848ce4bd7..fc66a278c 100644 --- a/soot-infoflow-summaries/summariesManual/org.apache.http.RequestLine.xml +++ b/soot-infoflow-summaries/summariesManual/org.apache.http.RequestLine.xml @@ -7,7 +7,7 @@ - +