import spice-streaming-agent-0.2-3.el8

This commit is contained in:
CentOS Sources 2019-05-07 09:34:02 -04:00 committed by Andrew Lukoshko
commit 88088aa986
7 changed files with 234 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
SOURCES/spice-streaming-agent-0.2.tar.xz

View File

@ -0,0 +1 @@
e70ef989cc25b90a3b4e49b7124d43d911fbf4c5 SOURCES/spice-streaming-agent-0.2.tar.xz

View File

@ -0,0 +1,36 @@
From 5aaaa5bd91261a6b61fcaa75585f8446b9eeb036 Mon Sep 17 00:00:00 2001
From: Uri Lublin <uril@redhat.com>
Date: Tue, 31 Jul 2018 16:18:15 +0300
Subject: [PATCH 1/4] start streaming: check num_codecs
The server sends StreamMsgStartStop to tell spice-streaming-agent
to start streaming and a list of available codecs.
The first uint8_t is the number of codecs.
Each following uint8_t is a codec.
This patch checks that the number of codecs in the message, as
reported by the server, is not too large.
---
src/spice-streaming-agent.cpp | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/src/spice-streaming-agent.cpp b/src/spice-streaming-agent.cpp
index 1121f35..9ebbf5d 100644
--- a/src/spice-streaming-agent.cpp
+++ b/src/spice-streaming-agent.cpp
@@ -95,6 +95,11 @@ static void handle_stream_start_stop(StreamPort &stream_port, uint32_t len)
syslog(LOG_INFO, "GOT START_STOP message -- request to %s streaming\n",
streaming_requested ? "START" : "STOP");
client_codecs.clear();
+ const int mnc = len - 1; /* max num codecs, see struct StreamMsgStartStop */
+ if (msg[0] > mnc) {
+ throw std::runtime_error("num_codecs=" + std::to_string(msg[0]) +
+ " > max_num_codecs=" + std::to_string(mnc));
+ }
for (int i = 1; i <= msg[0]; ++i) {
client_codecs.insert((SpiceVideoCodecType) msg[i]);
}
--
2.17.1

View File

@ -0,0 +1,33 @@
From 9a7ba6b16e608054f910a76d28e14fd85a00dec3 Mon Sep 17 00:00:00 2001
From: Uri Lublin <uril@redhat.com>
Date: Wed, 1 Aug 2018 11:03:04 +0300
Subject: [PATCH 2/4] LoadPlugin: call dlclose upon failure
Signed-off-by: Uri Lublin <uril@redhat.com>
---
src/concrete-agent.cpp | 2 ++
1 file changed, 2 insertions(+)
diff --git a/src/concrete-agent.cpp b/src/concrete-agent.cpp
index ca666d7..1f8b4b4 100644
--- a/src/concrete-agent.cpp
+++ b/src/concrete-agent.cpp
@@ -88,6 +88,7 @@ void ConcreteAgent::LoadPlugin(const std::string &plugin_filename)
if (!version) {
syslog(LOG_ERR, "error loading plugin %s: no version information",
plugin_filename.c_str());
+ dlclose(dl);
return;
}
if (!PluginVersionIsCompatible(*version)) {
@@ -95,6 +96,7 @@ void ConcreteAgent::LoadPlugin(const std::string &plugin_filename)
"error loading plugin %s: plugin interface version %u.%u not accepted",
plugin_filename.c_str(),
MajorVersion(*version), MinorVersion(*version));
+ dlclose(dl);
return;
}
--
2.17.1

View File

@ -0,0 +1,38 @@
From d85f863389cf5e36623aad0eb79818e888e15e66 Mon Sep 17 00:00:00 2001
From: Uri Lublin <uril@redhat.com>
Date: Tue, 31 Jul 2018 17:15:09 +0300
Subject: [PATCH 3/4] main: better cleanup when XOpenDisplay or XFixesQuery
fail
close f_log if needed.
close X display if needed.
---
src/spice-streaming-agent.cpp | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/src/spice-streaming-agent.cpp b/src/spice-streaming-agent.cpp
index 9ebbf5d..f342ebf 100644
--- a/src/spice-streaming-agent.cpp
+++ b/src/spice-streaming-agent.cpp
@@ -517,11 +517,18 @@ int main(int argc, char* argv[])
Display *display = XOpenDisplay(NULL);
if (display == NULL) {
+ if (f_log) {
+ fclose(f_log);
+ }
syslog(LOG_ERR, "failed to open display\n");
return EXIT_FAILURE;
}
int event_base, error_base;
if (!XFixesQueryExtension(display, &event_base, &error_base)) {
+ if (f_log) {
+ fclose(f_log);
+ }
+ XCloseDisplay(display);
syslog(LOG_ERR, "XFixesQueryExtension failed\n");
return EXIT_FAILURE;
}
--
2.17.1

View File

@ -0,0 +1,34 @@
From 0605440f7344d9d6d1b047992fbadcd256f2c301 Mon Sep 17 00:00:00 2001
From: Frediano Ziglio <fziglio@redhat.com>
Date: Tue, 17 Jul 2018 16:24:06 +0100
Subject: [PATCH 4/4] jpeg: Do not use next_output_byte buf_empty_output_buffer
The pointer is not updated to the last byte used so using it
to compute the bytes written into the buffer we ignore some bytes
causing some image corruptions.
Note that also free_in_buffer is not updated to last written byte.
When buf_empty_output_buffer is called the buffer is full so use the
size of it instead of relying on next_output_byte or free_in_buffer.
Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
Acked-by: Uri Lublin <uril@redhat.com>
---
src/jpeg.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/jpeg.cpp b/src/jpeg.cpp
index ceee359..5f6d128 100644
--- a/src/jpeg.cpp
+++ b/src/jpeg.cpp
@@ -23,7 +23,7 @@ struct JpegBuffer: public jpeg_destination_mgr
static boolean buf_empty_output_buffer(j_compress_ptr cinfo)
{
JpegBuffer *buf = (JpegBuffer *) cinfo->dest;
- size_t size = buf->next_output_byte - &buf->buffer[0];
+ size_t size = buf->buffer.size();
buf->buffer.resize(buf->buffer.capacity() * 2);
buf->next_output_byte = &buf->buffer[0] + size;
buf->free_in_buffer = buf->buffer.size() - size;
--
2.17.1

View File

@ -0,0 +1,91 @@
Name: spice-streaming-agent
Version: 0.2
Release: 3%{?dist}
Summary: SPICE streaming agent
Group: Applications/System
License: ASL 2.0
URL: https://www.redhat.com
Source0: %{name}-%{version}.tar.xz
Patch1: 0001-start-streaming-check-num_codecs.patch
Patch2: 0002-LoadPlugin-call-dlclose-upon-failure.patch
# Patch 3 is a downstream only patch. The issue is already fixed upstream
# (8fb16195dca782b4aa5faa82951f734caf31bffe) but depends on other patches
Patch3: 0003-main-better-cleanup-when-XOpenDisplay-or-XFixesQuery.patch
Patch4: 0004-jpeg-Do-not-use-next_output_byte-buf_empty_output_bu.patch
BuildRequires: spice-protocol >= 0.12.14
BuildRequires: libX11-devel libXfixes-devel
BuildRequires: libjpeg-turbo-devel
BuildRequires: catch-devel
BuildRequires: pkgconfig(udev)
# we need /usr/sbin/semanage program which is available on different
# packages depending on distribution
Requires(post): /usr/sbin/semanage
Requires(postun): /usr/sbin/semanage
ExclusiveArch: x86_64
%description
An agent, running on a guest, sending video streams of the X display to a
remote client (over SPICE).
%package devel
Requires: spice-protocol >= 0.12.14
Requires: pkgconfig
Summary: SPICE streaming agent development files
%description devel
This package contains necessary header files to build SPICE streaming
agent plugins.
%prep
%setup -q
%patch1 -p1
%patch2 -p1
%patch3 -p1
%patch4 -p1
%build
%configure --enable-tests --with-udevrulesdir=%{_udevrulesdir}
make %{?_smp_mflags} V=1
%check
make check
%install
make install DESTDIR=%{buildroot} V=1
if test -d "%{buildroot}/%{_libdir}/%{name}/plugins"; then
find %{buildroot}/%{_libdir}/%{name}/plugins -name '*.la' -delete
fi
%post
semanage fcontext -a -t xserver_exec_t %{_bindir}/spice-streaming-agent 2>/dev/null || :
restorecon %{_bindir}/spice-streaming-agent || :
%postun
if [ $1 -eq 0 ] ; then # final removal
semanage fcontext -d -t xserver_exec_t %{_bindir}/spice-streaming-agent 2>/dev/null || :
fi
%files
%doc COPYING NEWS README
%{_udevrulesdir}/90-spice-guest-streaming.rules
%{_bindir}/spice-streaming-agent
%{_sysconfdir}/xdg/autostart/spice-streaming.desktop
%{_datadir}/gdm/greeter/autostart/spice-streaming.desktop
%files devel
%defattr(-,root,root,-)
%{_includedir}
%{_libdir}/pkgconfig
%changelog
* Wed Aug 1 2018 Uri Lublin <uril@redhat.com> - 0.2-3
- Rebuild for rhel-8
Related: rhbz#1614485
* Wed Aug 16 2017 Frediano Ziglio <fziglio@redhat.com> - 0.1-1
- Initial package (pre-release)