49d9e61884
When uploading large ICON (96x96), we end up growing the stream mid-update. Stream_EnsureCapacity end up reallocating the stream with a larger capacity to accomodate the large ICON size, but in doing so, also updating the sealed length for the data currently in the stream. This breaks the assumption between update_begin_paint and update_end_paint where the sealed lenght is used to keep track of the location where we need to update the orders counts after we're done accumulating update. As a result of the growth and lost of that location, the number of orders is written to the wrong location and the resulting stream is invalid which result in a protocol violation and a connection drop. The current fix uses a new offsetOrder in the update object to keep track of where update_end_paint needs to write the number of orders contained. I think a better fix would be for Stream_EnsureCapacity to preserve the sealead length of the stream on growth, but this has a much more significant impact and careful analysis needs to be done to ensure this doesn't violate other assumption. Need to follow up with FreeRDP developer to get their take on this one. |
||
---|---|---|
.github | ||
channels | ||
ci/cmake-preloads | ||
client | ||
cmake | ||
compat/stdbool | ||
docs | ||
external | ||
include | ||
libfreerdp | ||
packaging | ||
rdtk | ||
resources | ||
scripts | ||
server | ||
third-party | ||
tools/wireshark | ||
uwac | ||
winpr | ||
.clang-format | ||
.gitignore | ||
.travis.yml | ||
buildflags.h.in | ||
ChangeLog | ||
CMakeCPack.cmake | ||
CMakeCPackOptions.cmake.in | ||
CMakeLists.txt | ||
config.h.in | ||
LICENSE | ||
README.md | ||
SECURITY.md |
FreeRDP: A Remote Desktop Protocol Implementation
FreeRDP is a free implementation of the Remote Desktop Protocol (RDP), released under the Apache license. Enjoy the freedom of using your software wherever you want, the way you want it, in a world where interoperability can finally liberate your computing experience.
Resources
Project website: https://www.freerdp.com/
Issue tracker: https://github.com/FreeRDP/FreeRDP/issues
Sources: https://github.com/FreeRDP/FreeRDP/
Downloads: https://pub.freerdp.com/releases/
Wiki: https://github.com/FreeRDP/FreeRDP/wiki
API documentation: https://pub.freerdp.com/api/
Matrix room : #FreeRDP:matrix.org (main) XMPP channel: #FreeRDP#matrix.org@matrix.org (bridged) IRC channel : #freerdp @ irc.oftc.net (bridged) Mailing list: https://lists.sourceforge.net/lists/listinfo/freerdp-devel
Microsoft Open Specifications
Information regarding the Microsoft Open Specifications can be found at: http://www.microsoft.com/openspecifications/
A list of reference documentation is maintained here: https://github.com/FreeRDP/FreeRDP/wiki/Reference-Documentation
Compilation
Instructions on how to get started compiling FreeRDP can be found on the wiki: https://github.com/FreeRDP/FreeRDP/wiki/Compilation