Update to 2.6.1

This commit is contained in:
Ondrej Holy 2022-03-11 08:58:48 +01:00
parent a957eed4f4
commit 3a62f0cfae
6 changed files with 255 additions and 2 deletions

1
.gitignore vendored
View File

@ -52,3 +52,4 @@
/FreeRDP-2.4.0.tar.gz /FreeRDP-2.4.0.tar.gz
/FreeRDP-2.4.1.tar.gz /FreeRDP-2.4.1.tar.gz
/FreeRDP-2.5.0.tar.gz /FreeRDP-2.5.0.tar.gz
/FreeRDP-2.6.1.tar.gz

View File

@ -0,0 +1,121 @@
From 631e71bebd041fbac2932555f17de050f6def91f Mon Sep 17 00:00:00 2001
From: Armin Novak <armin.novak@thincast.com>
Date: Tue, 8 Mar 2022 15:01:09 +0100
Subject: [PATCH] Added more log messages for SurfaceCommand failures
(cherry picked from commit c6f204091291990f85c23450778fcab35571eed5)
---
libfreerdp/core/surface.c | 40 ++++++++++++++++++++++++++++++++++++---
1 file changed, 37 insertions(+), 3 deletions(-)
diff --git a/libfreerdp/core/surface.c b/libfreerdp/core/surface.c
index ca89d230c..a99da01f3 100644
--- a/libfreerdp/core/surface.c
+++ b/libfreerdp/core/surface.c
@@ -37,7 +37,11 @@ static BOOL update_recv_surfcmd_bitmap_header_ex(wStream* s, TS_COMPRESSED_BITMA
return FALSE;
if (Stream_GetRemainingLength(s) < 24)
+ {
+ WLog_ERR(TAG, "got %" PRIuz ", expected %" PRIuz " bytes", Stream_GetRemainingLength(s),
+ 24);
return FALSE;
+ }
Stream_Read_UINT32(s, header->highUniqueId);
Stream_Read_UINT32(s, header->lowUniqueId);
@@ -54,7 +58,11 @@ static BOOL update_recv_surfcmd_bitmap_ex(wStream* s, TS_BITMAP_DATA_EX* bmp)
return FALSE;
if (Stream_GetRemainingLength(s) < 12)
+ {
+ WLog_ERR(TAG, "got %" PRIuz ", expected %" PRIuz " bytes", Stream_GetRemainingLength(s),
+ 12);
return FALSE;
+ }
Stream_Read_UINT8(s, bmp->bpp);
Stream_Read_UINT8(s, bmp->flags);
@@ -86,7 +94,11 @@ static BOOL update_recv_surfcmd_bitmap_ex(wStream* s, TS_BITMAP_DATA_EX* bmp)
}
if (Stream_GetRemainingLength(s) < bmp->bitmapDataLength)
+ {
+ WLog_ERR(TAG, "expected bitmapDataLength %" PRIu32 ", not enough data",
+ bmp->bitmapDataLength);
return FALSE;
+ }
pos = Stream_GetPosition(s) + bmp->bitmapDataLength;
bmp->bitmapData = Stream_Pointer(s);
@@ -132,7 +144,10 @@ static BOOL update_recv_surfcmd_surface_bits(rdpUpdate* update, wStream* s, UINT
SURFACE_BITS_COMMAND cmd = { 0 };
if (Stream_GetRemainingLength(s) < 8)
+ {
+ WLog_ERR(TAG, "got %" PRIuz ", expected %" PRIuz " bytes", Stream_GetRemainingLength(s), 8);
goto fail;
+ }
cmd.cmdType = cmdType;
Stream_Read_UINT16(s, cmd.destLeft);
@@ -152,7 +167,12 @@ static BOOL update_recv_surfcmd_surface_bits(rdpUpdate* update, wStream* s, UINT
goto fail;
}
- return update->SurfaceBits(update->context, &cmd);
+ if (!update->SurfaceBits(update->context, &cmd))
+ {
+ WLog_DBG(TAG, "update->SurfaceBits implementation failed");
+ goto fail;
+ }
+ return TRUE;
fail:
return FALSE;
}
@@ -162,7 +182,10 @@ static BOOL update_recv_surfcmd_frame_marker(rdpUpdate* update, wStream* s)
SURFACE_FRAME_MARKER marker;
if (Stream_GetRemainingLength(s) < 6)
+ {
+ WLog_ERR(TAG, "got %" PRIuz ", expected %" PRIuz " bytes", Stream_GetRemainingLength(s), 6);
return FALSE;
+ }
Stream_Read_UINT16(s, marker.frameAction);
Stream_Read_UINT32(s, marker.frameId);
@@ -176,7 +199,13 @@ static BOOL update_recv_surfcmd_frame_marker(rdpUpdate* update, wStream* s)
return FALSE;
}
- return update->SurfaceFrameMarker(update->context, &marker);
+ if (!update->SurfaceFrameMarker(update->context, &marker))
+ {
+ WLog_DBG(TAG, "update->SurfaceFrameMarker implementation failed");
+ return FALSE;
+ }
+
+ return TRUE;
}
int update_recv_surfcmds(rdpUpdate* update, wStream* s)
@@ -246,10 +275,15 @@ static BOOL update_write_surfcmd_bitmap_ex(wStream* s, const TS_BITMAP_DATA_EX*
if (!Stream_EnsureRemainingCapacity(s, 12))
return FALSE;
+ if (bmp->codecID > UINT8_MAX)
+ {
+ WLog_ERR(TAG, "Invalid TS_BITMAP_DATA_EX::codecID=0x%04" PRIx16 "", bmp->codecID);
+ return FALSE;
+ }
Stream_Write_UINT8(s, bmp->bpp);
Stream_Write_UINT8(s, bmp->flags);
Stream_Write_UINT8(s, 0); /* reserved1, reserved2 */
- Stream_Write_UINT8(s, bmp->codecID);
+ Stream_Write_UINT8(s, (UINT8)bmp->codecID);
Stream_Write_UINT16(s, bmp->width);
Stream_Write_UINT16(s, bmp->height);
Stream_Write_UINT32(s, bmp->bitmapDataLength);
--
2.35.1

View File

@ -0,0 +1,79 @@
From baf35cece9ff369d27deae1fed23d56907d82c31 Mon Sep 17 00:00:00 2001
From: Armin Novak <armin.novak@thincast.com>
Date: Thu, 29 Jul 2021 13:26:05 +0200
Subject: [PATCH] Implemented #4341: Default to /network:auto
If no arguments are supplied, default to the behaviour of
/network:auto. This ensures the default experience is using the
best available graphics options.
As soon as any /network, /bpp, /rfx, /gfx, ... argument is used
only use these.
(cherry picked from commit d3168a1436eefe6864727991b18e458c2d6c87b3)
---
client/common/cmdline.c | 28 ++++++++++++++++++++++++++++
1 file changed, 28 insertions(+)
diff --git a/client/common/cmdline.c b/client/common/cmdline.c
index 15d481387..453a38c5f 100644
--- a/client/common/cmdline.c
+++ b/client/common/cmdline.c
@@ -27,6 +27,8 @@
#include <assert.h>
#include <errno.h>
+#include <assert.h>
+
#include <winpr/crt.h>
#include <winpr/wlog.h>
#include <winpr/path.h>
@@ -46,6 +48,8 @@
#include "cmdline.h"
#include <freerdp/log.h>
+
+#define WINPR_ASSERT(x) assert(x)
#define TAG CLIENT_TAG("common.cmdline")
static BOOL freerdp_client_print_codepages(const char* arg)
@@ -1567,6 +1571,28 @@ static BOOL parseSizeValue(const char* input, unsigned long* v1, unsigned long*
return TRUE;
}
+static BOOL prepare_default_settings(rdpSettings* settings, const COMMAND_LINE_ARGUMENT_A* args,
+ BOOL rdp_file)
+{
+ size_t x;
+ const char* arguments[] = { "network", "gfx", "rfx", "bpp" };
+ WINPR_ASSERT(settings);
+ WINPR_ASSERT(args);
+
+ if (rdp_file)
+ return FALSE;
+
+ for (x = 0; x < ARRAYSIZE(arguments); x++)
+ {
+ const char* arg = arguments[x];
+ COMMAND_LINE_ARGUMENT_A* p = CommandLineFindArgumentA(args, arg);
+ if (p && (p->Flags & COMMAND_LINE_ARGUMENT_PRESENT))
+ return FALSE;
+ }
+
+ return freerdp_set_connection_type(settings, CONNECTION_TYPE_AUTODETECT);
+}
+
int freerdp_client_settings_parse_command_line_arguments(rdpSettings* settings, int argc,
char** argv, BOOL allowUnknown)
{
@@ -1637,6 +1663,8 @@ int freerdp_client_settings_parse_command_line_arguments(rdpSettings* settings,
if (status < 0)
return status;
+
+ prepare_default_settings(settings, largs, ext);
}
CommandLineFindArgumentA(largs, "v");
--
2.35.1

View File

@ -0,0 +1,45 @@
From 6462eca724a886e8c1abb5b41955108023d1c1e6 Mon Sep 17 00:00:00 2001
From: Armin Novak <armin.novak@thincast.com>
Date: Wed, 9 Mar 2022 09:01:11 +0100
Subject: [PATCH] Workaround for [MS-RDPBCGR] 2.2.9.2.3 Frame Marker Command
(TS_FRAME_MARKER)
Connections with windows 2016 and 2019 sometimes receive short
frame marker. Ignore these to prevent disconnects
(cherry picked from commit 91ef44ed35c99c409d39f6c480592f8601b45e35)
---
libfreerdp/core/surface.c | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)
diff --git a/libfreerdp/core/surface.c b/libfreerdp/core/surface.c
index a99da01f3..e288799f1 100644
--- a/libfreerdp/core/surface.c
+++ b/libfreerdp/core/surface.c
@@ -181,14 +181,21 @@ static BOOL update_recv_surfcmd_frame_marker(rdpUpdate* update, wStream* s)
{
SURFACE_FRAME_MARKER marker;
- if (Stream_GetRemainingLength(s) < 6)
+ if (Stream_GetRemainingLength(s) < 2)
{
WLog_ERR(TAG, "got %" PRIuz ", expected %" PRIuz " bytes", Stream_GetRemainingLength(s), 6);
return FALSE;
}
Stream_Read_UINT16(s, marker.frameAction);
- Stream_Read_UINT32(s, marker.frameId);
+ if (Stream_GetRemainingLength(s) < 4)
+ WLog_WARN(TAG,
+ "[SERVER-BUG]: got %" PRIuz ", expected %" PRIuz
+ " bytes. [MS-RDPBCGR] 2.2.9.2.3 Frame Marker Command (TS_FRAME_MARKER) is "
+ "missing frameId, ignoring",
+ Stream_GetRemainingLength(s), 4);
+ else
+ Stream_Read_UINT32(s, marker.frameId);
WLog_Print(update->log, WLOG_DEBUG,
"SurfaceFrameMarker: action: %s (%" PRIu32 ") id: %" PRIu32 "",
(!marker.frameAction) ? "Begin" : "End", marker.frameAction, marker.frameId);
--
2.35.1

View File

@ -21,7 +21,7 @@
%endif %endif
Name: freerdp Name: freerdp
Version: 2.5.0 Version: 2.6.1
Release: 1%{?dist} Release: 1%{?dist}
Epoch: 2 Epoch: 2
Summary: Free implementation of the Remote Desktop Protocol (RDP) Summary: Free implementation of the Remote Desktop Protocol (RDP)
@ -30,6 +30,10 @@ URL: http://www.freerdp.com/
Source0: https://github.com/FreeRDP/FreeRDP/archive/%{version}/FreeRDP-%{version}.tar.gz Source0: https://github.com/FreeRDP/FreeRDP/archive/%{version}/FreeRDP-%{version}.tar.gz
Patch0: Added-more-log-messages-for-SurfaceCommand-failures.patch
Patch1: Implemented-4341-Default-to-network-auto.patch
Patch2: Workaround-for-MS-RDPBCGR-2.2.9.2.3-Frame-Marker-Com.patch
BuildRequires: gcc BuildRequires: gcc
BuildRequires: gcc-c++ BuildRequires: gcc-c++
BuildRequires: alsa-lib-devel BuildRequires: alsa-lib-devel
@ -295,6 +299,9 @@ find %{buildroot} -name "*.a" -delete
%{_libdir}/pkgconfig/winpr-tools2.pc %{_libdir}/pkgconfig/winpr-tools2.pc
%changelog %changelog
* Fri Mar 11 2022 Ondrej Holy <oholy@redhat.com> - 2:2.6.1-1
- Update to 2.6.1.
* Thu Feb 03 2022 Ondrej Holy <oholy@redhat.com> - 2:2.5.0-1 * Thu Feb 03 2022 Ondrej Holy <oholy@redhat.com> - 2:2.5.0-1
- Update to 2.5.0. - Update to 2.5.0.

View File

@ -1 +1 @@
SHA512 (FreeRDP-2.5.0.tar.gz) = 7720306c8d0915578f6758f46ba0e0b8a81bbdcd1c80e08711576605142467f6735f644099e79a05113959fb30cd1070ca138a523537a41a7102880daf89c04c SHA512 (FreeRDP-2.6.1.tar.gz) = 53ca93dfc09cfb49f9c434ef492a7c2f0359ecfdb28c68fcb41d5875508da45cc62e054dc134577245a3a5a63102bdb89e50aeed3090f01b578879c5d5db6dca