| 80 | } |
| 81 | |
| 82 | static size_t insert_part(const u8 *in1, size_t in1_size, const u8 *in2, |
| 83 | size_t in2_size, u8 *out, size_t max_out_size) |
| 84 | { |
| 85 | size_t max_insert_size; |
| 86 | size_t insert_begin; |
| 87 | size_t insert_size; |
| 88 | size_t in2_begin; |
| 89 | |
| 90 | if (in1_size >= max_out_size) |
| 91 | return 0; |
| 92 | if (in1_size == 0 || in2_size == 0) |
| 93 | return 0; |
| 94 | |
| 95 | max_insert_size = max_out_size - in1_size; |
| 96 | if (max_insert_size > in2_size) |
| 97 | max_insert_size = in2_size; |
| 98 | insert_begin = rand() % in1_size; |
| 99 | insert_size = (rand() % max_insert_size) + 1; |
| 100 | |
| 101 | in2_begin = rand() % (in2_size - insert_size + 1); |
| 102 | |
| 103 | memcpy(out, in1, insert_begin); |
| 104 | memcpy(out + insert_begin, in2 + in2_begin, insert_size); |
| 105 | memcpy(out + insert_begin + insert_size, in1 + insert_begin, |
| 106 | in1_size - insert_begin); |
| 107 | |
| 108 | return in1_size + insert_size; |
| 109 | } |
| 110 | |
| 111 | static size_t overwrite_part(const u8 *in1, size_t in1_size, const u8 *in2, |
| 112 | size_t in2_size, u8 *out, size_t max_out_size) |