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