Age | Commit message (Collapse) | Author | Files | Lines |
|
We currently have macros silently replacing use of strncpy/strcat with
strcpy_s/strcat_s when using MSVC++. However, these macros can have
unexpected effects as they use sizeof to find out the maximum size of
the destination string. This is a very significant behaviour from
strncpy/strcat, which can lead to subtle bugs as the behaviour is
different between mingw and MSVC++.
Now that we have our implementation of strcpy_s/strcat_s, we don't need
these #defines.
|
|
|
|
These security functions are available when building with MSVC++. With
mingw, they can be used at build time, but their availability will
depend on the version of MSVCRT the user has installed on their system.
In particular, a default install of Windows XP will not have a new
enough MSVCRT version, causing runtime failures as the binary built with
mingw and using strcat_s will not be able to find the necessary entry
point in the MSVCRT runtime.
This commit adds some strcat_s/strcpy_s-like functions used with mingw
which will always be available.
|
|
|
|
The 64 bit Visual Studio build complains that:
.\file_xfer.cpp(223) : warning C4244:
'=' : conversion from '__int64' to 'unsigned int', possible loss of data
|
|
This is a follow-up to commits 492ee05a6b and 4b9e9b1d28
Visual Studio complains:
.\file_xfer.cpp(90) : warning C4996: 'strcat': This function or variable
may be unsafe. Consider using strcat_s instead.
To disable deprecation, use _CRT_SECURE_NO_WARNINGS.
See online help for details.
And a similar complain for sscanf.
Replace them with the secure function when compiling with Visual Studio.
Note that the size provided is sizeof(d), which means all calls to
sscanf and strcat must be done with the first param (destination) being
an array and not a pointer.
|
|
Visual Studio complains:
vdagent\file_xfer.h(28) : warning C4996: 'strncpy': This function or variable may
Consider using strncpy_s instead.
To disable deprecation, use _CRT_SECURE_NO_WARNINGS.
See online help for details.
Replace strncpy with strcpy_s when building with Visual Studio.
Adjust parameter order and difference in meaning of length:
- length param is last in strncpy and second in strcpy_s
- many calls to strncpy are given length param n-1, as
strncpy does not guarantee that destination ends with '\0'
- it's safer to set length param not larger than sizeof(d)
(assuming d is an array not a pointer)
Trying to use strcpy_s for both Visual Studio and mingw
failed as strcpy_s is missing from the default msvcrt.dll
on WinXP (See OLDMSVCRT in common/vdcommon.h).
|
|
This commit is an addition to 4b9e9b1d28ea7eaec44ff73e2f91c4064986b12a
Building with Visual Studio breaks as snprintf is not implemented:
vdagent\file_xfer.cpp(198) : error C3861: 'snprintf': identifier not found
Replace it with sprintf_s for Visual Studio.
Trying to use sprintf_s for both Visual Studio and mingw
failed for mingw64 (build succeeds but runtime error appears).
|
|
As a followup of commit 462295d9f84658aa7.
Building with Visual Studio, fails as there is no inttypes.h file:
vdagent\file_xfer.cpp(21) : fatal error C1083: Cannot open
include file: 'inttypes.h': No such file or directory
This commit prevents including inttypes.h when building with Visual Studio,
and defines PRIu64 that is defined in inttypes.h for mingw compiler.
|
|
|
|
Fixes the following error:
====
In file included from vdagent/vdagent.cpp:18:0:
./common/vdcommon.h:51:0: warning: "_ftime_s" redefined
#define _ftime_s(timeb) _ftime(timeb)
^
In file included from /usr/x86_64-w64-mingw32/sys-root/mingw/include/sys/timeb.h:124:0,
=====
|
|
|
|
Using unsigned long to print a size_t.
|
|
Fixes compiler warning that starts with:
In file included from vdagent/as_user.cpp:19:0:
vdagent/as_user.h: In constructor 'AsUser::AsUser(DWORD)':
vdagent/as_user.h:35:10: warning: 'AsUser::_started' will be initialized after [-Wreorder]
bool _started;
|
|
Visual Studio complains:
vdagent\file_xfer.cpp(85) : warning C4129: '%' : unrecognized character escape sequence
Replace "%s\%s" with "%s\\%s"
|
|
In vd_agent/file_xfer.cpp is implemented a simple g_key_get_string,
but when dragging a file with a name containing '[' (like te[st.txt),
it will fail.
From source code,
>next_group_pos = strstr(group_pos + strlen(group_pfx), "[");
> if (next_group_pos && key_pos > next_group_pos) return false;
we know that it tries to find the end of current group by '[' label,
if we drag a file named te[st.txt, the key_string will be like:
[vdagent-file-xfer]
name=te[st.txt
size=10
so, it will fail when meta parsing and returns the
VD_AGENT_FILE_XFER_STATUS_ERROR message.
Here's the elegant method Christophe proposed and test ok, thanks to
him again!
|
|
I submitted a patch several months ago about this issue,
here http://lists.freedesktop.org/archives/spice-devel/2014-February/016158.html
I check it again, and find that the value of
g_key_file_to_data(keyfile,...) is always utf-8, for the value of
g_uri_list_extract_uris() is utf8 urlencode.
So the display problem is caused by vd_agent, but how it displays
depends on the language of system, the following two screenshots show
the difference:
http://int64ago-tmp.qiniudn.com/guest-Chinese.png
http://int64ago-tmp.qiniudn.com/guest-English.png
|
|
wnd_proc() is called during ChangeDisplaySettings(), when handling
monitors config. However, calling get_displays() will overwrite the
desired config.
So, while updating from 1 to 4 enabled monitors, when the 2nd monitor
config is enabled, the current config is read, and overwrite the rest of
the config, so first time only 2nd monitor is enabled, second time, 3rd
monitor etc.
https://bugzilla.redhat.com/show_bug.cgi?id=1111144
|
|
|
|
Do not send clipboard data bigger than last received
VDAgentMaxClipboard.
If a larger amount of data needs to be transferred between client and guest,
a different mechanism should be used, not clipboard.
The spice-protocol git-submodule is updated to include VD_AGENT_MAX_CLIPBOARD
and related definitions.
|
|
Moved clipboard definition to the beginning of the function, as
mingw-gcc complains about gotos that jump over definitions.
|
|
Fixes the following autoreconf (automake) warning:
Makefile.am:6: warning: 'INCLUDES' is the old name for 'AM_CPPFLAGS' (or '*_CPPFLAGS')
|
|
|
|
By providing the size of the destination string buffer.
|
|
Before, the target directory was a public one (for all users),
as file creation was not done with user privileges.
Now that the file is created with user privileges, it's
better to make the user desktop the target directory.
|
|
|
|
The class calls Impersonate upon begin(), and Revert
upon end() or destruction.
The user is the current user that is logged in.
create mode 100644 vdagent/as_user.cpp
create mode 100644 vdagent/as_user.h
|
|
|
|
Even before this change, it should have handled error conditions. We'd
be better off allocating those strings and failing on io op later on.
|
|
vdagent/display_setting.cpp:469:50: warning: cast to pointer from
integer of different size [-Wint-to-pointer-cast]
if (!SystemParametersInfo(action, 0, (PVOID)param, 0)) {
|
|
vdagent/desktop_layout.cpp:121:763: warning: format '%u' expects
argument of type 'unsigned int', but argument 8 has type
'std::vector<DisplayMode*>::size_type {aka long long unsigned int}'
[-Wformat=]
|
|
The _s functions need a recent msvcrt version, not shipped in XP by
default.
Furthermore, it appears that their sscanf_s usage was missing the extra
buffer size argument.
|
|
vdagent/vdagent.cpp: In member function 'void
VDAgent::on_clipboard_grab()':
vdagent/vdagent.cpp:951:52: warning: suggest parentheses around
assignment used as truth value [-Wparentheses]
|
|
|
|
format '%lu' expects argument of type 'long unsigned int', but argument
9 has type 'uint64_t
|
|
format '%u' expects argument of type 'unsigned int', but argument 8 has type 'DWORD
|
|
|
|
|
|
rhbz#956146
|
|
|
|
rhbz#872252
|
|
This is needed to get the definition of VD_AGENT_CLIENT_DISCONNECTED
|
|
rhbz#958051
It may be that a _displays entry will be NULL.
I encountered it when running with multiple QXL devices, for one of
which the driver failed to load since it was "out of resources".
Iterations over _displays should handle that case.
We found four such iterations, and fixed them in this patch.
|
|
rhbz #951618
|
|
vdagent is stopped, so a new instance is to be launched by vdservice.
imho, this seems simpler than cleaning agent in/out msg state and
reseting the vio-serial device to cleanup pending msgs.
rhbz #956133
|
|
rhbz #953973
|
|
|
|
This reverts commit 67c1bcf49367d1726033b298a8ab016b4e22cf23.
Also add a comment why the refresh is necessary there. The original
issue, reentering call, doesn't seem reproducible...
https://bugzilla.redhat.com/show_bug.cgi?id=912793
|
|
0ba6e2936 was trying to fix CreateDC() failing when the monitor is
disabled, unfortunately, enabling monitor with an arbitrary resolution
may still fail (the previous resolution, or the current one).
This patch address the issue by first trying the current resolution, and
falling back to a well-known resolution. This causes a temporary client
resolution change (bad), which is immediately adjusted to the arbitrary
resolution.
We may want to improve agent->driver communication of arbitrary
resolution before the driver is loaded, perhaps using registry or via
the spice server. Any of these solution will unfortunately take some more
time which we are missing.
https://bugzilla.redhat.com/show_bug.cgi?id=922394
(seem to solve related bugs, like mouse offset, or flashing monitors)
|
|
for the case path contains a space, see CreateService() doc:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms682450.aspx
rhbz #918635
|