]> git.ipfire.org Git - thirdparty/xz.git/commitdiff
liblzma: lzma_str_to_filters: Set *error_pos on all errors
authorLasse Collin <lasse.collin@tukaani.org>
Mon, 22 Apr 2024 18:54:39 +0000 (21:54 +0300)
committerLasse Collin <lasse.collin@tukaani.org>
Mon, 22 Apr 2024 19:03:04 +0000 (22:03 +0300)
The API docs clearly say that if error_pos isn't NULL then *error
is always set on any error. However, it wasn't touched if str == NULL
or filters == NULL or unsupported flags were specified.

Fixes: cedeeca2ea6ada5b0411b2ae10d7a859e837f203
src/liblzma/common/string_conversion.c

index ae13ac46a83f982e2bd63eb169175a622b6aa2a3..c899783c642a51bd41d432efe3eca69d2290fcce 100644 (file)
@@ -1002,6 +1002,12 @@ extern LZMA_API(const char *)
 lzma_str_to_filters(const char *str, int *error_pos, lzma_filter *filters,
                uint32_t flags, const lzma_allocator *allocator)
 {
+       // If error_pos isn't NULL, *error_pos must always be set.
+       // liblzma <= 5.4.6 and <= 5.6.1 have a bug and don't do this
+       // when str == NULL or filters == NULL or flags are unsupported.
+       if (error_pos != NULL)
+               *error_pos = 0;
+
        if (str == NULL || filters == NULL)
                return "Unexpected NULL pointer argument(s) "
                                "to lzma_str_to_filters()";