mirror of https://git.tukaani.org/xz.git
liblzma: Always validate the first digit of a preset string
lzma_str_to_filters() may call parse_lzma12_preset() in two ways. The
call from str_to_filters() detects the string type from the first
character(s) and as a side-effect it validates the first digit of
the preset string. So this change makes no difference there.
However, the call from parse_options() doesn't pre-validate the string.
parse_lzma12_preset() will return an invalid value which is passed to
lzma_lzma_preset() which safely rejects it. The bug still affects the
the error message:
$ xz --filters=lzma2:preset=X
xz: Error in --filters=FILTERS option:
xz: lzma2:preset=X
xz: ^
xz: Unsupported preset
After the fix:
$ xz --filters=lzma2:preset=X
xz: Error in --filters=FILTERS option:
xz: lzma2:preset=X
xz: ^
xz: Unsupported preset
The ^ now correctly points to the X and not past it because the X itself
is the problematic character.
Fixes: cedeeca2ea
This commit is contained in:
parent
52ff324337
commit
7510721767
|
@ -317,6 +317,10 @@ parse_lzma12_preset(const char **const str, const char *str_end,
|
||||||
uint32_t *preset)
|
uint32_t *preset)
|
||||||
{
|
{
|
||||||
assert(*str < str_end);
|
assert(*str < str_end);
|
||||||
|
|
||||||
|
if (!(**str >= '0' && **str <= '9'))
|
||||||
|
return "Unsupported preset";
|
||||||
|
|
||||||
*preset = (uint32_t)(**str - '0');
|
*preset = (uint32_t)(**str - '0');
|
||||||
|
|
||||||
// NOTE: Remember to update LZMA12_PRESET_STR if this is modified!
|
// NOTE: Remember to update LZMA12_PRESET_STR if this is modified!
|
||||||
|
|
Loading…
Reference in New Issue