| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
| |
(fixes issue #6089)
Signed-off-by: Sven Strickroth <email@cs-ware.de>
|
| |
|
|
|
| |
This tests parsing a multiline string containing multiple quoted comment
chars. See #6019
|
| |
|
|
| |
Signed-off-by: Sven Strickroth <email@cs-ware.de>
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Multivars are configuration entries that have many values for the same
name; we can thus micro-optimize this case by just retaining the name of
the first configuration entry and freeing all the others, letting them
point to the string of the first entry.
The attached test case is an extreme example that demonstrates this. It
contains a section name that is approximately 500kB in size with 20.000
entries "a=b". Without the optimization, this would require at least
20000*500kB bytes, which is around 10GB. With this patch, it only
requires 500kB+20000*1B=20500kB.
The obvious culprit here is the section header, which we repeatedly
include in each of the configuration entry's names. This makes it very
easier for an adversary to provide a small configuration file that
disproportionally blows up in memory during processing and is thus a
feasible way for a denial-of-service attack. Unfortunately, we cannot
fix the root cause by e.g. having a separate "section" field that may
easily be deduplicated due to the `git_config_entry` structure being
part of our public API. So this micro-optimization is the best we can do
for now.
|
| | |
|
| | |
|
| | |
|
| |
|
|
| |
Removed the BUILD_CLAR CMake flag, and updated the readme.
|
| | |
|
| | |
|
| |
|
|
|
|
|
|
| |
The documentation is a bit misleading. The subsection name is always
case-sensitive, but with a [section.subsection] header, the subsection
is transformed to lowercase when the configuration is parsed.
Signed-off-by: Carlos Martín Nieto <carlos@cmartin.tk>
|
| |
|
|
|
|
|
|
| |
wide values
Should fix issue #419.
Signed-off-by: nulltoken <emeric.fermas@gmail.com>
|
| |
|
|
| |
Signed-off-by: Carlos Martín Nieto <cmn@elego.de>
|
| |
|
|
| |
Signed-off-by: Carlos Martín Nieto <cmn@elego.de>
|
| |
|
|
|
|
|
| |
If a config has several files, we need to check all of them before we
can say that a variable doesn't exist.
Signed-off-by: Carlos Martín Nieto <cmn@elego.de>
|
| |
|
|
|
|
| |
The repo's configuration should take precedence over the global one.
Signed-off-by: Carlos Martín Nieto <cmn@elego.de>
|
| |
|
|
|
|
| |
Add a test to check that value replacement works.
Signed-off-by: Carlos Martín Nieto <cmn@elego.de>
|
| |
|
|
| |
Signed-off-by: Carlos Martín Nieto <cmn@elego.de>
|
| |
|
|
| |
Signed-off-by: Carlos Martín Nieto <cmn@elego.de>
|
| |
|
|
| |
Signed-off-by: Carlos Martín Nieto <cmn@elego.de>
|
| |
|
|
| |
Signed-off-by: Carlos Martín Nieto <cmn@elego.de>
|
| |
|
|
| |
Signed-off-by: Carlos Martín Nieto <cmn@elego.de>
|
| |
|
|
|
|
|
| |
If a variable is on its own, truth should be assumed. Check this is
true in our code.
Signed-off-by: Carlos Martín Nieto <cmn@elego.de>
|
|
|
These tests are basic, but they should tell us when we've broken
something.
Signed-off-by: Carlos Martín Nieto <cmn@elego.de>
|