From 169971607cece48384cb94632b829bd57336af0f Mon Sep 17 00:00:00 2001
From: Armin Novak <armin.novak@thincast.com>
Date: Tue, 17 Feb 2026 08:38:04 +0100
Subject: [PATCH] [codec,nsc] fix use of nsc_process_message

the second width/height argument should reflect the destination buffer
pixel size
---
 libfreerdp/codec/clear.c | 10 ++++++----
 libfreerdp/codec/nsc.c   | 12 +++++++-----
 libfreerdp/gdi/gdi.c     |  5 +++--
 3 files changed, 16 insertions(+), 11 deletions(-)

Index: FreeRDP-2.4.0/libfreerdp/codec/clear.c
===================================================================
--- FreeRDP-2.4.0.orig/libfreerdp/codec/clear.c
+++ FreeRDP-2.4.0/libfreerdp/codec/clear.c
@@ -103,7 +103,8 @@ static BOOL convert_color(BYTE* dst, UIN
 
 static BOOL clear_decompress_nscodec(NSC_CONTEXT* nsc, UINT32 width, UINT32 height, wStream* s,
                                      UINT32 bitmapDataByteCount, BYTE* pDstData, UINT32 DstFormat,
-                                     UINT32 nDstStep, UINT32 nXDstRel, UINT32 nYDstRel)
+                                     UINT32 nDstStep, UINT32 nXDstRel, UINT32 nYDstRel,
+                                     UINT32 nDstWidth, UINT32 nDstHeight)
 {
 	BOOL rc;
 
@@ -115,8 +116,8 @@ static BOOL clear_decompress_nscodec(NSC
 	}
 
 	rc = nsc_process_message(nsc, 32, width, height, Stream_Pointer(s), bitmapDataByteCount,
-	                         pDstData, DstFormat, nDstStep, nXDstRel, nYDstRel, width, height,
-	                         FREERDP_FLIP_NONE);
+	                         pDstData, DstFormat, nDstStep, nXDstRel, nYDstRel, nDstWidth,
+	                         nDstHeight, FREERDP_FLIP_NONE);
 	Stream_Seek(s, bitmapDataByteCount);
 	return rc;
 }
@@ -547,7 +548,8 @@ static BOOL clear_decompress_subcodecs_d
 
 			case 1: /* NSCodec */
 				if (!clear_decompress_nscodec(clear->nsc, width, height, s, bitmapDataByteCount,
-				                              pDstData, DstFormat, nDstStep, nXDstRel, nYDstRel))
+				                              pDstData, DstFormat, nDstStep, nXDstRel, nYDstRel,
+				                              nDstWidth, nDstHeight))
 					return FALSE;
 
 				break;
Index: FreeRDP-2.4.0/libfreerdp/codec/nsc.c
===================================================================
--- FreeRDP-2.4.0.orig/libfreerdp/codec/nsc.c
+++ FreeRDP-2.4.0/libfreerdp/codec/nsc.c
@@ -448,8 +448,17 @@ BOOL nsc_process_message(NSC_CONTEXT* co
 {
 	wStream* s;
 	BOOL ret;
+
+	WINPR_ASSERT(context);
+	WINPR_ASSERT(context->priv);
+
 	if (!context || !data || !pDstData)
+	if (!data || !pDstData)
+    {
+		WLog_Print(context->priv->log, WLOG_ERROR, "Invalid argument: data=%p, pDstData=%p",
+		           (const void*)data, (void*)pDstData);
 		return FALSE;
+    }
 
 	s = Stream_New((BYTE*)data, length);
 
