Sha256: dfd3d88b66ab9735ab8da38e0d6c56232f2acb320929fb3d74ef2a7e4c54f425
Contents?: true
Size: 1.66 KB
Versions: 15
Compression:
Stored size: 1.66 KB
Contents
# Copyright (c) 2020 Contrast Security, Inc. See https://www.contrastsecurity.com/enduser-terms-0317a for more details. # frozen_string_literal: true module Contrast module Agent module Assess module Policy module Propagator # Propagation that results in all the tags of the source being # applied to the target. In those cases where overflow occurred, # the overflow is tagged the same as the character which preceded it. # The target's preexisting tags are shifted to account for this. class Next < Contrast::Agent::Assess::Policy::Propagator::Base class << self # String has some silly methods like next. Basically, this flips a # character in a predictable manner def propagate propagation_node, preshift, target source = find_source(propagation_node.sources[0], preshift) target.cs__copy_from(source, 0, propagation_node.untags) # this means the char that was shifted overflowed and created new # chars (i.e 'z' "wraps" to create 'aa' ) unless target.length == source.length target.cs__copy_from(source, 0, propagation_node.untags) first_difference = (0...source.length).find { |i| source[i] != target[i] } || source.length target.cs__properties.tags_at(first_difference).each do |tag| tag.shift_end(target.length - source.length) end end target.cs__properties.cleanup_tags end end end end end end end end
Version data entries
15 entries across 15 versions & 1 rubygems