mirror of
https://github.com/github/codeql.git
synced 2026-04-30 11:15:13 +02:00
Merge pull request #5310 from joefarebrother/guava-io
Java: Add modelling for Guava IO utilities
This commit is contained in:
@@ -8,6 +8,7 @@
|
||||
import java
|
||||
import semmle.code.java.dataflow.TaintTracking
|
||||
import semmle.code.java.dataflow.FlowSources
|
||||
import semmle.code.java.dataflow.ExternalFlow
|
||||
import DataFlow::PathGraph
|
||||
|
||||
class URLConstructor extends ClassInstanceExpr {
|
||||
@@ -37,6 +38,8 @@ class RemoteURLToOpenStreamFlowConfig extends TaintTracking::Configuration {
|
||||
exists(MethodAccess m |
|
||||
sink.asExpr() = m.getQualifier() and m.getMethod() instanceof URLOpenStreamMethod
|
||||
)
|
||||
or
|
||||
sinkNode(sink, "url-open-stream")
|
||||
}
|
||||
|
||||
override predicate isAdditionalTaintStep(DataFlow::Node node1, DataFlow::Node node2) {
|
||||
|
||||
@@ -71,6 +71,7 @@ private import internal.DataFlowPrivate
|
||||
private module Frameworks {
|
||||
private import semmle.code.java.frameworks.ApacheHttp
|
||||
private import semmle.code.java.frameworks.apache.Lang
|
||||
private import semmle.code.java.frameworks.guava.Guava
|
||||
}
|
||||
|
||||
private predicate sourceModelCsv(string row) {
|
||||
|
||||
@@ -6,3 +6,4 @@ import java
|
||||
import StringUtils
|
||||
import Collections
|
||||
import Preconditions
|
||||
import IO
|
||||
|
||||
98
java/ql/src/semmle/code/java/frameworks/guava/IO.qll
Normal file
98
java/ql/src/semmle/code/java/frameworks/guava/IO.qll
Normal file
@@ -0,0 +1,98 @@
|
||||
/** Definitions of taint steps in the IO package of the Guava framework */
|
||||
|
||||
import java
|
||||
private import semmle.code.java.dataflow.ExternalFlow
|
||||
|
||||
private class GuavaIoCsv extends SummaryModelCsv {
|
||||
override predicate row(string row) {
|
||||
row =
|
||||
[
|
||||
//"package;type;overrides;name;signature;ext;inputspec;outputspec;kind",
|
||||
"com.google.common.io;BaseEncoding;true;decode;(CharSequence);;Argument[0];ReturnValue;taint",
|
||||
"com.google.common.io;BaseEncoding;true;decodingStream;(Reader);;Argument[0];ReturnValue;taint",
|
||||
"com.google.common.io;BaseEncoding;true;decodingSource;(CharSource);;Argument[0];ReturnValue;taint",
|
||||
"com.google.common.io;BaseEncoding;true;encode;(byte[]);;Argument[0];ReturnValue;taint",
|
||||
"com.google.common.io;BaseEncoding;true;encode;(byte[],int,int);;Argument[0];ReturnValue;taint",
|
||||
"com.google.common.io;BaseEncoding;true;withSeparator;(String,int);;Argument[0];ReturnValue;taint",
|
||||
"com.google.common.io;BaseEncoding;true;decode;(CharSequence);;Argument[-1];ReturnValue;taint",
|
||||
"com.google.common.io;BaseEncoding;true;decodingStream;(Reader);;Argument[-1];ReturnValue;taint",
|
||||
"com.google.common.io;BaseEncoding;true;decodingSource;(CharSource);;Argument[-1];ReturnValue;taint",
|
||||
"com.google.common.io;BaseEncoding;true;encode;(byte[]);;Argument[-1];ReturnValue;taint",
|
||||
"com.google.common.io;BaseEncoding;true;upperCase;();;Argument[-1];ReturnValue;taint",
|
||||
"com.google.common.io;BaseEncoding;true;lowerCase;();;Argument[-1];ReturnValue;taint",
|
||||
"com.google.common.io;BaseEncoding;true;withPadChar;(char);;Argument[-1];ReturnValue;taint",
|
||||
"com.google.common.io;BaseEncoding;true;omitPadding;();;Argument[-1];ReturnValue;taint",
|
||||
"com.google.common.io;BaseEncoding;true;encode;(byte[],int,int);;Argument[-1];ReturnValue;taint",
|
||||
"com.google.common.io;ByteSource;true;asCharSource;(Charset);;Argument[-1];ReturnValue;taint",
|
||||
"com.google.common.io;ByteSource;true;concat;;;Argument[0];ReturnValue;taint",
|
||||
"com.google.common.io;ByteSource;true;copyTo;(OutputStream);;Argument[-1];Argument[0];taint",
|
||||
"com.google.common.io;ByteSource;true;openStream;();;Argument[-1];ReturnValue;taint",
|
||||
"com.google.common.io;ByteSource;true;openBufferedStream;();;Argument[-1];ReturnValue;taint",
|
||||
"com.google.common.io;ByteSource;true;read;();;Argument[-1];ReturnValue;taint",
|
||||
"com.google.common.io;ByteSource;true;slice;(long,long);;Argument[-1];ReturnValue;taint",
|
||||
"com.google.common.io;ByteSource;true;wrap;(byte[]);;Argument[0];ReturnValue;taint",
|
||||
"com.google.common.io;ByteStreams;false;copy;(InputStream,OutputStream);;Argument[0];Argument[1];taint",
|
||||
"com.google.common.io;ByteStreams;false;copy;(ReadablyByteChannel,WritableByteChannel);;Argument[0];Argument[1];taint",
|
||||
"com.google.common.io;ByteStreams;false;limit;(InputStream,long);;Argument[0];ReturnValue;taint",
|
||||
"com.google.common.io;ByteStreams;false;newDataInput;(byte[]);;Argument[0];ReturnValue;taint",
|
||||
"com.google.common.io;ByteStreams;false;newDataInput;(byte[],int);;Argument[0];ReturnValue;taint",
|
||||
"com.google.common.io;ByteStreams;false;newDataInput;(ByteArrayInputStream);;Argument[0];ReturnValue;taint",
|
||||
"com.google.common.io;ByteStreams;false;newDataOutput;(ByteArrayOutputStream);;Argument[0];ReturnValue;taint",
|
||||
"com.google.common.io;ByteStreams;false;read;(InputStream,byte[],int,int);;Argument[0];Argument[1];taint",
|
||||
"com.google.common.io;ByteStreams;false;readFully;(InputStream,byte[]);;Argument[0];Argument[1];taint",
|
||||
"com.google.common.io;ByteStreams;false;readFully;(InputStream,byte[],int,int);;Argument[0];Argument[1];taint",
|
||||
"com.google.common.io;ByteStreams;false;toByteArray;(InputStream);;Argument[0];ReturnValue;taint",
|
||||
"com.google.common.io;CharSource;true;asByteSource;(Charset);;Argument[-1];ReturnValue;taint",
|
||||
"com.google.common.io;CharSource;true;concat;;;Argument[0];ReturnValue;taint",
|
||||
"com.google.common.io;CharSource;true;copyTo;(Appendable);;Argument[-1];Argument[0];taint",
|
||||
"com.google.common.io;CharSource;true;openStream;();;Argument[-1];ReturnValue;taint",
|
||||
"com.google.common.io;CharSource;true;openBufferedStream;();;Argument[-1];ReturnValue;taint",
|
||||
"com.google.common.io;CharSource;true;read;();;Argument[-1];ReturnValue;taint",
|
||||
"com.google.common.io;CharSource;true;readFirstLine;();;Argument[-1];ReturnValue;taint",
|
||||
"com.google.common.io;CharSource;true;readLines;();;Argument[-1];ReturnValue;taint",
|
||||
"com.google.common.io;CharSource;true;lines;();;Argument[-1];ReturnValue;taint",
|
||||
"com.google.common.io;CharSource;true;wrap;(CharSequence);;Argument[0];ReturnValue;taint",
|
||||
"com.google.common.io;CharStreams;false;copy;(Readable,Appendable);;Argument[0];Argument[1];taint",
|
||||
"com.google.common.io;CharStreams;false;readLines;(Readable);;Argument[0];ReturnValue;taint",
|
||||
"com.google.common.io;CharStreams;false;toString;(Readable);;Argument[0];ReturnValue;taint",
|
||||
"com.google.common.io;Closer;true;register;;;Argument[0];ReturnValue;value",
|
||||
"com.google.common.io;Files;false;getFileExtension;(String);;Argument[0];ReturnValue;taint",
|
||||
"com.google.common.io;Files;false;getNameWithoutExtension;(String);;Argument[0];ReturnValue;taint",
|
||||
"com.google.common.io;Files;false;simplifyPath;(String);;Argument[0];ReturnValue;taint",
|
||||
"com.google.common.io;MoreFiles;false;getFileExtension;(Path);;Argument[0];ReturnValue;taint",
|
||||
"com.google.common.io;MoreFiles;false;getNameWithoutExtension;(Path);;Argument[0];ReturnValue;taint",
|
||||
"com.google.common.io;LineReader;false;LineReader;(Readable);;Argument[0];ReturnValue;taint",
|
||||
"com.google.common.io;LineReader;true;readLine;();;Argument[-1];ReturnValue;taint",
|
||||
"com.google.common.io;ByteArrayDataOutput;true;toByteArray;();;Argument[-1];ReturnValue;taint",
|
||||
"com.google.common.io;ByteArrayDataOutput;true;write;(byte[]);;Argument[0];Argument[-1];taint",
|
||||
"com.google.common.io;ByteArrayDataOutput;true;write;(byte[],int,int);;Argument[0];Argument[-1];taint",
|
||||
"com.google.common.io;ByteArrayDataOutput;true;write;(int);;Argument[0];Argument[-1];taint",
|
||||
"com.google.common.io;ByteArrayDataOutput;true;writeByte;(int);;Argument[0];Argument[-1];taint",
|
||||
"com.google.common.io;ByteArrayDataOutput;true;writeBytes;(String);;Argument[0];Argument[-1];taint",
|
||||
"com.google.common.io;ByteArrayDataOutput;true;writeChar;(int);;Argument[0];Argument[-1];taint",
|
||||
"com.google.common.io;ByteArrayDataOutput;true;writeChars;(String);;Argument[0];Argument[-1];taint",
|
||||
"com.google.common.io;ByteArrayDataOutput;true;writeDouble;(double);;Argument[0];Argument[-1];taint",
|
||||
"com.google.common.io;ByteArrayDataOutput;true;writeFloat;(float);;Argument[0];Argument[-1];taint",
|
||||
"com.google.common.io;ByteArrayDataOutput;true;writeInt;(int);;Argument[0];Argument[-1];taint",
|
||||
"com.google.common.io;ByteArrayDataOutput;true;writeLong;(long);;Argument[0];Argument[-1];taint",
|
||||
"com.google.common.io;ByteArrayDataOutput;true;writeShort;(int);;Argument[0];Argument[-1];taint",
|
||||
"com.google.common.io;ByteArrayDataOutput;true;writeUTF;(String);;Argument[0];Argument[-1];taint"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
private class GuavaIoSinkCsv extends SinkModelCsv {
|
||||
override predicate row(string row) {
|
||||
row =
|
||||
[
|
||||
//"package;type;overrides;name;signature;ext;inputspec;kind",
|
||||
"com.google.common.io;Resources;false;asByteSource;(URL);;Argument[0];url-open-stream",
|
||||
"com.google.common.io;Resources;false;asCharSource;(URL,Charset);;Argument[0];url-open-stream",
|
||||
"com.google.common.io;Resources;false;copy;(URL,OutputStream);;Argument[0];url-open-stream",
|
||||
"com.google.common.io;Resources;false;asByteSource;(URL);;Argument[0];url-open-stream",
|
||||
"com.google.common.io;Resources;false;readLines;;;Argument[0];url-open-stream",
|
||||
"com.google.common.io;Resources;false;toByteArray;(URL);;Argument[0];url-open-stream",
|
||||
"com.google.common.io;Resources;false;toString;(URL,Charset);;Argument[0];url-open-stream"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -14,20 +14,20 @@ class TestCollect {
|
||||
String x = taint();
|
||||
|
||||
ImmutableSet<String> xs = ImmutableSet.of(x, "y", "z");
|
||||
sink(xs.asList());
|
||||
sink(xs.asList()); // $numTaintFlow=1
|
||||
|
||||
ImmutableSet<String> ys = ImmutableSet.of("a", "b", "c");
|
||||
|
||||
sink(Sets.filter(Sets.union(xs, ys), y -> true));
|
||||
sink(Sets.filter(Sets.union(xs, ys), y -> true)); // $numTaintFlow=1
|
||||
|
||||
sink(Sets.newHashSet("a", "b", "c", "d", x));
|
||||
sink(Sets.newHashSet("a", "b", "c", "d", x)); // $numTaintFlow=1
|
||||
}
|
||||
|
||||
void test2() {
|
||||
sink(ImmutableList.of(taint(), taint(), taint(), taint())); // expect 4 alerts
|
||||
sink(ImmutableMap.of(taint(), taint(), taint(), taint())); // expect 2 alerts
|
||||
sink(ImmutableMultimap.of(taint(), taint(), taint(), taint())); // expect 2 alerts
|
||||
sink(ImmutableTable.of(taint(),taint(), taint())); // expect 1 alert
|
||||
sink(ImmutableList.of(taint(), taint(), taint(), taint())); // $numTaintFlow=4
|
||||
sink(ImmutableMap.of(taint(), taint(), taint(), taint())); // $numTaintFlow=2
|
||||
sink(ImmutableMultimap.of(taint(), taint(), taint(), taint())); // $numTaintFlow=2
|
||||
sink(ImmutableTable.of(taint(),taint(), taint())); // $numTaintFlow=1
|
||||
}
|
||||
|
||||
void test3() {
|
||||
@@ -38,20 +38,20 @@ class TestCollect {
|
||||
b.add("a");
|
||||
sink(b);
|
||||
b.add(x);
|
||||
sink(b.build());
|
||||
sink(b.build()); // $numTaintFlow=1
|
||||
|
||||
b = ImmutableList.builder();
|
||||
|
||||
b.add("a").add(x);
|
||||
sink(b.build());
|
||||
sink(b.build()); // $numTaintFlow=1
|
||||
|
||||
sink(ImmutableList.builder().add("a").add(x).build());
|
||||
sink(ImmutableList.builder().add("a").add(x).build()); // $numTaintFlow=1
|
||||
|
||||
ImmutableMap.Builder<String, String> b2 = ImmutableMap.builder();
|
||||
b2.put(x,"v");
|
||||
sink(b2);
|
||||
b2.put("k",x);
|
||||
sink(b2.build());
|
||||
sink(b2.build()); // $numTaintFlow=1
|
||||
}
|
||||
|
||||
void test4(Table<String, String, String> t1, Table<String, String, String> t2, Table<String, String, String> t3) {
|
||||
@@ -61,62 +61,62 @@ class TestCollect {
|
||||
t1.put("r", x, "v");
|
||||
sink(t1);
|
||||
t1.put("r", "c", x);
|
||||
sink(t1);
|
||||
sink(t1.row("r"));
|
||||
sink(t1); // $numTaintFlow=1
|
||||
sink(t1.row("r")); // $numTaintFlow=1
|
||||
|
||||
t2.putAll(t1);
|
||||
for (Table.Cell<String,String,String> c : t2.cellSet()) {
|
||||
sink(c.getValue());
|
||||
sink(c.getValue()); // $numTaintFlow=1
|
||||
}
|
||||
|
||||
sink(t1.remove("r", "c"));
|
||||
sink(t1.remove("r", "c")); // $numTaintFlow=1
|
||||
|
||||
t3.row("r").put("c", x);
|
||||
sink(t3); // Not detected
|
||||
sink(t3); // $ MISSING:numTaintFlow=1
|
||||
}
|
||||
|
||||
void test4(Multimap<String, String> m1, Multimap<String, String> m2, Multimap<String, String> m3,
|
||||
Multimap<String, String> m4, Multimap<String, String> m5){
|
||||
String x = taint();
|
||||
m1.put("k", x);
|
||||
sink(m1);
|
||||
sink(m1.get("k"));
|
||||
sink(m1); // $numTaintFlow=1
|
||||
sink(m1.get("k")); // $numTaintFlow=1
|
||||
|
||||
m2.putAll("k", ImmutableList.of("a", x, "b"));
|
||||
sink(m2);
|
||||
sink(m2); // $numTaintFlow=1
|
||||
|
||||
m3.putAll(m1);
|
||||
sink(m3);
|
||||
sink(m3); // $numTaintFlow=1
|
||||
|
||||
m4.replaceValues("k", m1.replaceValues("k", ImmutableList.of("a")));
|
||||
for (Map.Entry<String, String> e : m4.entries()) {
|
||||
sink(e.getValue());
|
||||
sink(e.getValue()); // $numTaintFlow=1
|
||||
}
|
||||
|
||||
m5.asMap().get("k").add(x);
|
||||
sink(m5); // Not detected
|
||||
sink(m5); // $ MISSING:numTaintFlow=1
|
||||
}
|
||||
|
||||
void test5(Comparator<String> comp, SortedSet<String> sorS, SortedMap<String, String> sorM) {
|
||||
ImmutableSortedSet<String> s = ImmutableSortedSet.of(taint());
|
||||
|
||||
sink(s);
|
||||
sink(ImmutableSortedSet.copyOf(s));
|
||||
sink(ImmutableSortedSet.copyOf(comp, s));
|
||||
sink(s); // $numTaintFlow=1
|
||||
sink(ImmutableSortedSet.copyOf(s)); // $numTaintFlow=1
|
||||
sink(ImmutableSortedSet.copyOf(comp, s)); // $numTaintFlow=1
|
||||
|
||||
sorS.add(taint());
|
||||
sink(ImmutableSortedSet.copyOfSorted(sorS));
|
||||
sink(ImmutableSortedSet.copyOfSorted(sorS)); // $numTaintFlow=1
|
||||
|
||||
sink(ImmutableList.sortedCopyOf(s));
|
||||
sink(ImmutableList.sortedCopyOf(comp, s));
|
||||
sink(ImmutableList.sortedCopyOf(s)); // $numTaintFlow=1
|
||||
sink(ImmutableList.sortedCopyOf(comp, s)); // $numTaintFlow=1
|
||||
|
||||
ImmutableSortedMap<String, String> m = ImmutableSortedMap.of("k", taint());
|
||||
|
||||
sink(m);
|
||||
sink(ImmutableSortedMap.copyOf(m));
|
||||
sink(ImmutableSortedMap.copyOf(m, comp));
|
||||
sink(m); // $numTaintFlow=1
|
||||
sink(ImmutableSortedMap.copyOf(m)); // $numTaintFlow=1
|
||||
sink(ImmutableSortedMap.copyOf(m, comp)); // $numTaintFlow=1
|
||||
|
||||
sorM.put("k", taint());
|
||||
sink(ImmutableSortedMap.copyOfSorted(sorM));
|
||||
sink(ImmutableSortedMap.copyOfSorted(sorM)); // $numTaintFlow=1
|
||||
}
|
||||
}
|
||||
126
java/ql/test/library-tests/frameworks/guava/TestIO.java
Normal file
126
java/ql/test/library-tests/frameworks/guava/TestIO.java
Normal file
@@ -0,0 +1,126 @@
|
||||
package com.google.common.io;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.Reader;
|
||||
import java.lang.StringBuffer;
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.InputStream;
|
||||
import java.io.Closeable;
|
||||
import java.nio.file.Path;
|
||||
import java.io.IOException;
|
||||
|
||||
class TestIO {
|
||||
Object taint() { return null; }
|
||||
String staint(){ return (String) taint(); }
|
||||
byte[] btaint() { return (byte[]) taint(); }
|
||||
InputStream itaint() { return (InputStream) taint(); }
|
||||
Reader rtaint() { return new InputStreamReader(itaint()); }
|
||||
Path ptaint() { return (Path) taint(); }
|
||||
|
||||
void sink(Object o) {}
|
||||
|
||||
void test1() {
|
||||
BaseEncoding enc = BaseEncoding.base64();
|
||||
sink(enc.decode(staint())); // $numTaintFlow=1
|
||||
sink(enc.encode(btaint())); // $numTaintFlow=1
|
||||
sink(enc.encode(btaint(), 0, 42)); // $numTaintFlow=1
|
||||
sink(enc.decodingStream(rtaint())); // $numTaintFlow=1
|
||||
sink(enc.decodingSource(CharSource.wrap(staint()))); // $numTaintFlow=1
|
||||
sink(enc.withSeparator(staint(), 10).omitPadding().lowerCase().decode("abc")); // $numTaintFlow=1
|
||||
}
|
||||
|
||||
void test2() throws IOException {
|
||||
ByteSource b = ByteSource.wrap(btaint());
|
||||
sink(b.openStream()); // $numTaintFlow=1
|
||||
sink(b.openBufferedStream()); // $numTaintFlow=1
|
||||
sink(b.asCharSource(null)); // $numTaintFlow=1
|
||||
sink(b.slice(42,1337)); // $numTaintFlow=1
|
||||
sink(b.read()); // $numTaintFlow=1
|
||||
sink(ByteSource.concat(ByteSource.empty(), ByteSource.empty(), b)); // $numTaintFlow=1
|
||||
sink(ByteSource.concat(ImmutableList.of(ByteSource.empty(), ByteSource.empty(), b))); // $numTaintFlow=1
|
||||
sink(b.read(new MyByteProcessor())); // $ MISSING:numTaintFlow=1
|
||||
ByteArrayOutputStream out = new ByteArrayOutputStream();
|
||||
b.copyTo(out);
|
||||
sink(out.toByteArray()); // $numTaintFlow=1
|
||||
|
||||
CharSource c = CharSource.wrap(staint());
|
||||
sink(c.openStream()); // $numTaintFlow=1
|
||||
sink(c.openBufferedStream()); // $numTaintFlow=1
|
||||
sink(c.asByteSource(null)); // $numTaintFlow=1
|
||||
sink(c.readFirstLine()); // $numTaintFlow=1
|
||||
sink(c.readLines()); // $numTaintFlow=1
|
||||
sink(c.read()); // $numTaintFlow=1
|
||||
sink(c.lines()); // $numTaintFlow=1
|
||||
sink(CharSource.concat(CharSource.empty(), CharSource.empty(), c)); // $numTaintFlow=1
|
||||
sink(CharSource.concat(ImmutableList.of(CharSource.empty(), CharSource.empty(), c))); // $numTaintFlow=1
|
||||
sink(c.readLines(new MyLineProcessor())); // $ MISSING:numTaintFlow=1
|
||||
c.forEachLine(l -> sink(l)); // $ MISSING:numTaintFlow=1
|
||||
StringBuffer buf = new StringBuffer();
|
||||
c.copyTo(buf);
|
||||
sink(buf); // $numTaintFlow=1
|
||||
}
|
||||
|
||||
class MyByteProcessor implements ByteProcessor<Object> {
|
||||
byte[] buf;
|
||||
public Object getResult() { return buf; }
|
||||
public boolean processBytes(byte[] b, int off, int len) { this.buf = b; return false; }
|
||||
}
|
||||
|
||||
class MyLineProcessor implements LineProcessor<String> {
|
||||
String s = "";
|
||||
public String getResult() { return s; }
|
||||
public boolean processLine(String l) { this.s += l; return true; }
|
||||
}
|
||||
|
||||
void test3() throws IOException {
|
||||
sink(ByteStreams.limit(itaint(), 1337)); // $numTaintFlow=1
|
||||
sink(ByteStreams.newDataInput(btaint())); // $numTaintFlow=1
|
||||
sink(ByteStreams.newDataInput(btaint(), 0)); // $numTaintFlow=1
|
||||
sink(ByteStreams.newDataInput(btaint())); // $numTaintFlow=1
|
||||
sink(ByteStreams.newDataInput(btaint()).readLine()); // $ MISSING:numTaintFlow=1
|
||||
sink(ByteStreams.newDataInput(new ByteArrayInputStream(btaint()))); // $numTaintFlow=1
|
||||
ByteArrayOutputStream out = new ByteArrayOutputStream();
|
||||
out.write(btaint());
|
||||
sink(ByteStreams.newDataOutput(out)); // $numTaintFlow=1
|
||||
byte[] b1 = null, b2 = null, b3 = null;
|
||||
ByteStreams.read(itaint(), b1, 0, 42);
|
||||
sink(b1); // $numTaintFlow=1
|
||||
ByteStreams.readFully(itaint(), b2);
|
||||
sink(b2); // $numTaintFlow=1
|
||||
ByteStreams.readFully(itaint(), b3, 0, 42);
|
||||
sink(b3); // $numTaintFlow=1
|
||||
sink(ByteStreams.readBytes(itaint(), new MyByteProcessor())); // $ MISSING:numTaintFlow=1
|
||||
sink(ByteStreams.toByteArray(itaint())); // $numTaintFlow=1
|
||||
ByteArrayDataOutput out2 = ByteStreams.newDataOutput();
|
||||
out2.writeUTF(staint());
|
||||
sink(out2.toByteArray()); // $numTaintFlow=1
|
||||
|
||||
StringBuffer buf = new StringBuffer();
|
||||
CharStreams.copy(rtaint(), buf);
|
||||
sink(buf); // $numTaintFlow=1
|
||||
sink(CharStreams.readLines(rtaint())); // $numTaintFlow=1
|
||||
sink(CharStreams.readLines(rtaint(), new MyLineProcessor())); // $ MISSING:numTaintFlow=1
|
||||
sink(CharStreams.toString(rtaint())); // $numTaintFlow=1
|
||||
}
|
||||
|
||||
void test4() throws IOException {
|
||||
sink(Closer.create().register((Closeable) taint())); // $numTaintFlow=1
|
||||
sink(new LineReader(rtaint()).readLine()); // $numTaintFlow=1
|
||||
sink(Files.simplifyPath(staint())); // $numTaintFlow=1
|
||||
sink(Files.getFileExtension(staint())); // $numTaintFlow=1
|
||||
sink(Files.getNameWithoutExtension(staint())); // $numTaintFlow=1
|
||||
sink(MoreFiles.getFileExtension(ptaint())); // $numTaintFlow=1
|
||||
sink(MoreFiles.getNameWithoutExtension(ptaint())); // $numTaintFlow=1
|
||||
}
|
||||
|
||||
void test6() throws IOException {
|
||||
sink(new CountingInputStream(itaint())); // $numTaintFlow=1
|
||||
byte[] buf = null;
|
||||
new CountingInputStream(itaint()).read(buf, 0, 42);
|
||||
sink(buf); // $numTaintFlow=1
|
||||
sink(new LittleEndianDataInputStream(itaint())); // $numTaintFlow=1
|
||||
sink(new LittleEndianDataInputStream(itaint()).readUTF()); // $ MISSING:numTaintFlow=1
|
||||
}
|
||||
}
|
||||
@@ -14,14 +14,14 @@ class TestStrings {
|
||||
void test1() {
|
||||
String x = taint();
|
||||
|
||||
sink(Strings.padStart(x, 10, ' '));
|
||||
sink(Strings.padEnd(x, 10, ' '));
|
||||
sink(Strings.repeat(x, 3));
|
||||
sink(Strings.emptyToNull(Strings.nullToEmpty(x)));
|
||||
sink(Strings.lenientFormat(x, 3));
|
||||
sink(Strings.commonPrefix(x, "abc"));
|
||||
sink(Strings.commonSuffix(x, "cde"));
|
||||
sink(Strings.lenientFormat("%s = %s", x, 3));
|
||||
sink(Strings.padStart(x, 10, ' ')); // $numTaintFlow=1
|
||||
sink(Strings.padEnd(x, 10, ' ')); // $numTaintFlow=1
|
||||
sink(Strings.repeat(x, 3)); // $numTaintFlow=1
|
||||
sink(Strings.emptyToNull(Strings.nullToEmpty(x))); // $numTaintFlow=1
|
||||
sink(Strings.lenientFormat(x, 3)); // $numTaintFlow=1
|
||||
sink(Strings.commonPrefix(x, "abc"));
|
||||
sink(Strings.commonSuffix(x, "cde"));
|
||||
sink(Strings.lenientFormat("%s = %s", x, 3)); // $numTaintFlow=1
|
||||
}
|
||||
|
||||
void test2() {
|
||||
@@ -29,10 +29,10 @@ class TestStrings {
|
||||
Splitter s = Splitter.on(x).omitEmptyStrings();
|
||||
|
||||
sink(s.split("x y z"));
|
||||
sink(s.split(x));
|
||||
sink(s.splitToList(x));
|
||||
sink(s.split(x)); // $numTaintFlow=1
|
||||
sink(s.splitToList(x)); // $numTaintFlow=1
|
||||
sink(s.withKeyValueSeparator("=").split("a=b"));
|
||||
sink(s.withKeyValueSeparator("=").split(x));
|
||||
sink(s.withKeyValueSeparator("=").split(x)); // $numTaintFlow=1
|
||||
}
|
||||
|
||||
void test3() {
|
||||
@@ -43,20 +43,20 @@ class TestStrings {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sink(safeJoiner.appendTo(sb, "a", "b", "c"));
|
||||
sink(sb.toString());
|
||||
sink(taintedJoiner.appendTo(sb, "a", "b", "c"));
|
||||
sink(sb.toString());
|
||||
sink(safeJoiner.appendTo(sb, "a", "b", "c"));
|
||||
sink(sb.toString());
|
||||
sink(taintedJoiner.appendTo(sb, "a", "b", "c")); // $numTaintFlow=1
|
||||
sink(sb.toString()); // $numTaintFlow=1
|
||||
sink(safeJoiner.appendTo(sb, "a", "b", "c")); // $numTaintFlow=1
|
||||
sink(sb.toString()); // $numTaintFlow=1
|
||||
|
||||
sb = new StringBuilder();
|
||||
sink(safeJoiner.appendTo(sb, x, x));
|
||||
sink(safeJoiner.appendTo(sb, x, x)); // $numTaintFlow=1
|
||||
|
||||
Map<String, String> m = new HashMap<String, String>();
|
||||
m.put("k", "v");
|
||||
sink(safeJoiner.withKeyValueSeparator("=").join(m));
|
||||
sink(safeJoiner.withKeyValueSeparator(x).join(m));
|
||||
sink(taintedJoiner.useForNull("(null)").withKeyValueSeparator("=").join(m));
|
||||
sink(safeJoiner.withKeyValueSeparator(x).join(m)); // $numTaintFlow=1
|
||||
sink(taintedJoiner.useForNull("(null)").withKeyValueSeparator("=").join(m)); // $numTaintFlow=1
|
||||
m.put("k2", x);
|
||||
sink(safeJoiner.withKeyValueSeparator("=").join(m));
|
||||
sink(safeJoiner.withKeyValueSeparator("=").join(m)); // $numTaintFlow=1
|
||||
}
|
||||
}
|
||||
@@ -1,52 +0,0 @@
|
||||
| TestCollect.java:14:20:14:26 | taint(...) | TestCollect.java:17:14:17:24 | asList(...) |
|
||||
| TestCollect.java:14:20:14:26 | taint(...) | TestCollect.java:21:14:21:55 | filter(...) |
|
||||
| TestCollect.java:14:20:14:26 | taint(...) | TestCollect.java:23:14:23:51 | newHashSet(...) |
|
||||
| TestCollect.java:27:31:27:37 | taint(...) | TestCollect.java:27:14:27:65 | of(...) |
|
||||
| TestCollect.java:27:40:27:46 | taint(...) | TestCollect.java:27:14:27:65 | of(...) |
|
||||
| TestCollect.java:27:49:27:55 | taint(...) | TestCollect.java:27:14:27:65 | of(...) |
|
||||
| TestCollect.java:27:58:27:64 | taint(...) | TestCollect.java:27:14:27:65 | of(...) |
|
||||
| TestCollect.java:28:39:28:45 | taint(...) | TestCollect.java:28:14:28:64 | of(...) |
|
||||
| TestCollect.java:28:57:28:63 | taint(...) | TestCollect.java:28:14:28:64 | of(...) |
|
||||
| TestCollect.java:29:44:29:50 | taint(...) | TestCollect.java:29:14:29:69 | of(...) |
|
||||
| TestCollect.java:29:62:29:68 | taint(...) | TestCollect.java:29:14:29:69 | of(...) |
|
||||
| TestCollect.java:30:49:30:55 | taint(...) | TestCollect.java:30:14:30:56 | of(...) |
|
||||
| TestCollect.java:34:20:34:26 | taint(...) | TestCollect.java:41:14:41:22 | build(...) |
|
||||
| TestCollect.java:34:20:34:26 | taint(...) | TestCollect.java:46:14:46:22 | build(...) |
|
||||
| TestCollect.java:34:20:34:26 | taint(...) | TestCollect.java:48:14:48:60 | build(...) |
|
||||
| TestCollect.java:34:20:34:26 | taint(...) | TestCollect.java:54:14:54:23 | build(...) |
|
||||
| TestCollect.java:58:20:58:26 | taint(...) | TestCollect.java:64:14:64:15 | t1 |
|
||||
| TestCollect.java:58:20:58:26 | taint(...) | TestCollect.java:65:14:65:24 | row(...) |
|
||||
| TestCollect.java:58:20:58:26 | taint(...) | TestCollect.java:69:18:69:29 | getValue(...) |
|
||||
| TestCollect.java:58:20:58:26 | taint(...) | TestCollect.java:72:14:72:32 | remove(...) |
|
||||
| TestCollect.java:80:20:80:26 | taint(...) | TestCollect.java:82:14:82:15 | m1 |
|
||||
| TestCollect.java:80:20:80:26 | taint(...) | TestCollect.java:83:14:83:24 | get(...) |
|
||||
| TestCollect.java:80:20:80:26 | taint(...) | TestCollect.java:86:14:86:15 | m2 |
|
||||
| TestCollect.java:80:20:80:26 | taint(...) | TestCollect.java:89:14:89:15 | m3 |
|
||||
| TestCollect.java:80:20:80:26 | taint(...) | TestCollect.java:93:18:93:29 | getValue(...) |
|
||||
| TestCollect.java:101:62:101:68 | taint(...) | TestCollect.java:103:14:103:14 | s |
|
||||
| TestCollect.java:101:62:101:68 | taint(...) | TestCollect.java:104:14:104:41 | copyOf(...) |
|
||||
| TestCollect.java:101:62:101:68 | taint(...) | TestCollect.java:105:14:105:47 | copyOf(...) |
|
||||
| TestCollect.java:101:62:101:68 | taint(...) | TestCollect.java:110:14:110:42 | sortedCopyOf(...) |
|
||||
| TestCollect.java:101:62:101:68 | taint(...) | TestCollect.java:111:14:111:48 | sortedCopyOf(...) |
|
||||
| TestCollect.java:107:18:107:24 | taint(...) | TestCollect.java:108:14:108:50 | copyOfSorted(...) |
|
||||
| TestCollect.java:113:75:113:81 | taint(...) | TestCollect.java:115:14:115:14 | m |
|
||||
| TestCollect.java:113:75:113:81 | taint(...) | TestCollect.java:116:14:116:41 | copyOf(...) |
|
||||
| TestCollect.java:113:75:113:81 | taint(...) | TestCollect.java:117:14:117:47 | copyOf(...) |
|
||||
| TestCollect.java:119:23:119:29 | taint(...) | TestCollect.java:120:14:120:50 | copyOfSorted(...) |
|
||||
| TestStrings.java:15:20:15:26 | taint(...) | TestStrings.java:17:14:17:41 | padStart(...) |
|
||||
| TestStrings.java:15:20:15:26 | taint(...) | TestStrings.java:18:14:18:39 | padEnd(...) |
|
||||
| TestStrings.java:15:20:15:26 | taint(...) | TestStrings.java:19:14:19:33 | repeat(...) |
|
||||
| TestStrings.java:15:20:15:26 | taint(...) | TestStrings.java:20:14:20:56 | emptyToNull(...) |
|
||||
| TestStrings.java:15:20:15:26 | taint(...) | TestStrings.java:21:14:21:40 | lenientFormat(...) |
|
||||
| TestStrings.java:15:20:15:26 | taint(...) | TestStrings.java:24:14:24:51 | lenientFormat(...) |
|
||||
| TestStrings.java:28:20:28:26 | taint(...) | TestStrings.java:32:14:32:23 | split(...) |
|
||||
| TestStrings.java:28:20:28:26 | taint(...) | TestStrings.java:33:14:33:29 | splitToList(...) |
|
||||
| TestStrings.java:28:20:28:26 | taint(...) | TestStrings.java:35:14:35:50 | split(...) |
|
||||
| TestStrings.java:39:20:39:26 | taint(...) | TestStrings.java:46:14:46:54 | appendTo(...) |
|
||||
| TestStrings.java:39:20:39:26 | taint(...) | TestStrings.java:47:14:47:26 | toString(...) |
|
||||
| TestStrings.java:39:20:39:26 | taint(...) | TestStrings.java:48:14:48:51 | appendTo(...) |
|
||||
| TestStrings.java:39:20:39:26 | taint(...) | TestStrings.java:49:14:49:26 | toString(...) |
|
||||
| TestStrings.java:39:20:39:26 | taint(...) | TestStrings.java:52:14:52:42 | appendTo(...) |
|
||||
| TestStrings.java:39:20:39:26 | taint(...) | TestStrings.java:57:14:57:56 | join(...) |
|
||||
| TestStrings.java:39:20:39:26 | taint(...) | TestStrings.java:58:14:58:82 | join(...) |
|
||||
| TestStrings.java:39:20:39:26 | taint(...) | TestStrings.java:60:14:60:58 | join(...) |
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import java
|
||||
import semmle.code.java.dataflow.TaintTracking
|
||||
import TestUtilities.InlineExpectationsTest
|
||||
|
||||
class Conf extends TaintTracking::Configuration {
|
||||
Conf() { this = "qltest:frameworks:guava" }
|
||||
@@ -13,6 +14,18 @@ class Conf extends TaintTracking::Configuration {
|
||||
}
|
||||
}
|
||||
|
||||
from DataFlow::Node src, DataFlow::Node sink, Conf conf
|
||||
where conf.hasFlow(src, sink)
|
||||
select src, sink
|
||||
class HasFlowTest extends InlineExpectationsTest {
|
||||
HasFlowTest() { this = "HasFlowTest" }
|
||||
|
||||
override string getARelevantTag() { result = "numTaintFlow" }
|
||||
|
||||
override predicate hasActualResult(Location location, string element, string tag, string value) {
|
||||
tag = "numTaintFlow" and
|
||||
exists(DataFlow::Node src, DataFlow::Node sink, Conf conf, int num | conf.hasFlow(src, sink) |
|
||||
value = num.toString() and
|
||||
sink.getLocation() = location and
|
||||
element = sink.toString() and
|
||||
num = strictcount(DataFlow::Node src2 | conf.hasFlow(src2, sink))
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
/*
|
||||
* Copyright (C) 2007 The Guava Authors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software distributed under the License
|
||||
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
||||
* or implied. See the License for the specific language governing permissions and limitations under
|
||||
* the License.
|
||||
*/
|
||||
|
||||
package com.google.common.base;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
public interface Function<F, T> extends java.util.function.Function<F, T> {
|
||||
@Override
|
||||
T apply(@Nullable F input);
|
||||
|
||||
@Override
|
||||
boolean equals(@Nullable Object object);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,77 @@
|
||||
/*
|
||||
* Copyright (C) 2011 The Guava Authors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software distributed under the License
|
||||
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
||||
* or implied. See the License for the specific language governing permissions and limitations under
|
||||
* the License.
|
||||
*/
|
||||
|
||||
package com.google.common.base;
|
||||
import java.io.Serializable;
|
||||
import java.util.Set;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
public abstract class Optional<T> implements Serializable {
|
||||
public static <T> Optional<T> absent() {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static <T> Optional<T> of(T reference) {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static <T> Optional<T> fromNullable(@Nullable T nullableReference) {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static <T> @Nullable Optional<T> fromJavaUtil(
|
||||
java.util.Optional<T> javaUtilOptional) {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static <T> java.util.Optional<T> toJavaUtil(
|
||||
@Nullable Optional<T> googleOptional) {
|
||||
return null;
|
||||
}
|
||||
|
||||
public java.util.Optional<T> toJavaUtil() {
|
||||
return null;
|
||||
}
|
||||
|
||||
public abstract boolean isPresent();
|
||||
|
||||
public abstract T get();
|
||||
|
||||
public abstract T or(T defaultValue);
|
||||
|
||||
public abstract Optional<T> or(Optional<? extends T> secondChoice);
|
||||
|
||||
public abstract T or(Supplier<? extends T> supplier);
|
||||
|
||||
public abstract @Nullable T orNull();
|
||||
|
||||
public abstract Set<T> asSet();
|
||||
|
||||
public abstract <V> Optional<V> transform(Function<? super T, V> function);
|
||||
|
||||
@Override
|
||||
public abstract boolean equals(@Nullable Object object);
|
||||
|
||||
@Override
|
||||
public abstract int hashCode();
|
||||
|
||||
@Override
|
||||
public abstract String toString();
|
||||
|
||||
public static <T> Iterable<T> presentInstances(
|
||||
final Iterable<? extends Optional<? extends T>> optionals) {
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
/*
|
||||
* Copyright (C) 2007 The Guava Authors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software distributed under the License
|
||||
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
||||
* or implied. See the License for the specific language governing permissions and limitations under
|
||||
* the License.
|
||||
*/
|
||||
|
||||
package com.google.common.base;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
public interface Predicate<T> extends java.util.function.Predicate<T> {
|
||||
boolean apply(@Nullable T input);
|
||||
|
||||
@Override
|
||||
boolean equals(@Nullable Object object);
|
||||
|
||||
@Override
|
||||
default boolean test(@Nullable T input) {
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
/*
|
||||
* Copyright (C) 2007 The Guava Authors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software distributed under the License
|
||||
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
||||
* or implied. See the License for the specific language governing permissions and limitations under
|
||||
* the License.
|
||||
*/
|
||||
|
||||
package com.google.common.base;
|
||||
|
||||
public interface Supplier<T> extends java.util.function.Supplier<T> {
|
||||
@Override
|
||||
T get();
|
||||
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
/*
|
||||
* Copyright (C) 2014 The Guava Authors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.google.common.graph;
|
||||
|
||||
public interface SuccessorsFunction<N> {
|
||||
Iterable<? extends N> successors(N node);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
/*
|
||||
* Copyright (C) 2017 The Guava Authors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.google.common.graph;
|
||||
|
||||
public abstract class Traverser<N> {
|
||||
public static <N> Traverser<N> forGraph(final SuccessorsFunction<N> graph) {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static <N> Traverser<N> forTree(final SuccessorsFunction<N> tree) {
|
||||
return null;
|
||||
}
|
||||
|
||||
public final Iterable<N> breadthFirst(N startNode) {
|
||||
return null;
|
||||
}
|
||||
|
||||
public final Iterable<N> breadthFirst(Iterable<? extends N> startNodes) {
|
||||
return null;
|
||||
}
|
||||
|
||||
public final Iterable<N> depthFirstPreOrder(N startNode) {
|
||||
return null;
|
||||
}
|
||||
|
||||
public final Iterable<N> depthFirstPreOrder(Iterable<? extends N> startNodes) {
|
||||
return null;
|
||||
}
|
||||
|
||||
public final Iterable<N> depthFirstPostOrder(N startNode) {
|
||||
return null;
|
||||
}
|
||||
|
||||
public final Iterable<N> depthFirstPostOrder(Iterable<? extends N> startNodes) {
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
/*
|
||||
* Copyright (C) 2011 The Guava Authors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software distributed under the License
|
||||
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
||||
* or implied. See the License for the specific language governing permissions and limitations under
|
||||
* the License.
|
||||
*/
|
||||
|
||||
package com.google.common.hash;
|
||||
import java.io.Serializable;
|
||||
|
||||
public interface Funnel<T> extends Serializable {
|
||||
void funnel(T from, PrimitiveSink into);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
/*
|
||||
* Copyright (C) 2011 The Guava Authors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software distributed under the License
|
||||
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
||||
* or implied. See the License for the specific language governing permissions and limitations under
|
||||
* the License.
|
||||
*/
|
||||
|
||||
package com.google.common.hash;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
public abstract class HashCode {
|
||||
public abstract int bits();
|
||||
|
||||
public abstract int asInt();
|
||||
|
||||
public abstract long asLong();
|
||||
|
||||
public abstract long padToLong();
|
||||
|
||||
public abstract byte[] asBytes();
|
||||
|
||||
public int writeBytesTo(byte[] dest, int offset, int maxLength) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
public static HashCode fromInt(int hash) {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static HashCode fromLong(long hash) {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static HashCode fromBytes(byte[] bytes) {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static HashCode fromString(String string) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public final boolean equals(@Nullable Object object) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public final int hashCode() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public final String toString() {
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
/*
|
||||
* Copyright (C) 2011 The Guava Authors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software distributed under the License
|
||||
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
||||
* or implied. See the License for the specific language governing permissions and limitations under
|
||||
* the License.
|
||||
*/
|
||||
|
||||
package com.google.common.hash;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.charset.Charset;
|
||||
|
||||
public interface HashFunction {
|
||||
Hasher newHasher();
|
||||
|
||||
Hasher newHasher(int expectedInputSize);
|
||||
|
||||
HashCode hashInt(int input);
|
||||
|
||||
HashCode hashLong(long input);
|
||||
|
||||
HashCode hashBytes(byte[] input);
|
||||
|
||||
HashCode hashBytes(byte[] input, int off, int len);
|
||||
|
||||
HashCode hashBytes(ByteBuffer input);
|
||||
|
||||
HashCode hashUnencodedChars(CharSequence input);
|
||||
|
||||
HashCode hashString(CharSequence input, Charset charset);
|
||||
|
||||
<T> HashCode hashObject(T instance, Funnel<? super T> funnel);
|
||||
|
||||
int bits();
|
||||
|
||||
}
|
||||
@@ -0,0 +1,66 @@
|
||||
/*
|
||||
* Copyright (C) 2011 The Guava Authors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software distributed under the License
|
||||
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
||||
* or implied. See the License for the specific language governing permissions and limitations under
|
||||
* the License.
|
||||
*/
|
||||
|
||||
package com.google.common.hash;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.charset.Charset;
|
||||
|
||||
public interface Hasher extends PrimitiveSink {
|
||||
@Override
|
||||
Hasher putByte(byte b);
|
||||
|
||||
@Override
|
||||
Hasher putBytes(byte[] bytes);
|
||||
|
||||
@Override
|
||||
Hasher putBytes(byte[] bytes, int off, int len);
|
||||
|
||||
@Override
|
||||
Hasher putBytes(ByteBuffer bytes);
|
||||
|
||||
@Override
|
||||
Hasher putShort(short s);
|
||||
|
||||
@Override
|
||||
Hasher putInt(int i);
|
||||
|
||||
@Override
|
||||
Hasher putLong(long l);
|
||||
|
||||
@Override
|
||||
Hasher putFloat(float f);
|
||||
|
||||
@Override
|
||||
Hasher putDouble(double d);
|
||||
|
||||
@Override
|
||||
Hasher putBoolean(boolean b);
|
||||
|
||||
@Override
|
||||
Hasher putChar(char c);
|
||||
|
||||
@Override
|
||||
Hasher putUnencodedChars(CharSequence charSequence);
|
||||
|
||||
@Override
|
||||
Hasher putString(CharSequence charSequence, Charset charset);
|
||||
|
||||
<T> Hasher putObject(T instance, Funnel<? super T> funnel);
|
||||
|
||||
HashCode hash();
|
||||
|
||||
@Override
|
||||
int hashCode();
|
||||
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
/*
|
||||
* Copyright (C) 2011 The Guava Authors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software distributed under the License
|
||||
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
||||
* or implied. See the License for the specific language governing permissions and limitations under
|
||||
* the License.
|
||||
*/
|
||||
|
||||
package com.google.common.hash;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.charset.Charset;
|
||||
|
||||
public interface PrimitiveSink {
|
||||
PrimitiveSink putByte(byte b);
|
||||
|
||||
PrimitiveSink putBytes(byte[] bytes);
|
||||
|
||||
PrimitiveSink putBytes(byte[] bytes, int off, int len);
|
||||
|
||||
PrimitiveSink putBytes(ByteBuffer bytes);
|
||||
|
||||
PrimitiveSink putShort(short s);
|
||||
|
||||
PrimitiveSink putInt(int i);
|
||||
|
||||
PrimitiveSink putLong(long l);
|
||||
|
||||
PrimitiveSink putFloat(float f);
|
||||
|
||||
PrimitiveSink putDouble(double d);
|
||||
|
||||
PrimitiveSink putBoolean(boolean b);
|
||||
|
||||
PrimitiveSink putChar(char c);
|
||||
|
||||
PrimitiveSink putUnencodedChars(CharSequence charSequence);
|
||||
|
||||
PrimitiveSink putString(CharSequence charSequence, Charset charset);
|
||||
|
||||
}
|
||||
@@ -0,0 +1,81 @@
|
||||
/*
|
||||
* Copyright (C) 2012 The Guava Authors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software distributed under the License
|
||||
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
||||
* or implied. See the License for the specific language governing permissions and limitations under
|
||||
* the License.
|
||||
*/
|
||||
|
||||
package com.google.common.io;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.io.Reader;
|
||||
import java.io.Writer;
|
||||
|
||||
public abstract class BaseEncoding {
|
||||
public static final class DecodingException extends IOException {
|
||||
}
|
||||
public String encode(byte[] bytes) {
|
||||
return null;
|
||||
}
|
||||
|
||||
public final String encode(byte[] bytes, int off, int len) {
|
||||
return null;
|
||||
}
|
||||
|
||||
public abstract OutputStream encodingStream(Writer writer);
|
||||
|
||||
public final ByteSink encodingSink(final CharSink encodedSink) {
|
||||
return null;
|
||||
}
|
||||
|
||||
public abstract boolean canDecode(CharSequence chars);
|
||||
|
||||
public final byte[] decode(CharSequence chars) {
|
||||
return null;
|
||||
}
|
||||
|
||||
public abstract InputStream decodingStream(Reader reader);
|
||||
|
||||
public final ByteSource decodingSource(final CharSource encodedSource) {
|
||||
return null;
|
||||
}
|
||||
|
||||
public abstract BaseEncoding omitPadding();
|
||||
|
||||
public abstract BaseEncoding withPadChar(char padChar);
|
||||
|
||||
public abstract BaseEncoding withSeparator(String separator, int n);
|
||||
|
||||
public abstract BaseEncoding upperCase();
|
||||
|
||||
public abstract BaseEncoding lowerCase();
|
||||
|
||||
public static BaseEncoding base64() {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static BaseEncoding base64Url() {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static BaseEncoding base32() {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static BaseEncoding base32Hex() {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static BaseEncoding base16() {
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
/*
|
||||
* Copyright (C) 2009 The Guava Authors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software distributed under the License
|
||||
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
||||
* or implied. See the License for the specific language governing permissions and limitations under
|
||||
* the License.
|
||||
*/
|
||||
|
||||
package com.google.common.io;
|
||||
import java.io.DataInput;
|
||||
|
||||
public interface ByteArrayDataInput extends DataInput {
|
||||
@Override
|
||||
void readFully(byte b[]);
|
||||
|
||||
@Override
|
||||
void readFully(byte b[], int off, int len);
|
||||
|
||||
@Override
|
||||
int skipBytes(int n);
|
||||
|
||||
@Override
|
||||
boolean readBoolean();
|
||||
|
||||
@Override
|
||||
byte readByte();
|
||||
|
||||
@Override
|
||||
int readUnsignedByte();
|
||||
|
||||
@Override
|
||||
short readShort();
|
||||
|
||||
@Override
|
||||
int readUnsignedShort();
|
||||
|
||||
@Override
|
||||
char readChar();
|
||||
|
||||
@Override
|
||||
int readInt();
|
||||
|
||||
@Override
|
||||
long readLong();
|
||||
|
||||
@Override
|
||||
float readFloat();
|
||||
|
||||
@Override
|
||||
double readDouble();
|
||||
|
||||
@Override
|
||||
String readLine();
|
||||
|
||||
@Override
|
||||
String readUTF();
|
||||
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
/*
|
||||
* Copyright (C) 2009 The Guava Authors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software distributed under the License
|
||||
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
||||
* or implied. See the License for the specific language governing permissions and limitations under
|
||||
* the License.
|
||||
*/
|
||||
|
||||
package com.google.common.io;
|
||||
import java.io.DataOutput;
|
||||
|
||||
public interface ByteArrayDataOutput extends DataOutput {
|
||||
@Override
|
||||
void write(int b);
|
||||
|
||||
@Override
|
||||
void write(byte b[]);
|
||||
|
||||
@Override
|
||||
void write(byte b[], int off, int len);
|
||||
|
||||
@Override
|
||||
void writeBoolean(boolean v);
|
||||
|
||||
@Override
|
||||
void writeByte(int v);
|
||||
|
||||
@Override
|
||||
void writeShort(int v);
|
||||
|
||||
@Override
|
||||
void writeChar(int v);
|
||||
|
||||
@Override
|
||||
void writeInt(int v);
|
||||
|
||||
@Override
|
||||
void writeLong(long v);
|
||||
|
||||
@Override
|
||||
void writeFloat(float v);
|
||||
|
||||
@Override
|
||||
void writeDouble(double v);
|
||||
|
||||
@Override
|
||||
void writeChars(String s);
|
||||
|
||||
@Override
|
||||
void writeUTF(String s);
|
||||
|
||||
@Override
|
||||
void writeBytes(String s);
|
||||
|
||||
byte[] toByteArray();
|
||||
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
/*
|
||||
* Copyright (C) 2009 The Guava Authors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software distributed under the License
|
||||
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
||||
* or implied. See the License for the specific language governing permissions and limitations under
|
||||
* the License.
|
||||
*/
|
||||
|
||||
package com.google.common.io;
|
||||
import java.io.IOException;
|
||||
|
||||
public interface ByteProcessor<T> {
|
||||
boolean processBytes(byte[] buf, int off, int len) throws IOException;
|
||||
|
||||
T getResult();
|
||||
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
/*
|
||||
* Copyright (C) 2012 The Guava Authors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software distributed under the License
|
||||
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
||||
* or implied. See the License for the specific language governing permissions and limitations under
|
||||
* the License.
|
||||
*/
|
||||
|
||||
package com.google.common.io;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.nio.charset.Charset;
|
||||
|
||||
public abstract class ByteSink {
|
||||
public CharSink asCharSink(Charset charset) {
|
||||
return null;
|
||||
}
|
||||
|
||||
public abstract OutputStream openStream() throws IOException;
|
||||
|
||||
public OutputStream openBufferedStream() throws IOException {
|
||||
return null;
|
||||
}
|
||||
|
||||
public void write(byte[] bytes) throws IOException {
|
||||
}
|
||||
|
||||
public long writeFrom(InputStream input) throws IOException {
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,96 @@
|
||||
/*
|
||||
* Copyright (C) 2012 The Guava Authors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software distributed under the License
|
||||
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
||||
* or implied. See the License for the specific language governing permissions and limitations under
|
||||
* the License.
|
||||
*/
|
||||
|
||||
package com.google.common.io;
|
||||
import com.google.common.base.Optional;
|
||||
import com.google.common.hash.HashCode;
|
||||
import com.google.common.hash.HashFunction;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.nio.charset.Charset;
|
||||
import java.util.Iterator;
|
||||
|
||||
public abstract class ByteSource {
|
||||
public CharSource asCharSource(Charset charset) {
|
||||
return null;
|
||||
}
|
||||
|
||||
public abstract InputStream openStream() throws IOException;
|
||||
|
||||
public InputStream openBufferedStream() throws IOException {
|
||||
return null;
|
||||
}
|
||||
|
||||
public ByteSource slice(long offset, long length) {
|
||||
return null;
|
||||
}
|
||||
|
||||
public boolean isEmpty() throws IOException {
|
||||
return false;
|
||||
}
|
||||
|
||||
public Optional<Long> sizeIfKnown() {
|
||||
return null;
|
||||
}
|
||||
|
||||
public long size() throws IOException {
|
||||
return 0;
|
||||
}
|
||||
|
||||
public long copyTo(OutputStream output) throws IOException {
|
||||
return 0;
|
||||
}
|
||||
|
||||
public long copyTo(ByteSink sink) throws IOException {
|
||||
return 0;
|
||||
}
|
||||
|
||||
public byte[] read() throws IOException {
|
||||
return null;
|
||||
}
|
||||
|
||||
public <T> T read(ByteProcessor<T> processor) throws IOException {
|
||||
return null;
|
||||
}
|
||||
|
||||
public HashCode hash(HashFunction hashFunction) throws IOException {
|
||||
return null;
|
||||
}
|
||||
|
||||
public boolean contentEquals(ByteSource other) throws IOException {
|
||||
return false;
|
||||
}
|
||||
|
||||
public static ByteSource concat(Iterable<? extends ByteSource> sources) {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static ByteSource concat(Iterator<? extends ByteSource> sources) {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static ByteSource concat(ByteSource... sources) {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static ByteSource wrap(byte[] b) {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static ByteSource empty() {
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,90 @@
|
||||
/*
|
||||
* Copyright (C) 2007 The Guava Authors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software distributed under the License
|
||||
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
||||
* or implied. See the License for the specific language governing permissions and limitations under
|
||||
* the License.
|
||||
*/
|
||||
|
||||
package com.google.common.io;
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.nio.channels.ReadableByteChannel;
|
||||
import java.nio.channels.WritableByteChannel;
|
||||
|
||||
public final class ByteStreams {
|
||||
public static long copy(InputStream from, OutputStream to) throws IOException {
|
||||
return 0;
|
||||
}
|
||||
|
||||
public static long copy(ReadableByteChannel from, WritableByteChannel to) throws IOException {
|
||||
return 0;
|
||||
}
|
||||
|
||||
public static byte[] toByteArray(InputStream in) throws IOException {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static long exhaust(InputStream in) throws IOException {
|
||||
return 0;
|
||||
}
|
||||
|
||||
public static ByteArrayDataInput newDataInput(byte[] bytes) {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static ByteArrayDataInput newDataInput(byte[] bytes, int start) {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static ByteArrayDataInput newDataInput(ByteArrayInputStream byteArrayInputStream) {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static ByteArrayDataOutput newDataOutput() {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static ByteArrayDataOutput newDataOutput(int size) {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static ByteArrayDataOutput newDataOutput(ByteArrayOutputStream byteArrayOutputStream) {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static OutputStream nullOutputStream() {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static InputStream limit(InputStream in, long limit) {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static void readFully(InputStream in, byte[] b) throws IOException {
|
||||
}
|
||||
|
||||
public static void readFully(InputStream in, byte[] b, int off, int len) throws IOException {
|
||||
}
|
||||
|
||||
public static void skipFully(InputStream in, long n) throws IOException {
|
||||
}
|
||||
|
||||
public static <T> T readBytes(InputStream input, ByteProcessor<T> processor) throws IOException {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static int read(InputStream in, byte[] b, int off, int len) throws IOException {
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
/*
|
||||
* Copyright (C) 2012 The Guava Authors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software distributed under the License
|
||||
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
||||
* or implied. See the License for the specific language governing permissions and limitations under
|
||||
* the License.
|
||||
*/
|
||||
|
||||
package com.google.common.io;
|
||||
import java.io.IOException;
|
||||
import java.io.Writer;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
public abstract class CharSink {
|
||||
public abstract Writer openStream() throws IOException;
|
||||
|
||||
public Writer openBufferedStream() throws IOException {
|
||||
return null;
|
||||
}
|
||||
|
||||
public void write(CharSequence charSequence) throws IOException {
|
||||
}
|
||||
|
||||
public void writeLines(Iterable<? extends CharSequence> lines) throws IOException {
|
||||
}
|
||||
|
||||
public void writeLines(Iterable<? extends CharSequence> lines, String lineSeparator)
|
||||
throws IOException {
|
||||
}
|
||||
|
||||
public void writeLines(Stream<? extends CharSequence> lines) throws IOException {
|
||||
}
|
||||
|
||||
public void writeLines(Stream<? extends CharSequence> lines, String lineSeparator)
|
||||
throws IOException {
|
||||
}
|
||||
|
||||
public long writeFrom(Readable readable) throws IOException {
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,101 @@
|
||||
/*
|
||||
* Copyright (C) 2012 The Guava Authors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software distributed under the License
|
||||
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
||||
* or implied. See the License for the specific language governing permissions and limitations under
|
||||
* the License.
|
||||
*/
|
||||
|
||||
package com.google.common.io;
|
||||
import com.google.common.base.Optional;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.Reader;
|
||||
import java.nio.charset.Charset;
|
||||
import java.util.Iterator;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.stream.Stream;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
public abstract class CharSource {
|
||||
public ByteSource asByteSource(Charset charset) {
|
||||
return null;
|
||||
}
|
||||
|
||||
public abstract Reader openStream() throws IOException;
|
||||
|
||||
public BufferedReader openBufferedStream() throws IOException {
|
||||
return null;
|
||||
}
|
||||
|
||||
public Stream<String> lines() throws IOException {
|
||||
return null;
|
||||
}
|
||||
|
||||
public Optional<Long> lengthIfKnown() {
|
||||
return null;
|
||||
}
|
||||
|
||||
public long length() throws IOException {
|
||||
return 0;
|
||||
}
|
||||
|
||||
public long copyTo(Appendable appendable) throws IOException {
|
||||
return 0;
|
||||
}
|
||||
|
||||
public long copyTo(CharSink sink) throws IOException {
|
||||
return 0;
|
||||
}
|
||||
|
||||
public String read() throws IOException {
|
||||
return null;
|
||||
}
|
||||
|
||||
public @Nullable String readFirstLine() throws IOException {
|
||||
return null;
|
||||
}
|
||||
|
||||
public ImmutableList<String> readLines() throws IOException {
|
||||
return null;
|
||||
}
|
||||
|
||||
public <T> T readLines(LineProcessor<T> processor) throws IOException {
|
||||
return null;
|
||||
}
|
||||
|
||||
public void forEachLine(Consumer<? super String> action) throws IOException {
|
||||
}
|
||||
|
||||
public boolean isEmpty() throws IOException {
|
||||
return false;
|
||||
}
|
||||
|
||||
public static CharSource concat(Iterable<? extends CharSource> sources) {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static CharSource concat(Iterator<? extends CharSource> sources) {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static CharSource concat(CharSource... sources) {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static CharSource wrap(CharSequence charSequence) {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static CharSource empty() {
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
/*
|
||||
* Copyright (C) 2007 The Guava Authors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software distributed under the License
|
||||
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
||||
* or implied. See the License for the specific language governing permissions and limitations under
|
||||
* the License.
|
||||
*/
|
||||
|
||||
package com.google.common.io;
|
||||
import java.io.IOException;
|
||||
import java.io.Reader;
|
||||
import java.io.Writer;
|
||||
import java.util.List;
|
||||
|
||||
public final class CharStreams {
|
||||
public static long copy(Readable from, Appendable to) throws IOException {
|
||||
return 0;
|
||||
}
|
||||
|
||||
public static String toString(Readable r) throws IOException {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static List<String> readLines(Readable r) throws IOException {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static <T> T readLines(Readable readable, LineProcessor<T> processor) throws IOException {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static long exhaust(Readable readable) throws IOException {
|
||||
return 0;
|
||||
}
|
||||
|
||||
public static void skipFully(Reader reader, long n) throws IOException {
|
||||
}
|
||||
|
||||
public static Writer nullWriter() {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static Writer asWriter(Appendable target) {
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
/*
|
||||
* Copyright (C) 2012 The Guava Authors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software distributed under the License
|
||||
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
||||
* or implied. See the License for the specific language governing permissions and limitations under
|
||||
* the License.
|
||||
*/
|
||||
|
||||
package com.google.common.io;
|
||||
import java.io.Closeable;
|
||||
import java.io.IOException;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
|
||||
public final class Closer implements Closeable {
|
||||
public static Closer create() {
|
||||
return null;
|
||||
}
|
||||
|
||||
public <C extends Closeable> C register(@Nullable C closeable) {
|
||||
return null;
|
||||
}
|
||||
|
||||
public RuntimeException rethrow(Throwable e) throws IOException {
|
||||
return null;
|
||||
}
|
||||
|
||||
public <X extends Exception> RuntimeException rethrow(Throwable e, Class<X> declaredType)
|
||||
throws IOException, X {
|
||||
return null;
|
||||
}
|
||||
|
||||
public <X1 extends Exception, X2 extends Exception> RuntimeException rethrow(
|
||||
Throwable e, Class<X1> declaredType1, Class<X2> declaredType2) throws IOException, X1, X2 {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() throws IOException {
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
/*
|
||||
* Copyright (C) 2007 The Guava Authors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software distributed under the License
|
||||
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
||||
* or implied. See the License for the specific language governing permissions and limitations under
|
||||
* the License.
|
||||
*/
|
||||
|
||||
package com.google.common.io;
|
||||
import java.io.FilterInputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
|
||||
public final class CountingInputStream extends FilterInputStream {
|
||||
public CountingInputStream(InputStream in) {
|
||||
super(in);
|
||||
}
|
||||
|
||||
public long getCount() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int read() throws IOException {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int read(byte[] b, int off, int len) throws IOException {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long skip(long n) throws IOException {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized void mark(int readlimit) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized void reset() throws IOException {
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
/*
|
||||
* Copyright (C) 2012 The Guava Authors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software distributed under the License
|
||||
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
||||
* or implied. See the License for the specific language governing permissions and limitations under
|
||||
* the License.
|
||||
*/
|
||||
|
||||
package com.google.common.io;
|
||||
|
||||
public enum FileWriteMode {
|
||||
}
|
||||
131
java/ql/test/stubs/guava-30.0/com/google/common/io/Files.java
Normal file
131
java/ql/test/stubs/guava-30.0/com/google/common/io/Files.java
Normal file
@@ -0,0 +1,131 @@
|
||||
/*
|
||||
* Copyright (C) 2007 The Guava Authors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software distributed under the License
|
||||
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
||||
* or implied. See the License for the specific language governing permissions and limitations under
|
||||
* the License.
|
||||
*/
|
||||
|
||||
package com.google.common.io;
|
||||
import com.google.common.base.Predicate;
|
||||
import com.google.common.graph.Traverser;
|
||||
import java.io.BufferedReader;
|
||||
import java.io.BufferedWriter;
|
||||
import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
import java.nio.MappedByteBuffer;
|
||||
import java.nio.channels.FileChannel.MapMode;
|
||||
import java.nio.charset.Charset;
|
||||
import java.util.List;
|
||||
|
||||
public final class Files {
|
||||
public static BufferedReader newReader(File file, Charset charset) throws FileNotFoundException {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static BufferedWriter newWriter(File file, Charset charset) throws FileNotFoundException {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static ByteSource asByteSource(File file) {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static ByteSink asByteSink(File file, FileWriteMode... modes) {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static CharSource asCharSource(File file, Charset charset) {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static CharSink asCharSink(File file, Charset charset, FileWriteMode... modes) {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static byte[] toByteArray(File file) throws IOException {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static String toString(File file, Charset charset) throws IOException {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static void write(byte[] from, File to) throws IOException {
|
||||
}
|
||||
|
||||
public static void write(CharSequence from, File to, Charset charset) throws IOException {
|
||||
}
|
||||
|
||||
public static void copy(File from, OutputStream to) throws IOException {
|
||||
}
|
||||
|
||||
public static void copy(File from, File to) throws IOException {
|
||||
}
|
||||
|
||||
public static boolean equal(File file1, File file2) throws IOException {
|
||||
return false;
|
||||
}
|
||||
|
||||
public static File createTempDir() {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static void touch(File file) throws IOException {
|
||||
}
|
||||
|
||||
public static void createParentDirs(File file) throws IOException {
|
||||
}
|
||||
|
||||
public static void move(File from, File to) throws IOException {
|
||||
}
|
||||
|
||||
public static List<String> readLines(File file, Charset charset) throws IOException {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static MappedByteBuffer map(File file) throws IOException {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static MappedByteBuffer map(File file, MapMode mode) throws IOException {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static MappedByteBuffer map(File file, MapMode mode, long size) throws IOException {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static String simplifyPath(String pathname) {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static String getFileExtension(String fullName) {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static String getNameWithoutExtension(String file) {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static Traverser<File> fileTraverser() {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static Predicate<File> isDirectory() {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static Predicate<File> isFile() {
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
/*
|
||||
* Copyright (C) 2009 The Guava Authors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software distributed under the License
|
||||
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
||||
* or implied. See the License for the specific language governing permissions and limitations under
|
||||
* the License.
|
||||
*/
|
||||
|
||||
package com.google.common.io;
|
||||
import java.io.IOException;
|
||||
|
||||
public interface LineProcessor<T> {
|
||||
boolean processLine(String line) throws IOException;
|
||||
|
||||
T getResult();
|
||||
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
/*
|
||||
* Copyright (C) 2007 The Guava Authors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software distributed under the License
|
||||
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
||||
* or implied. See the License for the specific language governing permissions and limitations under
|
||||
* the License.
|
||||
*/
|
||||
|
||||
package com.google.common.io;
|
||||
import java.io.IOException;
|
||||
|
||||
public final class LineReader {
|
||||
public LineReader(Readable readable) {
|
||||
}
|
||||
|
||||
public String readLine() throws IOException {
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,99 @@
|
||||
/*
|
||||
* Copyright (C) 2007 The Guava Authors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
|
||||
* in compliance with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software distributed under the License
|
||||
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
||||
* or implied. See the License for the specific language governing permissions and limitations under
|
||||
* the License.
|
||||
*/
|
||||
|
||||
package com.google.common.io;
|
||||
import java.io.DataInput;
|
||||
import java.io.FilterInputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
|
||||
public final class LittleEndianDataInputStream extends FilterInputStream implements DataInput {
|
||||
public LittleEndianDataInputStream(InputStream in) {
|
||||
super(in);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String readLine() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void readFully(byte[] b) throws IOException {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void readFully(byte[] b, int off, int len) throws IOException {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int skipBytes(int n) throws IOException {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int readUnsignedByte() throws IOException {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int readUnsignedShort() throws IOException {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int readInt() throws IOException {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long readLong() throws IOException {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float readFloat() throws IOException {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public double readDouble() throws IOException {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String readUTF() throws IOException {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public short readShort() throws IOException {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public char readChar() throws IOException {
|
||||
return '0';
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte readByte() throws IOException {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean readBoolean() throws IOException {
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,88 @@
|
||||
/*
|
||||
* Copyright (C) 2013 The Guava Authors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.google.common.io;
|
||||
import com.google.common.base.Predicate;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.graph.Traverser;
|
||||
import java.io.IOException;
|
||||
import java.nio.charset.Charset;
|
||||
import java.nio.file.LinkOption;
|
||||
import java.nio.file.OpenOption;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.attribute.FileAttribute;
|
||||
|
||||
public final class MoreFiles {
|
||||
public static ByteSource asByteSource(Path path, OpenOption... options) {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static ByteSink asByteSink(Path path, OpenOption... options) {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static CharSource asCharSource(Path path, Charset charset, OpenOption... options) {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static CharSink asCharSink(Path path, Charset charset, OpenOption... options) {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static ImmutableList<Path> listFiles(Path dir) throws IOException {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static Traverser<Path> fileTraverser() {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static Predicate<Path> isDirectory(LinkOption... options) {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static Predicate<Path> isRegularFile(LinkOption... options) {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static boolean equal(Path path1, Path path2) throws IOException {
|
||||
return false;
|
||||
}
|
||||
|
||||
public static void touch(Path path) throws IOException {
|
||||
}
|
||||
|
||||
public static void createParentDirectories(Path path, FileAttribute<?>... attrs)
|
||||
throws IOException {
|
||||
}
|
||||
|
||||
public static String getFileExtension(Path path) {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static String getNameWithoutExtension(Path path) {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static void deleteRecursively(Path path, RecursiveDeleteOption... options)
|
||||
throws IOException {
|
||||
}
|
||||
|
||||
public static void deleteDirectoryContents(Path path, RecursiveDeleteOption... options)
|
||||
throws IOException {
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
/*
|
||||
* Copyright (C) 2014 The Guava Authors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.google.common.io;
|
||||
|
||||
public enum RecursiveDeleteOption {
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
package org.checkerframework.checker.nullness.qual;
|
||||
public @interface Nullable {}
|
||||
Reference in New Issue
Block a user