void String::setTaint(bitstring b, CStrRef msg) const { if(m_px) { m_px->setTaint(b); if(is_tainting_metadata(b)){ getTaintedMetadata()->setTaintedOriginal(this); getTaintedMetadata()->setTaintedPlace(msg.toKey()); } } }
void String::setTaint(bitstring b) const { if(m_px) { m_px->setTaint(b); if(is_tainting_metadata(b)){ getTaintedMetadata()->setTaintedOriginal(this); getTaintedMetadata()->setTaintedPlace(); } } }
void StringData::unsetTaint(bitstring b){ m_tainting = m_tainting & (~b); if(is_tainting_metadata(b)){ // erasing the metadata if(m_tainted_metadata != NULL){ delete m_tainted_metadata; m_tainted_metadata = NULL; } } }
void StringData::setTaint(bitstring b){ m_tainting = m_tainting | b; if(is_tainting_metadata(b)){ // resetting the metadata if(m_tainted_metadata != NULL){ delete m_tainted_metadata; m_tainted_metadata = NULL; } m_tainted_metadata = new TaintedMetadata(); } }
Taint& Taint::operator <<(const StringData &src) { bitstring src_bits = src.getTaint(); if (!m_bits) { return *this; } *m_bits = *m_bits | src_bits; if (m_metadata && is_tainting_metadata(src_bits)) { propagateMetaData(src.getTaintedMetadata()); } return *this; }