Commit Graph

337 Commits

Author SHA1 Message Date
Javier Celaya
7b146745ee Fix linearization of several marshallers with one item
The linearization optimization that avoids copying only one item must
check that there are no further marshallers in the chain.

Just to be clear, we are trying to marshall a message like this:

message {
    uint32 data_size;
    uint64 *data[data_size] @marshall;
} SomeData;

Where the data field points to an array in dynamic memory. Marshalling
and demarshalling functions look good. The marshalling function creates
a submarshaller for the data field and links it to the root marshaller.
But when it comes to sending the data through the wire, only the
data_size field gets sent. We have observed that, in
spice_marshaller_linearize, execution enters into the optimization that
avoids copying the data when the root marshaller only has one item, but
it ignores the following marshallers in the list. Checking if there are
more marshallers fixes the problem.
2015-09-15 17:38:12 +02:00
Frediano Ziglio
449c5da90f common: Fix typo in comment
Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
2015-08-14 19:19:24 +01:00
Christophe Fergeau
f88a7b7bec Use installed spice-protocol for code generation
Now that spice-protocol ships the needed .proto files as well as the
corresponding python scripts, spice-common can use these in order to
generate the C code for the SPICE (de)marshallers.
2015-08-11 10:26:06 +02:00
Lukas Venhoda
6183bbde24 ppc: Fix quic magic endianess
Runtime conversion from a string to uint32 is storing the magic with the same
endianness on both LE and BE machines. This requires aditional byte swap
when sending magic between LE/BE machines.

Changing quic magic to a constant will ensure, that it will be always stored in
native endianness, and the second byte swap won't be needed.
2015-07-02 13:31:28 +02:00
Lukas Venhoda
5a7e5876e6 ppc: Fix lz magic endianess
Commit d39dfbfe changes lz magic to be always treated as LE when encoded.

Runtime conversion from a string to uint32 is storing the magic with the same
endianness on both LE and BE machines. This requires aditional byte swap
when sending magic between LE/BE machines.

Changing lz magic to a constant will ensure, that it will be always stored in
native endianness, and the second byte swap won't be needed.

This commit reverts d39dfbfe changes in lz.c while keeping the rest.
They will be needed in future commit for quic.c
2015-07-02 13:31:28 +02:00
Lukas Venhoda
c04d4d55bc ppc: Fix quic decode endianess
Converts all decoded words in quic from little endian to local
machine endianness.
2015-07-02 13:31:28 +02:00
Javier Celaya
127a76a3b8 Proto: Add preferred compression message and constants.
When accessing a virtual desktop from different devices, some may have
different image compression requirements, e.g. slow devices may prefer
the faster LZ4 over GLZ. This message instructs the server to switch the
image compression algorithm. This patch also promotes the
SPICE_IMAGE_COMPRESS_* constants so that they are available from both
the server and the client.
2015-06-22 19:54:30 +02:00
Erlon Cruz
d39dfbfef9 ppc: Fix lz magic endianness
Signed-off-by: Erlon R. Cruz <erlon.cruz@br.flextronics.com>
Signed-off-by: Rafael F. Santos <fonsecasantos.rafael@gmail.com>
Signed-off-by: Fabiano Fidêncio <Fabiano.Fidêncio@fit-tecnologia.org.br>
2015-04-10 20:20:49 +02:00
Christophe Fergeau
14218d7d6b ssl_verify: Move wincrypt.h related #ifdef closer to the include
Both wincrypt.h and openssl try to define X509_NAME. The wincrypt.h one
is not useful for us, so we currently #undef it if this was set.
However, it's done very late, right before including x509v3.h which
defines the X509_NAME type. Any header included in between may try to
 #include x509v3.h so it's better to undefine X509_NAME right after
including wincrypt.h.
2015-03-26 10:15:04 +01:00
Christophe Fergeau
edac1b36b5 Get rid of SW_CANVAS_IMAGE_CACHE
Every time it's used, it's in constructs similar to:

 #ifdef SW_CANVAS_CACHE
                             , SpiceImageCache *bits_cache
                             , SpicePaletteCache *palette_cache
 #elif defined(SW_CANVAS_IMAGE_CACHE)
                             , SpiceImageCache *bits_cache
 #endif

This can be rewritten as:

                             , SpiceImageCache *bits_cache
 #ifdef SW_CANVAS_CACHE
                             , SpicePaletteCache *palette_cache
 #endif

allowing to get rid of SW_CANVAS_IMAGE_CACHE.
2015-03-26 10:15:04 +01:00
Christophe Fergeau
d2ee99e15f Remove another redundant (SW_CANVAS_CACHE) || (SW_CANVAS_IMAGE_CACHE) #ifdef 2015-03-26 10:15:04 +01:00
Fabiano Fidêncio
37325b4e88 Fix typo in pixman_image_get_stride() function
pixman_image_surface_get_stride -> pixman_image_get_stride
2015-02-25 17:25:03 +01:00
Javier Celaya
3aad79d9c6 LZ4: Do not include arpa/inet.h in Windows builds 2015-02-03 13:28:54 +01:00
Javier Celaya
9287e53b6c LZ4: Add support for 24bit pixman surfaces 2015-02-03 10:46:34 +01:00
Javier Celaya
d167e2ead8 LZ4: Fix the row alignment when it is not on a 32bit boundary
Fix the row alignment for 16/24 bpp images when it is not in a 32bit
boundary. This is needed for 16bpp images when the width is an odd
number, and for the future support of 24bpp images.
2015-02-03 10:46:34 +01:00
Javier Celaya
f76fc28fc5 LZ4: Decode the image format from the stream 2015-02-03 10:43:31 +01:00
Javier Celaya
83c0d642ed LZ4: Adjust reading the top_down flag
Adjust the way the top_down flag is read to the corresponding change in
the wire protocol.
2015-02-03 10:43:31 +01:00
Javier Celaya
6049db492f LZ4: Fix output buffer size 2015-02-03 10:43:31 +01:00
Christophe Fergeau
ac26fd7acb Remove redundant #if defined(SW_CANVAS_CACHE) || defined(SW_CANVAS_IMAGE_CACHE)
SW_CANVAS_CACHE is always defined when building spice-gtk,
SW_CANVAS_IMAGE_CACHE is always defined when building spice-server, and
they are the only 2 users of spice-common. Moreover, build when none of
these is defined is broken.
2015-01-23 16:24:04 +01:00
Christophe Fergeau
062bf67442 Remove unused 'invers' arg from canvas_get_*
All canvas_get_{quic,jpeg,lz4,jpeg_alpha,lz} methods have an 'invers'
argument, but are always called with that argument being 0, so we can
drop it from the argument list, and remove the code triggerring when
it's true.
2015-01-23 16:24:03 +01:00
Victor Toso
619b99511d common: fix build with mingw 2015-01-06 18:02:50 +01:00
Christophe Fergeau
862b9b1a9e build-sys: Move pixman check to m4 macro 2014-12-09 16:40:25 +01:00
Christophe Fergeau
137b1a549e build-sys: Move opengl check to m4 macro 2014-12-09 16:40:25 +01:00
Christophe Fergeau
f9e0a644ae build-sys: Move opus check to m4 macro 2014-12-09 16:40:25 +01:00
Christophe Fergeau
dd57d05a52 build-sys: Move celt check to m4 macro 2014-12-09 16:40:25 +01:00
Christophe Fergeau
fb3fe2272c build-sys: Move smartcard check to m4 macro 2014-12-09 16:38:03 +01:00
Christophe Fergeau
2195369372 build-sys: Small cleanup of AM_CPPFLAGS
Commit 4fafa210 added WARN_CFLAGS, VISIBILITY_HIDDEN_CFLAGS and
-std=gnu99 to AM_CFLAGS in common/Makefile.am, but these are not
needed. WARN_CFLAGS and VISIBILITY_HIDDEN_CFLAGS are not defined
anywhere in spice-common, and spice-common compiles fine without
-std=gnu99 on my f21 box.
2014-12-09 16:37:18 +01:00
Christophe Fergeau
268d3e3d2f Remove unused header file
Nothing uses the definition it contains (I've tested spice-gtk and
spice)
2014-12-04 16:34:56 +01:00
Javier Celaya
5b3cdad921 Add LZ4 image compression support.
- Add a new LZ4 image type to spice.proto.
- Add canvas_get_lz4() to common_canvas_base, to get a pixmap from an
  lz4 image.
- Add an enable-lz4 switch to the configure script, disabled by default.
2014-12-02 19:23:53 +01:00
Christophe Fergeau
8639bbdc9d glc: Fix "warning: unused variable 'recreate'" 2014-11-24 11:24:49 +01:00
天外银龙
a74209a9c3 gdi: fix path segments drawing
Fixes:
https://bugs.freedesktop.org/show_bug.cgi?id=64698
2014-11-10 11:38:22 +01:00
Victor Toso
c22fbffbc7 common: Fix -Wunused-variable
Fix a few warnings from unused variables when compiling spice-common
without OPUS or celt051.
2014-10-23 14:54:48 +02:00
Fabiano Fidêncio
fbdd4e41c0 common: Fix -Wmissing-field-initializers 2014-09-18 13:15:35 +02:00
Fabiano Fidêncio
6f3918ce7c common: Fix -Wsign-compare 2014-09-18 13:15:34 +02:00
Fabiano Fidêncio
c8b4c5ec49 common: Fix -Wunused-parameter 2014-09-18 13:15:29 +02:00
Fabiano Fidêncio
dde1c62a91 common: Remove dead code 2014-09-18 13:15:26 +02:00
Fabiano Fidêncio
d45b3e2765 quic_family_tmpl: Fix "FORWARD_NULL" caught by coverity
Ensure the received bucket is non NULL
2014-07-23 17:20:30 +02:00
Fabiano Fidêncio
7e4cfbe305 quic: Fix "UNINIT" caught by coverity
In case of the model evolution mode has a obsolete or non-valid value,
just return, avoiding then the usage of non initalized variables.
2014-07-23 17:20:30 +02:00
Fabiano Fidêncio
2c5041c3f8 quic: Fix melcstate "OVERRUN" caught by coverity
Check for MELCSTATES - 1 to get inside the branch, otherwise
(...)->rgb_state.melcstate may be up to MELCSTATES after the
pre-incrementing, which would result in an access to a position
that is out bounds of the array size MELCSTATES.
2014-07-14 19:26:33 +03:00
Christophe Fergeau
60046b309d Mark sw_canvas.[ch] as automake source files
These 2 files are not build as part of spice-common
build system, but modules using spice-common will build
them with the appropriate options. We need to let automake
know that these are source files so that it can properly
track these files dependencies.

Without this change, when eg spice-gtk switches to use 'subdir-objects'
to build sw_canvas.c as recommended by automake 1.14, the build
will fail because $(top_srcdir)/spice-common/common/.deps/sw_canvas.Plo
will not have been generated.
2014-05-07 13:01:12 +02:00
Christophe Fergeau
90a1240f27 Use #include "common/..." in (de)marshallers
Now that they are created in $builddir, their includes will need to refer
to files in $srcdir, which can be different. It's cleaner to add
-I $(top_srcdir)/spice-common/ to modules using spice-common rather than
having -I $(top_srcdir)/spice-common/common which would could create header
collisions.
2014-04-16 16:47:55 +02:00
Christophe Fergeau
7ea1cc54b1 Fix generation of marshallers in VPATH builds
The rules to generate the .c/.h (de)marshalling files have targets based in
$builddir, but the CLIENT_MARSHALLERS/SERVER_MARSHALLERS list refer to
files in $srcdir.
When using a $srcdir != $builddir, these $srcdir files will not exist, and
it will not be possible to generate them, which causes the build to fail.

When using $srcdir == $builddir from git or from tarballs, this will not
make a difference. When building from git, if $srcdir and $builddir are the
same, then the files will be found regardless of if we look for them in
$srcdir or $builddir as they are the same.
In tarballs, the files will be shipped with the tarball and thus available
in $srcdir. As $builddir is the same as $srcdir, the files will already
exist and not be regenerated.

The only change of behaviour will be when using a tarball and doing a
$srcdir != $builddir build. In this case, the files will need to be
regenerated, so the tools needed for that must be installed on the
machine doing the build.
2014-04-16 16:47:55 +02:00
Christophe Fergeau
96ca358669 quic: Fix test which is always true
find_model_params() is first doing *nbuckets = 0; and it then checks
nbuckets for NULL. This is redundant as the dereferencing would cause a
segfault if nbuckets was NULL, so the if (nbuckets) test can't be false.
As Uri pointed out, the "/* bucket start */" comment on the same line
probably implies that the test was meant to be 'if (*nbuckets)'
I've ran a few test and I did not observe issues because of it...
2014-01-20 14:33:33 +01:00
Christophe Fergeau
6175014ed7 ssl: Don't use uninitialized variable in verify_subject()
If verify_subject() is called with a SpiceOpenSSLVerify struct containing a
non-NULL 'in_subject' member, it would try to use the local 'in_entries'
variable without having initialized it first. This could happen if
verify_subject() was called multiple time with the same SpiceOpenSSLVerify
context, which probably isn't occurring the way we are using it.

However, since verify_subject() is the only method which needs in_subject,
we don't need to have it stored in SpiceOpenSSLVerify, and we can
recreate it as needed locally in that method, which avoids that issue.
2014-01-07 13:55:58 +01:00
Christophe Fergeau
a4f4ddf56c mi: Fix shadow warnings
Based off a xserver commit from Yaakov Selkowitz:
http://cgit.freedesktop.org/xorg/xserver/commit/mi/mispans.c?id=f02e27e4fcc34413b2051e5a01edc92172fa8612
2014-01-07 13:55:51 +01:00
Christophe Fergeau
ae39a05620 mi: fix memory leak in miFillUniqueSpanGroup
This is based off the corresponding xserver commit from Tiago Vignatti:
http://cgit.freedesktop.org/xorg/xserver/commit/mi/mispans.c?id=7ae46b69ba3f05f46529131e6a864904967cde3a

Since xrealloc is #defined to spice_realloc which aborts on failure, this
block is dead code, but I prefer to stay as close as possible to the
upstream xserver code this is based on.
2014-01-07 13:55:51 +01:00
Christophe Fergeau
d8e49b71d4 mi: Avoid stack smash when drawing dashed lines
Based off Peter Harris's xserver commit
http://cgit.freedesktop.org/xorg/xserver/commit/mi/miwideline.c?id=20c2a3bcb11b5baf564e2c73a477ba23f5ae2b10
2014-01-07 13:55:51 +01:00
Christophe Fergeau
ead4b8810a quic: Add missing break; in switch/case
Unhandled values call an error callback, and then fall through the default:
case, which will call again the error callback. This commit adds some
break; after these cases to avoid this.
2014-01-07 13:55:51 +01:00
Christophe Fergeau
793e5d0350 backtrace: Don't attempt to call seteuid(0)
We are mostly likely not running as root, so this call will fail. As we are
supposed to check its return value as it's declared with
warn_unused_result, the current way of using it is wrong, so this commit just
removes the call.
2014-01-07 13:55:50 +01:00
Christophe Fergeau
6674e1c136 Remove unused variable
It was assigned a value, but then the value was never used.
2014-01-07 13:55:50 +01:00