public void TestMutationalChange() { MutationalChange c = new MutationalChange() { AppendByte = new FromToValue <byte>((byte)'A'), RemoveLength = new FromToValue <ushort>(1), AppendLength = new FromToValue <ushort>(1), }; PatchChange ret = c.Process(0); ret = c.Process(0); ret = c.Process(0); }
public override int Read(byte[] buffer, int offset, int count) { if (count <= 0 || _ReadedAll) { return(0); } int lee; if (Config == null) { // No fuzzing lee = ReadFromOriginal(_Source, buffer, ref offset, count); } else { // Read buffer first lee = ReadBuffer(ref buffer, ref offset, ref count); // Perform mutations (byte peer byte) while (count > 0) { PatchChange log = null; // If no buffer are available (FUZZ!) if (_Buffer.Count == 0) { log = Config.Get(this); } // If change! if (log != null) { // Add to log _Log.Add(log); // Add to buffer if (log.Append != null) { _Buffer.AddRange(log.Append); } // Remove from source if (log.Remove > 0) { int ix = 0; byte[] r = new byte[log.Remove]; int ret = ReadFromOriginal(_Source, r, ref ix, log.Remove); if (ret <= 0) { break; } } } int c = 1; // Read buffer first (if available) int d = ReadBuffer(ref buffer, ref offset, ref c); if (d <= 0) { // Peek one byte if not from buffer d = ReadFromOriginal(_Source, buffer, ref offset, 1); if (d <= 0) { break; } } lee += d; count -= d; } } return(lee); }