mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-11 05:33:47 +01:00
Fix diff generation with line added at start
The consdiff generation logic would skip over lines added at the start of the second file, and generate a diff that it would the immediately refuse because it couldn't be used to reproduce the second file from the first. Fixes #21996.
This commit is contained in:
parent
b081a7ed21
commit
5a7e39c0cb
@ -671,7 +671,7 @@ gen_ed_diff(const smartlist_t *cons1, const smartlist_t *cons2,
|
|||||||
*/
|
*/
|
||||||
i1=len1-1, i2=len2-1;
|
i1=len1-1, i2=len2-1;
|
||||||
char buf[128];
|
char buf[128];
|
||||||
while (i1 > 0 || i2 > 0) {
|
while (i1 >= 0 || i2 >= 0) {
|
||||||
|
|
||||||
int start1x, start2x, end1, end2, added, deleted;
|
int start1x, start2x, end1, end2, added, deleted;
|
||||||
|
|
||||||
|
@ -622,6 +622,17 @@ test_consdiff_gen_ed_diff(void *arg)
|
|||||||
tt_str_eq_line(".", smartlist_get(diff, 5));
|
tt_str_eq_line(".", smartlist_get(diff, 5));
|
||||||
tt_str_eq_line("2d", smartlist_get(diff, 6));
|
tt_str_eq_line("2d", smartlist_get(diff, 6));
|
||||||
|
|
||||||
|
smartlist_clear(cons1);
|
||||||
|
smartlist_clear(cons2);
|
||||||
|
consensus_split_lines(cons1, "B\n", area);
|
||||||
|
consensus_split_lines(cons2, "A\nB\n", area);
|
||||||
|
diff = gen_ed_diff(cons1, cons2, area);
|
||||||
|
tt_ptr_op(NULL, OP_NE, diff);
|
||||||
|
tt_int_op(3, OP_EQ, smartlist_len(diff));
|
||||||
|
tt_str_eq_line("0a", smartlist_get(diff, 0));
|
||||||
|
tt_str_eq_line("A", smartlist_get(diff, 1));
|
||||||
|
tt_str_eq_line(".", smartlist_get(diff, 2));
|
||||||
|
|
||||||
/* TODO: small real use-cases, i.e. consensuses. */
|
/* TODO: small real use-cases, i.e. consensuses. */
|
||||||
|
|
||||||
done:
|
done:
|
||||||
|
Loading…
Reference in New Issue
Block a user