Fix bilinear filter computation in wide pipeline
pixman 0.38.x has a regression that causes incorrect rendering in some
circumstances. This can be triggered by the use of cairo with
CAIRO_OPERATOR_SATURATE and subpixel positioning, and causes OpenSlide
to produce incorrect output.
This patch is a cherry-pick of [1], rebasing it on top of `c8s`.
It backports commit 8256c235d9b3 ("Fix bilinear filter computation in
wide pipeline") [2] from pixman 0.40.0 to fix the mentioned regression.
At the moment of writing this, pixman's version is:
- Fedora: 0.42.2
- CentOS Stream 9: 0.40.0
- CentOS Stream 8: 0.38.4
Therefore, CentOS Stream 8 needs to be patched.
A reproducer can be found in the original bug report [3].
[1] https://gitlab.com/redhat/centos-stream/rpms/pixman/-/merge_requests/2
[2] 8256c235d9
[3] https://bugzilla.redhat.com/show_bug.cgi?id=2124013
Resolves: https://issues.redhat.com/browse/RHEL-3061
This commit is contained in:
parent
58f4a3a987
commit
aae78bea47
84
0001-Fix-bilinear-filter-computation-in-wide-pipeline.patch
Normal file
84
0001-Fix-bilinear-filter-computation-in-wide-pipeline.patch
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
From 8256c235d9b3854d039242356905eca854a890ba Mon Sep 17 00:00:00 2001
|
||||||
|
From: Basile Clement <basile-pixman@clement.pm>
|
||||||
|
Date: Tue, 9 Apr 2019 23:16:13 +0200
|
||||||
|
Subject: [PATCH] Fix bilinear filter computation in wide pipeline
|
||||||
|
|
||||||
|
The recently introduced wide pipeline for filters has a typo which
|
||||||
|
causes it to improperly compute bilinear interpolation positions,
|
||||||
|
causing various glitches when enabled.
|
||||||
|
|
||||||
|
This patch uses the proper computation for bilinear interpolation in the
|
||||||
|
wide pipeline. It also makes related `if` statements conformant to the
|
||||||
|
CODING_STYLE:
|
||||||
|
|
||||||
|
* If a substatement spans multiple lines, then there must be braces
|
||||||
|
around it.
|
||||||
|
|
||||||
|
* If one substatement of an if statement has braces, then the other
|
||||||
|
must too.
|
||||||
|
|
||||||
|
Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
|
||||||
|
---
|
||||||
|
pixman/pixman-bits-image.c | 9 +++++++++
|
||||||
|
pixman/pixman-inlines.h | 2 +-
|
||||||
|
2 files changed, 10 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/pixman/pixman-bits-image.c b/pixman/pixman-bits-image.c
|
||||||
|
index 564789e..7bc2ba8 100644
|
||||||
|
--- a/pixman/pixman-bits-image.c
|
||||||
|
+++ b/pixman/pixman-bits-image.c
|
||||||
|
@@ -432,29 +432,38 @@ bits_image_fetch_pixel_filtered (bits_image_t *image,
|
||||||
|
|
||||||
|
case PIXMAN_FILTER_CONVOLUTION:
|
||||||
|
if (wide)
|
||||||
|
+ {
|
||||||
|
bits_image_fetch_pixel_convolution (image, x, y,
|
||||||
|
get_pixel, out,
|
||||||
|
accum_float,
|
||||||
|
reduce_float);
|
||||||
|
+ }
|
||||||
|
else
|
||||||
|
+ {
|
||||||
|
bits_image_fetch_pixel_convolution (image, x, y,
|
||||||
|
get_pixel, out,
|
||||||
|
accum_32, reduce_32);
|
||||||
|
+ }
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PIXMAN_FILTER_SEPARABLE_CONVOLUTION:
|
||||||
|
if (wide)
|
||||||
|
+ {
|
||||||
|
bits_image_fetch_pixel_separable_convolution (image, x, y,
|
||||||
|
get_pixel, out,
|
||||||
|
accum_float,
|
||||||
|
reduce_float);
|
||||||
|
+ }
|
||||||
|
else
|
||||||
|
+ {
|
||||||
|
bits_image_fetch_pixel_separable_convolution (image, x, y,
|
||||||
|
get_pixel, out,
|
||||||
|
accum_32, reduce_32);
|
||||||
|
+ }
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
+ assert (0);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
diff --git a/pixman/pixman-inlines.h b/pixman/pixman-inlines.h
|
||||||
|
index 332e208..f785910 100644
|
||||||
|
--- a/pixman/pixman-inlines.h
|
||||||
|
+++ b/pixman/pixman-inlines.h
|
||||||
|
@@ -231,7 +231,7 @@ bilinear_interpolation_float (argb_t tl, argb_t tr,
|
||||||
|
argb_t r;
|
||||||
|
|
||||||
|
distxy = distx * disty;
|
||||||
|
- distxiy = distx - (1.f - distxy);
|
||||||
|
+ distxiy = distx * (1.f - disty);
|
||||||
|
distixy = (1.f - distx) * disty;
|
||||||
|
distixiy = (1.f - distx) * (1.f - disty);
|
||||||
|
|
||||||
|
--
|
||||||
|
2.37.1
|
||||||
|
|
@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
Name: pixman
|
Name: pixman
|
||||||
Version: 0.38.4
|
Version: 0.38.4
|
||||||
Release: 2%{?dist}
|
Release: 3%{?dist}
|
||||||
Summary: Pixel manipulation library
|
Summary: Pixel manipulation library
|
||||||
|
|
||||||
Group: System Environment/Libraries
|
Group: System Environment/Libraries
|
||||||
@ -17,6 +17,7 @@ Source0: https://xorg.freedesktop.org/archive/individual/lib/%{name}-%{ve
|
|||||||
Source1: make-pixman-snapshot.sh
|
Source1: make-pixman-snapshot.sh
|
||||||
|
|
||||||
Patch0: 0001-Initialize-temporary-buffers-in-general_composite_re.patch
|
Patch0: 0001-Initialize-temporary-buffers-in-general_composite_re.patch
|
||||||
|
Patch1: 0001-Fix-bilinear-filter-computation-in-wide-pipeline.patch
|
||||||
|
|
||||||
BuildRequires: automake autoconf libtool
|
BuildRequires: automake autoconf libtool
|
||||||
BuildRequires: gcc
|
BuildRequires: gcc
|
||||||
@ -68,6 +69,9 @@ make check %{?_smp_mflags} V=1
|
|||||||
%{_libdir}/pkgconfig/pixman-1.pc
|
%{_libdir}/pkgconfig/pixman-1.pc
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Sat Sep 03 2022 Benjamin Gilbert <bgilbert@backtick.net> - 0.38.4-3
|
||||||
|
- Fix bilinear filter computation in wide pipeline
|
||||||
|
|
||||||
* Tue Feb 22 2022 Adam Jackson <ajax@redhat.com> - 0.38.4-2
|
* Tue Feb 22 2022 Adam Jackson <ajax@redhat.com> - 0.38.4-2
|
||||||
- Backport the pixman part of cairo CVE-2020-35492
|
- Backport the pixman part of cairo CVE-2020-35492
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user