mirror of
https://github.com/github/codeql.git
synced 2026-04-30 19:26:02 +02:00
Add some tests; improve buffer models
This commit is contained in:
@@ -12,66 +12,72 @@ extensions:
|
||||
- ["io.netty.buffer", "ByteBuf", True, "discardSomeReadBytes", "()", "", "Argument[-1]", "ReturnValue", "value", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "duplicate", "()", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "ensureWritable", "", "", "Argument[-1]", "ReturnValue", "value", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "getByte", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "getBytes", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "getChar", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "getCharSequence", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "getBytes", "", "", "Argument[-1]", "ReturnValue", "value", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "markReaderIndex", "", "", "Argument[-1]", "ReturnValue", "value", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "markWriterIndex", "", "", "Argument[-1]", "ReturnValue", "value", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "nioBuffer", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "nioBuffers", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "order", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "readBytes", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "readChar", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "readCharSequence", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "readSlice", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "readBytes", "", "", "Argument[-1]", "ReturnValue", "value", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "readerIndex", "(int)", "", "Argument[-1]", "ReturnValue", "value", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "resetReaderIndex", "()", "", "Argument[-1]", "ReturnValue", "value", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "resetWriterIndex", "()", "", "Argument[-1]", "ReturnValue", "value", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "retainedDuplicate", "()", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "retainedSlice", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "setBoolean", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "setByte", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "setBytes", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "setChar", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "setCharSequence", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "setDouble", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "setDoubleLE", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "setFloat", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "setFloatLE", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "setIndex", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "setInt", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "setIntLE", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "setLong", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "setLongLE", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "setMedium", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "setMediumLE", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "setShort", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "setShortLE", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "setBoolean", "", "", "Argument[-1]", "ReturnValue", "value", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "setByte", "", "", "Argument[-1]", "ReturnValue", "value", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "setBytes", "", "", "Argument[-1]", "ReturnValue", "value", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "setChar", "", "", "Argument[-1]", "ReturnValue", "value", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "setCharSequence", "", "", "Argument[-1]", "ReturnValue", "value", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "setDouble", "", "", "Argument[-1]", "ReturnValue", "value", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "setDoubleLE", "", "", "Argument[-1]", "ReturnValue", "value", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "setFloat", "", "", "Argument[-1]", "ReturnValue", "value", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "setFloatLE", "", "", "Argument[-1]", "ReturnValue", "value", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "setIndex", "", "", "Argument[-1]", "ReturnValue", "value", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "setInt", "", "", "Argument[-1]", "ReturnValue", "value", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "setIntLE", "", "", "Argument[-1]", "ReturnValue", "value", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "setLong", "", "", "Argument[-1]", "ReturnValue", "value", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "setLongLE", "", "", "Argument[-1]", "ReturnValue", "value", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "setMedium", "", "", "Argument[-1]", "ReturnValue", "value", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "setMediumLE", "", "", "Argument[-1]", "ReturnValue", "value", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "setShort", "", "", "Argument[-1]", "ReturnValue", "value", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "setShortLE", "", "", "Argument[-1]", "ReturnValue", "value", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "setZero", "", "", "Argument[-1]", "ReturnValue", "value", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "skipBytes", "", "", "Argument[-1]", "ReturnValue", "value", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "slice", "()", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "toString", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "unwrap", "()", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "writeByte", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "writeBytes", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "writeChar", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "writeCharSequence", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "writeDouble", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "writeDoubleLE", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "writeFloat", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "writeFloatLE", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "writeInt", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "writeIntLE", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "writeLong", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "writeLongLE", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "writeMedium", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "writeMediumLE", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "writeShort", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "writeShortLE", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "writeByte", "", "", "Argument[-1]", "ReturnValue", "value", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "writeBytes", "", "", "Argument[-1]", "ReturnValue", "value", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "writeChar", "", "", "Argument[-1]", "ReturnValue", "value", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "writeCharSequence", "", "", "Argument[-1]", "ReturnValue", "value", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "writeDouble", "", "", "Argument[-1]", "ReturnValue", "value", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "writeDoubleLE", "", "", "Argument[-1]", "ReturnValue", "value", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "writeFloat", "", "", "Argument[-1]", "ReturnValue", "value", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "writeFloatLE", "", "", "Argument[-1]", "ReturnValue", "value", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "writeInt", "", "", "Argument[-1]", "ReturnValue", "value", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "writeIntLE", "", "", "Argument[-1]", "ReturnValue", "value", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "writeLong", "", "", "Argument[-1]", "ReturnValue", "value", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "writeLongLE", "", "", "Argument[-1]", "ReturnValue", "value", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "writeMedium", "", "", "Argument[-1]", "ReturnValue", "value", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "writeMediumLE", "", "", "Argument[-1]", "ReturnValue", "value", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "writeShort", "", "", "Argument[-1]", "ReturnValue", "value", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "writeShortLE", "", "", "Argument[-1]", "ReturnValue", "value", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "writeZero", "", "", "Argument[-1]", "ReturnValue", "value", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "writerIndex", "(int)", "", "Argument[-1]", "ReturnValue", "value", "manual"]
|
||||
- ["io.netty.buffer", "ByteBufHolder", True, "copy", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
|
||||
- ["io.netty.buffer", "ByteBufHolder", True, "content", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
|
||||
- ["io.netty.buffer", "ByteBufHolder", True, "duplicate", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
|
||||
- ["io.netty.buffer", "ByteBufHolder", True, "retainedDuplicate", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "getByte", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "getBytes", "", "", "Argument[-1]", "Argument[1]", "taint", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "getChar", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "getCharSequence", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "readByte", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "readBytes", "", "", "Argument[-1]", "Argument[0]", "taint", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "readChar", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "readCharSequence", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "readSlice", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "setByte", "", "", "Argument[1]", "Argument[-1]", "taint", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "setBytes", "", "", "Argument[1]", "Argument[-1]", "taint", "manual"]
|
||||
- ["io.netty.buffer", "ByteBuf", True, "setChar", "", "", "Argument[1]", "Argument[-1]", "taint", "manual"]
|
||||
|
||||
31
java/ql/test/library-tests/frameworks/netty/manual/Test.java
Normal file
31
java/ql/test/library-tests/frameworks/netty/manual/Test.java
Normal file
@@ -0,0 +1,31 @@
|
||||
import io.netty.channel.*;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
// import io.netty.handler.codec.*;
|
||||
// import io.netty.handler.codec.http.*;
|
||||
|
||||
class Test {
|
||||
static <T> T source() { return null; }
|
||||
static void sink(Object s) {}
|
||||
|
||||
class A extends ChannelInboundHandlerAdapter {
|
||||
public void channelRead(ChannelHandlerContext ctx, Object msg) {
|
||||
sink(msg); // $hasTaintFlow
|
||||
}
|
||||
}
|
||||
|
||||
class B extends ChannelInboundHandlerAdapter {
|
||||
public void channelRead(ChannelHandlerContext ctx, Object msg) {
|
||||
ByteBuf bb = (ByteBuf) msg;
|
||||
byte[] data = new byte[1024];
|
||||
bb.readBytes(data);
|
||||
sink(data); // $hasTaintFlow
|
||||
}
|
||||
}
|
||||
|
||||
void test(ByteBuf bb, byte[] x) {
|
||||
byte[] src = source();
|
||||
bb.readBytes(x).setLong(3, 4).readerIndex(2).writeBytes(src).skipBytes(2);
|
||||
sink(bb); // $ hasTaintFlow
|
||||
sink(x);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
//semmle-extractor-options: --javac-args -cp ${testdir}/../../../../stubs/netty-4.1.x
|
||||
11
java/ql/test/library-tests/frameworks/netty/manual/test.ql
Normal file
11
java/ql/test/library-tests/frameworks/netty/manual/test.ql
Normal file
@@ -0,0 +1,11 @@
|
||||
import java
|
||||
import semmle.code.java.dataflow.FlowSources
|
||||
import TestUtilities.InlineFlowTest
|
||||
|
||||
class Conf extends DefaultTaintFlowConf {
|
||||
override predicate isSource(DataFlow::Node node) {
|
||||
super.isSource(node)
|
||||
or
|
||||
node instanceof RemoteFlowSource
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user