Skip to content

Commit f8f9a9f

Browse files
committed
C++: Add tests with missing flow sources.
1 parent cd7bb54 commit f8f9a9f

File tree

1 file changed

+156
-0
lines changed
  • cpp/ql/test/library-tests/dataflow/external-models

1 file changed

+156
-0
lines changed

cpp/ql/test/library-tests/dataflow/external-models/windows.cpp

Lines changed: 156 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -734,4 +734,160 @@ void test_winhttp_crack_url() {
734734
sink(urlComponents.lpszExtraInfo);
735735
sink(*urlComponents.lpszExtraInfo); // $ ir
736736
}
737+
}
738+
739+
using HTTP_REQUEST_ID = ULONGLONG;
740+
using HTTP_CONNECTION_ID = ULONGLONG;
741+
using HTTP_URL_CONTEXT = ULONGLONG;
742+
using HTTP_RAW_CONNECTION_ID = ULONGLONG;
743+
744+
typedef struct _HTTP_VERSION {
745+
USHORT MajorVersion;
746+
USHORT MinorVersion;
747+
} HTTP_VERSION, *PHTTP_VERSION;
748+
749+
typedef enum _HTTP_VERB {
750+
HttpVerbUnparsed = 0
751+
} HTTP_VERB, *PHTTP_VERB;
752+
753+
typedef struct _HTTP_COOKED_URL {
754+
USHORT FullUrlLength;
755+
USHORT HostLength;
756+
USHORT AbsPathLength;
757+
USHORT QueryStringLength;
758+
PCWSTR pFullUrl;
759+
PCWSTR pHost;
760+
PCWSTR pAbsPath;
761+
PCWSTR pQueryString;
762+
} HTTP_COOKED_URL, *PHTTP_COOKED_URL;
763+
764+
typedef struct _HTTP_TRANSPORT_ADDRESS {
765+
struct sockaddr* pRemoteAddress;
766+
struct sockaddr* pLocalAddress;
767+
} HTTP_TRANSPORT_ADDRESS, *PHTTP_TRANSPORT_ADDRESS;
768+
769+
typedef struct _HTTP_KNOWN_HEADER {
770+
USHORT RawValueLength;
771+
PCSTR pRawValue;
772+
} HTTP_KNOWN_HEADER, *PHTTP_KNOWN_HEADER;
773+
774+
typedef struct _HTTP_UNKNOWN_HEADER {
775+
USHORT NameLength;
776+
USHORT RawValueLength;
777+
PCSTR pName;
778+
PCSTR pRawValue;
779+
} HTTP_UNKNOWN_HEADER, *PHTTP_UNKNOWN_HEADER;
780+
781+
typedef struct _HTTP_REQUEST_HEADERS {
782+
USHORT UnknownHeaderCount;
783+
PHTTP_UNKNOWN_HEADER pUnknownHeaders;
784+
USHORT TrailerCount;
785+
PHTTP_UNKNOWN_HEADER pTrailers;
786+
HTTP_KNOWN_HEADER KnownHeaders[41];
787+
} HTTP_REQUEST_HEADERS, *PHTTP_REQUEST_HEADERS;
788+
789+
typedef struct _HTTP_DATA_CHUNK {
790+
int DataChunkType;
791+
union {
792+
struct {
793+
PVOID pBuffer;
794+
ULONG BufferLength;
795+
} FromMemory;
796+
};
797+
} HTTP_DATA_CHUNK, *PHTTP_DATA_CHUNK;
798+
799+
typedef struct _HTTP_SSL_CLIENT_CERT_INFO {
800+
ULONG CertFlags;
801+
ULONG CertEncodedSize;
802+
char* pCertEncoded;
803+
HANDLE Token;
804+
BOOL CertDeniedByMapper;
805+
} HTTP_SSL_CLIENT_CERT_INFO, *PHTTP_SSL_CLIENT_CERT_INFO;
806+
807+
typedef struct _HTTP_SSL_INFO {
808+
USHORT ServerCertKeySize;
809+
USHORT ConnectionKeySize;
810+
ULONG ServerCertIssuerSize;
811+
ULONG ServerCertSubjectSize;
812+
PCSTR pServerCertIssuer;
813+
PCSTR pServerCertSubject;
814+
PHTTP_SSL_CLIENT_CERT_INFO pClientCertInfo;
815+
ULONG SslClientCertNegotiated;
816+
} HTTP_SSL_INFO, *PHTTP_SSL_INFO;
817+
818+
typedef struct _HTTP_REQUEST {
819+
ULONG Flags;
820+
HTTP_CONNECTION_ID ConnectionId;
821+
HTTP_REQUEST_ID RequestId;
822+
HTTP_URL_CONTEXT UrlContext;
823+
HTTP_VERSION Version;
824+
HTTP_VERB Verb;
825+
USHORT UnknownVerbLength;
826+
USHORT RawUrlLength;
827+
PCSTR pUnknownVerb;
828+
PCSTR pRawUrl;
829+
HTTP_COOKED_URL CookedUrl;
830+
HTTP_TRANSPORT_ADDRESS Address;
831+
HTTP_REQUEST_HEADERS Headers;
832+
ULONGLONG BytesReceived;
833+
USHORT EntityChunkCount;
834+
PHTTP_DATA_CHUNK pEntityChunks;
835+
HTTP_RAW_CONNECTION_ID RawConnectionId;
836+
PHTTP_SSL_INFO pSslInfo;
837+
} HTTP_REQUEST, *PHTTP_REQUEST;
838+
839+
ULONG HttpReceiveHttpRequest(
840+
HANDLE RequestQueueHandle,
841+
HTTP_REQUEST_ID RequestId,
842+
ULONG Flags,
843+
PHTTP_REQUEST RequestBuffer,
844+
ULONG RequestBufferLength,
845+
PULONG BytesReturned,
846+
LPOVERLAPPED Overlapped
847+
);
848+
849+
ULONG HttpReceiveRequestEntityBody(
850+
HANDLE RequestQueueHandle,
851+
HTTP_REQUEST_ID RequestId,
852+
ULONG Flags,
853+
PVOID EntityBuffer,
854+
ULONG EntityBufferLength,
855+
PULONG BytesReturned,
856+
LPOVERLAPPED Overlapped
857+
);
858+
859+
ULONG HttpReceiveClientCertificate(
860+
HANDLE RequestQueueHandle,
861+
HTTP_CONNECTION_ID ConnectionId,
862+
ULONG Flags,
863+
PHTTP_SSL_CLIENT_CERT_INFO SslClientCertInfo,
864+
ULONG SslClientCertInfoSize,
865+
PULONG BytesReceived,
866+
LPOVERLAPPED Overlapped
867+
);
868+
869+
void test_http_server_api(HANDLE hRequestQueue) {
870+
{
871+
HTTP_REQUEST requestBuffer;
872+
ULONG bytesReturned;
873+
ULONG result = HttpReceiveHttpRequest(hRequestQueue, 0, 0, &requestBuffer, sizeof(requestBuffer), &bytesReturned, nullptr);
874+
char* p = reinterpret_cast<char*>(&requestBuffer);
875+
sink(p);
876+
sink(*p); // $ MISSING: ir
877+
}
878+
{
879+
char buffer[1024];
880+
ULONG bytesReturned;
881+
ULONG result = HttpReceiveRequestEntityBody(hRequestQueue, 0, 0, buffer, sizeof(buffer), &bytesReturned, nullptr);
882+
sink(buffer);
883+
sink(*buffer); // $ MISSING: ir
884+
}
885+
{
886+
HTTP_SSL_CLIENT_CERT_INFO certInfo;
887+
ULONG bytesReceived;
888+
ULONG result = HttpReceiveClientCertificate(hRequestQueue, 0, 0, &certInfo, sizeof(certInfo), &bytesReceived, nullptr);
889+
char* p = reinterpret_cast<char*>(&certInfo);
890+
sink(p);
891+
sink(*p); // $ MISSING: ir
892+
}
737893
}

0 commit comments

Comments
 (0)