TaintManager.h revision 14d83810b14a558b4d3671c75b6d0f5608898d9e
1ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch//== TaintManager.h - Managing taint --------------------------- -*- C++ -*--=//
2ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch//
3ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch//                     The LLVM Compiler Infrastructure
4ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch//
5ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch// This file is distributed under the University of Illinois Open Source
6ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch// License. See LICENSE.TXT for details.
7ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch//
8ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch//===----------------------------------------------------------------------===//
9ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch//
10ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch//  This file provides APIs for adding, removing, querying symbol taint.
11ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch//
12ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch//===----------------------------------------------------------------------===//
13ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
14ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#ifndef LLVM_CLANG_TAINTMANAGER_H
15ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#define LLVM_CLANG_TAINTMANAGER_H
16ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
17ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "clang/StaticAnalyzer/Core/PathSensitive/TaintTag.h"
18ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
19ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochnamespace clang {
20ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochnamespace ento {
21ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
22ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch/// The GDM component containing the tainted root symbols. We lazily infer the
23ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch/// taint of the dependent symbols. Currently, this is a map from a symbol to
24ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch/// tag kind. TODO: Should support multiple tag kinds.
25ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochstruct TaintMap {};
26ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochtypedef llvm::ImmutableMap<SymbolRef, TaintTagType> TaintMapImpl;
27ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochtemplate<> struct ProgramStateTrait<TaintMap>
28ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    :  public ProgramStatePartialTrait<TaintMapImpl> {
29ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  static void *GDMIndex() { static int index = 0; return &index; }
30ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch};
31ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
32ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochclass TaintManager {
33ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
34ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  TaintManager() {}
35ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch};
36ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
37ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch}
38ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch}
39ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
40ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#endif
41ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch