From: Lasse Collin Date: Mon, 22 Apr 2024 18:54:39 +0000 (+0300) Subject: liblzma: lzma_str_to_filters: Set *error_pos on all errors X-Git-Tag: v5.7.1alpha~379 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=70d12dd069bb9bb0d6bb1c8fafc4e6f77780263d;p=thirdparty%2Fxz.git liblzma: lzma_str_to_filters: Set *error_pos on all errors 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 --- diff --git a/src/liblzma/common/string_conversion.c b/src/liblzma/common/string_conversion.c index ae13ac46..c899783c 100644 --- a/src/liblzma/common/string_conversion.c +++ b/src/liblzma/common/string_conversion.c @@ -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()";