Age | Commit message (Collapse) | Author |
|
|
|
In this patch I add support for "delete through end of file" in our
ed diff handler, and generate our diffs so that they remove
everything after in the consensus after the signatures begin.
|
|
See may 3 changes to prop140 for more background.
|
|
|
|
Fixes bug #21964
|
|
'sebastian/consdiff_newline'
|
|
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.
|
|
Fixes ticket #21963
|
|
Thanks, jenkins!
|
|
|
|
There was a frequent block of code that did "find the next router
line, see if we've hit the end of the list, get the ID hash from the
line, and enforce well-ordering." Per Ahf's review, I'm extracting
it to its own function.
|
|
|
|
|
|
|
|
|
|
Previously, we operated on smartlists of NUL-terminated strings,
which required us to copy both inputs to produce the NUL-terminated
strings. Then we copied parts of _those_ inputs to produce an
output smartlist of NUL-terminated strings. And finally, we
concatenated everything into a final resulting string.
This implementation, instead, uses a pointer-and-extent pattern to
represent each line as a pointer into the original inputs and a
length. These line objects are then added by reference into the
output. No actual bytes are copied from the original strings until
we finally concatenate the final result together.
Bookkeeping structures and newly allocated strings (like ed
commands) are allocated inside a memarea, to avoid needless mallocs
or complicated should-I-free-this-or-not bookkeeping.
In my measurements, this improves CPU performance by something like
18%. The memory savings should be much, much higher.
|
|
Now we use a single allocation block for all the lines, rather than
calling strdup on them one at a time. This should help performance
a tiny bit.
|
|
|
|
Found while fuzzing: this could occur if we tried to copy a
nonexistent "line 0" while applying a diff.
|
|
(We'll want this for fuzzing)
|
|
Also, add very strict split/join functions, and totally forbid
nonempty files that end with somethig besides a newline. This
change is necessary to ensure that diff/apply are actually reliable
inverse operations.
|
|
Don't alias the insides of smartlist_t; that way lies madness.
|
|
|
|
This is a protocol update from recent prop140 changes.
Also, per #21673, we need to check the entire document, including
signatures.
|
|
Also add a missing newline.
|
|
|
|
|
|
The 2-line diff changs is needed to make the unit tests actually
test the cases that they thought they were testing.
The bogus free was found while testing those cases
|
|
|
|
|
|
|
|
Previously test_consdiff.c just did #include "consdiff.c", which is
not great style, and messes up coverage testing.
|
|
(This commit was extracted by nickm based on the final outcome of
the project, taking only the changes in the files touched by this
commit from the consdiff_rebased branch. The directory-system
changes are going to get worked on separately.)
|