From 71e78bedd7ac13f696151c5b5e94819c1d8ec4c7 Mon Sep 17 00:00:00 2001 From: akallabeth Date: Wed, 17 Apr 2024 21:56:37 +0200 Subject: [PATCH] [warnings] fixed sign and const * fix various char/BYTE sign warnings * fix various const warnings * fix format string size_t * remove unused CMake variables --- CMakeLists.txt | 7 --- channels/location/client/location_main.c | 8 +-- channels/rail/client/rail_main.c | 2 +- channels/rail/server/rail_main.c | 25 ++++---- channels/remdesk/client/remdesk_main.c | 2 +- client/Wayland/wlf_cliprdr.c | 13 +++- client/common/cmdline.c | 2 +- include/freerdp/rail.h | 6 +- libfreerdp/codec/h264_ffmpeg.c | 1 + libfreerdp/core/aad.c | 4 +- libfreerdp/core/gcc.c | 5 +- libfreerdp/crypto/privatekey.c | 4 +- libfreerdp/crypto/privatekey.h | 2 +- libfreerdp/emu/scard/smartcard_emulate.c | 4 +- .../primitives/test/TestPrimitivesYCoCg.c | 2 +- winpr/libwinpr/clipboard/synthetic.c | 2 +- .../libwinpr/crt/test/TestUnicodeConversion.c | 4 +- winpr/libwinpr/sspi/Kerberos/kerberos.c | 14 ++--- winpr/libwinpr/utils/debug.c | 2 +- winpr/libwinpr/utils/image.c | 60 ++++++++++--------- 20 files changed, 89 insertions(+), 80 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index aabdbfdd2..90780189e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -499,10 +499,6 @@ set(FFMPEG_FEATURE_TYPE "RECOMMENDED") set(FFMPEG_FEATURE_PURPOSE "multimedia") set(FFMPEG_FEATURE_DESCRIPTION "multimedia redirection, audio and video playback") -set(VAAPI_FEATURE_TYPE "OPTIONAL") -set(VAAPI_FEATURE_PURPOSE "multimedia") -set(VAAPI_FEATURE_DESCRIPTION "VA-API hardware acceleration for video playback") - set(OPENH264_FEATURE_TYPE "OPTIONAL") set(OPENH264_FEATURE_PURPOSE "codec") set(OPENH264_FEATURE_DESCRIPTION "use OpenH264 library") @@ -535,12 +531,10 @@ if(WIN32) set(WAYLAND_FEATURE_TYPE "DISABLED") set(PCSC_FEATURE_TYPE "DISABLED") set(FFMPEG_FEATURE_TYPE "OPTIONAL") - set(VAAPI_FEATURE_TYPE "DISABLED") endif() if(APPLE) set(FFMPEG_FEATURE_TYPE "OPTIONAL") - set(VAAPI_FEATURE_TYPE "DISABLED") set(WAYLAND_FEATURE_TYPE "DISABLED") if(IOS) set(PCSC_FEATURE_TYPE "DISABLED") @@ -550,7 +544,6 @@ endif() if(ANDROID) set(WAYLAND_FEATURE_TYPE "DISABLED") set(PCSC_FEATURE_TYPE "DISABLED") - set(VAAPI_FEATURE_TYPE "DISABLED") endif() find_feature(Wayland ${WAYLAND_FEATURE_TYPE} ${WAYLAND_FEATURE_PURPOSE} ${WAYLAND_FEATURE_DESCRIPTION}) diff --git a/channels/location/client/location_main.c b/channels/location/client/location_main.c index 281070f33..df6b82e5b 100644 --- a/channels/location/client/location_main.c +++ b/channels/location/client/location_main.c @@ -110,7 +110,7 @@ static UINT location_channel_send(IWTSVirtualChannel* channel, wStream* s) static UINT location_send_client_ready_pdu(const LOCATION_CALLBACK* callback) { wStream sbuffer = { 0 }; - char buffer[32] = { 0 }; + BYTE buffer[32] = { 0 }; wStream* s = Stream_StaticInit(&sbuffer, buffer, sizeof(buffer)); WINPR_ASSERT(s); @@ -210,7 +210,7 @@ static UINT location_send_base_location3d(IWTSVirtualChannel* channel, const RDPLOCATION_BASE_LOCATION3D_PDU* pdu) { wStream sbuffer = { 0 }; - char buffer[32] = { 0 }; + BYTE buffer[32] = { 0 }; wStream* s = Stream_StaticInit(&sbuffer, buffer, sizeof(buffer)); WINPR_ASSERT(s); WINPR_ASSERT(channel); @@ -251,7 +251,7 @@ static UINT location_send_location2d_delta(IWTSVirtualChannel* channel, const RDPLOCATION_LOCATION2D_DELTA_PDU* pdu) { wStream sbuffer = { 0 }; - char buffer[32] = { 0 }; + BYTE buffer[32] = { 0 }; wStream* s = Stream_StaticInit(&sbuffer, buffer, sizeof(buffer)); WINPR_ASSERT(s); @@ -287,7 +287,7 @@ static UINT location_send_location3d_delta(IWTSVirtualChannel* channel, const RDPLOCATION_LOCATION3D_DELTA_PDU* pdu) { wStream sbuffer = { 0 }; - char buffer[32] = { 0 }; + BYTE buffer[32] = { 0 }; wStream* s = Stream_StaticInit(&sbuffer, buffer, sizeof(buffer)); WINPR_ASSERT(s); diff --git a/channels/rail/client/rail_main.c b/channels/rail/client/rail_main.c index c5828c110..3878807ca 100644 --- a/channels/rail/client/rail_main.c +++ b/channels/rail/client/rail_main.c @@ -112,7 +112,7 @@ UINT rail_send_channel_data(railPlugin* rail, wStream* src) */ static UINT rail_client_execute(RailClientContext* context, const RAIL_EXEC_ORDER* exec) { - char* exeOrFile = NULL; + const char* exeOrFile = NULL; UINT error = 0; railPlugin* rail = NULL; UINT16 flags = 0; diff --git a/channels/rail/server/rail_main.c b/channels/rail/server/rail_main.c index 8e38c2bc8..50896465c 100644 --- a/channels/rail/server/rail_main.c +++ b/channels/rail/server/rail_main.c @@ -650,7 +650,7 @@ static UINT rail_read_client_status_order(wStream* s, RAIL_CLIENT_STATUS_ORDER* * * @return 0 on success, otherwise a Win32 error code */ -static UINT rail_read_exec_order(wStream* s, RAIL_EXEC_ORDER* exec) +static UINT rail_read_exec_order(wStream* s, RAIL_EXEC_ORDER* exec, char* args[]) { RAIL_EXEC_ORDER order = { 0 }; UINT16 exeLen = 0; @@ -671,30 +671,31 @@ static UINT rail_read_exec_order(wStream* s, RAIL_EXEC_ORDER* exec) if (exeLen > 0) { const SSIZE_T len = exeLen / sizeof(WCHAR); - exec->RemoteApplicationProgram = Stream_Read_UTF16_String_As_UTF8(s, len, NULL); + exec->RemoteApplicationProgram = args[0] = Stream_Read_UTF16_String_As_UTF8(s, len, NULL); if (!exec->RemoteApplicationProgram) goto fail; } if (workLen > 0) { const SSIZE_T len = workLen / sizeof(WCHAR); - exec->RemoteApplicationWorkingDir = Stream_Read_UTF16_String_As_UTF8(s, len, NULL); + exec->RemoteApplicationWorkingDir = args[1] = + Stream_Read_UTF16_String_As_UTF8(s, len, NULL); if (!exec->RemoteApplicationWorkingDir) goto fail; } if (argLen > 0) { const SSIZE_T len = argLen / sizeof(WCHAR); - exec->RemoteApplicationArguments = Stream_Read_UTF16_String_As_UTF8(s, len, NULL); + exec->RemoteApplicationArguments = args[2] = Stream_Read_UTF16_String_As_UTF8(s, len, NULL); if (!exec->RemoteApplicationArguments) goto fail; } return CHANNEL_RC_OK; fail: - free(exec->RemoteApplicationProgram); - free(exec->RemoteApplicationArguments); - free(exec->RemoteApplicationWorkingDir); + free(args[0]); + free(args[1]); + free(args[2]); *exec = order; return ERROR_INTERNAL_ERROR; } @@ -948,12 +949,14 @@ static UINT rail_recv_client_client_status_order(RailServerContext* context, static UINT rail_recv_client_exec_order(RailServerContext* context, wStream* s) { UINT error = 0; + char* args[3] = { 0 }; RAIL_EXEC_ORDER exec = { 0 }; if (!context || !s) return ERROR_INVALID_PARAMETER; - if ((error = rail_read_exec_order(s, &exec))) + error = rail_read_exec_order(s, &exec, args); + if (error) { WLog_ERR(TAG, "rail_read_client_status_order failed with error %" PRIu32 "!", error); return error; @@ -964,9 +967,9 @@ static UINT rail_recv_client_exec_order(RailServerContext* context, wStream* s) if (error) WLog_ERR(TAG, "context.Exec failed with error %" PRIu32 "", error); - free(exec.RemoteApplicationProgram); - free(exec.RemoteApplicationArguments); - free(exec.RemoteApplicationWorkingDir); + free(args[0]); + free(args[1]); + free(args[2]); return error; } diff --git a/channels/remdesk/client/remdesk_main.c b/channels/remdesk/client/remdesk_main.c index 1d39ed116..269e9a8ae 100644 --- a/channels/remdesk/client/remdesk_main.c +++ b/channels/remdesk/client/remdesk_main.c @@ -69,7 +69,7 @@ static UINT remdesk_virtual_channel_write(remdeskPlugin* remdesk, wStream* s) */ static UINT remdesk_generate_expert_blob(remdeskPlugin* remdesk) { - char* name = NULL; + const char* name = NULL; char* pass = NULL; const char* password = NULL; rdpSettings* settings = NULL; diff --git a/client/Wayland/wlf_cliprdr.c b/client/Wayland/wlf_cliprdr.c index f0c331837..112ffd169 100644 --- a/client/Wayland/wlf_cliprdr.c +++ b/client/Wayland/wlf_cliprdr.c @@ -70,6 +70,13 @@ typedef struct char* responseMime; } wlf_request; +typedef struct +{ + const FILE* responseFile; + UINT32 responseFormat; + const char* responseMime; +} wlf_const_request; + struct wlf_clipboard { wlfContext* wfc; @@ -311,7 +318,7 @@ static BOOL wlf_cliprdr_add_client_format(wfClipboard* clipboard, const char* mi * * @return 0 on success, otherwise a Win32 error code */ -static UINT wlf_cliprdr_send_data_request(wfClipboard* clipboard, const wlf_request* rq) +static UINT wlf_cliprdr_send_data_request(wfClipboard* clipboard, const wlf_const_request* rq) { WINPR_ASSERT(rq); @@ -522,7 +529,7 @@ static void wlf_cliprdr_transfer_data(UwacSeat* seat, void* context, const char* EnterCriticalSection(&clipboard->lock); - wlf_request request = { 0 }; + wlf_const_request request = { 0 }; if (wlf_mime_is_html(mime)) { request.responseMime = mime_html; @@ -720,7 +727,7 @@ wlf_cliprdr_server_format_data_request(CliprdrClientContext* context, const CLIPRDR_FORMAT_DATA_REQUEST* formatDataRequest) { UINT rc = CHANNEL_RC_OK; - BYTE* data = NULL; + char* data = NULL; size_t size = 0; const char* mime = NULL; UINT32 formatId = 0; diff --git a/client/common/cmdline.c b/client/common/cmdline.c index 01d5b37fc..8d24af722 100644 --- a/client/common/cmdline.c +++ b/client/common/cmdline.c @@ -5321,7 +5321,7 @@ static void argv_free(int* pargc, char** pargv[]) free(argv); } -static BOOL argv_append(int* pargc, char** pargv[], const char* what) +static BOOL argv_append(int* pargc, char** pargv[], char* what) { WINPR_ASSERT(pargc); WINPR_ASSERT(pargv); diff --git a/include/freerdp/rail.h b/include/freerdp/rail.h index b3cd702d4..64a01e51f 100644 --- a/include/freerdp/rail.h +++ b/include/freerdp/rail.h @@ -347,9 +347,9 @@ typedef struct typedef struct { UINT16 flags; - char* RemoteApplicationProgram; - char* RemoteApplicationWorkingDir; - char* RemoteApplicationArguments; + const char* RemoteApplicationProgram; + const char* RemoteApplicationWorkingDir; + const char* RemoteApplicationArguments; } RAIL_EXEC_ORDER; typedef struct diff --git a/libfreerdp/codec/h264_ffmpeg.c b/libfreerdp/codec/h264_ffmpeg.c index 54492e13a..a2ad12f51 100644 --- a/libfreerdp/codec/h264_ffmpeg.c +++ b/libfreerdp/codec/h264_ffmpeg.c @@ -636,6 +636,7 @@ static BOOL libavcodec_init(H264_CONTEXT* h264) goto fail_hwdevice_create; } } + WLog_Print(h264->log, WLOG_INFO, "Using VAAPI for accelerated H264 decoding"); sys->codecDecoderContext->get_format = libavcodec_get_format; sys->hw_pix_fmt = AV_PIX_FMT_VAAPI; diff --git a/libfreerdp/core/aad.c b/libfreerdp/core/aad.c index 15eabedf8..00593a039 100644 --- a/libfreerdp/core/aad.c +++ b/libfreerdp/core/aad.c @@ -716,11 +716,11 @@ static char* bn_to_base64_url(wLog* wlog, rdpPrivateKey* key, enum FREERDP_KEY_P WINPR_ASSERT(key); size_t len = 0; - char* bn = freerdp_key_get_param(key, param, &len); + BYTE* bn = freerdp_key_get_param(key, param, &len); if (!bn) return NULL; - char* b64 = (char*)crypto_base64url_encode(bn, len); + char* b64 = crypto_base64url_encode(bn, len); free(bn); if (!b64) diff --git a/libfreerdp/core/gcc.c b/libfreerdp/core/gcc.c index 733a76385..f2d035a9c 100644 --- a/libfreerdp/core/gcc.c +++ b/libfreerdp/core/gcc.c @@ -1765,6 +1765,9 @@ static BOOL gcc_update_server_random(rdpSettings* settings) */ BOOL gcc_write_server_security_data(wStream* s, rdpMcs* mcs) { + if (!gcc_update_server_random(mcs_get_settings(mcs))) + return FALSE; + const rdpSettings* settings = mcs_get_const_settings(mcs); WINPR_ASSERT(s); @@ -1779,8 +1782,6 @@ BOOL gcc_write_server_security_data(wStream* s, rdpMcs* mcs) if (settings->EncryptionMethods == ENCRYPTION_METHOD_NONE) return TRUE; - if (!gcc_update_server_random(settings)) - return FALSE; if (!Stream_EnsureRemainingCapacity(s, sizeof(UINT32) + settings->ServerRandomLength)) return FALSE; diff --git a/libfreerdp/crypto/privatekey.c b/libfreerdp/crypto/privatekey.c index 55379d4d6..9a6fb25fd 100644 --- a/libfreerdp/crypto/privatekey.c +++ b/libfreerdp/crypto/privatekey.c @@ -442,7 +442,7 @@ fail: return rc; } -char* freerdp_key_get_param(const rdpPrivateKey* key, enum FREERDP_KEY_PARAM param, size_t* plength) +BYTE* freerdp_key_get_param(const rdpPrivateKey* key, enum FREERDP_KEY_PARAM param, size_t* plength) { BYTE* buf = NULL; @@ -527,7 +527,7 @@ char* freerdp_key_get_param(const rdpPrivateKey* key, enum FREERDP_KEY_PARAM par fail: BN_free(bn); - return (char*)buf; + return buf; } WINPR_DIGEST_CTX* freerdp_key_digest_sign(rdpPrivateKey* key, WINPR_MD_TYPE digest) diff --git a/libfreerdp/crypto/privatekey.h b/libfreerdp/crypto/privatekey.h index 418abf590..b423c9a4b 100644 --- a/libfreerdp/crypto/privatekey.h +++ b/libfreerdp/crypto/privatekey.h @@ -52,7 +52,7 @@ extern "C" */ FREERDP_LOCAL EVP_PKEY* freerdp_key_get_evp_pkey(const rdpPrivateKey* key); - FREERDP_LOCAL char* freerdp_key_get_param(const rdpPrivateKey* key, + FREERDP_LOCAL BYTE* freerdp_key_get_param(const rdpPrivateKey* key, enum FREERDP_KEY_PARAM param, size_t* plength); FREERDP_LOCAL WINPR_DIGEST_CTX* freerdp_key_digest_sign(rdpPrivateKey* key, diff --git a/libfreerdp/emu/scard/smartcard_emulate.c b/libfreerdp/emu/scard/smartcard_emulate.c index d517bd659..6e21f17f0 100644 --- a/libfreerdp/emu/scard/smartcard_emulate.c +++ b/libfreerdp/emu/scard/smartcard_emulate.c @@ -38,8 +38,8 @@ #define MAX_CACHE_ITEM_SIZE 4096 #define MAX_CACHE_ITEM_VALUES 4096 -static const CHAR g_ReaderNameA[] = { 'F', 'r', 'e', 'e', 'R', 'D', 'P', ' ', 'E', - 'm', 'u', 'l', 'a', 't', 'o', 'r', '\0', '\0' }; +static CHAR g_ReaderNameA[] = { 'F', 'r', 'e', 'e', 'R', 'D', 'P', ' ', 'E', + 'm', 'u', 'l', 'a', 't', 'o', 'r', '\0', '\0' }; static INIT_ONCE g_ReaderNameWGuard = INIT_ONCE_STATIC_INIT; static WCHAR g_ReaderNameW[32] = { 0 }; static size_t g_ReaderNameWLen = 0; diff --git a/libfreerdp/primitives/test/TestPrimitivesYCoCg.c b/libfreerdp/primitives/test/TestPrimitivesYCoCg.c index 318aec6a4..10a87546d 100644 --- a/libfreerdp/primitives/test/TestPrimitivesYCoCg.c +++ b/libfreerdp/primitives/test/TestPrimitivesYCoCg.c @@ -76,7 +76,7 @@ static BOOL test_YCoCgRToRGB_8u_AC4R_func(UINT32 width, UINT32 height) if (c != sse) { - printf("optimized->YCoCgRToRGB FAIL[%s] [%" PRIu32 "]: 0x%08" PRIx32 + printf("optimized->YCoCgRToRGB FAIL[%s] [%" PRIuz "]: 0x%08" PRIx32 " -> C 0x%08" PRIx32 " vs optimized 0x%08" PRIx32 "\n", formatName, i, in[i + 1], c, sse); status = -1; diff --git a/winpr/libwinpr/clipboard/synthetic.c b/winpr/libwinpr/clipboard/synthetic.c index db8af7113..cae510674 100644 --- a/winpr/libwinpr/clipboard/synthetic.c +++ b/winpr/libwinpr/clipboard/synthetic.c @@ -379,7 +379,7 @@ static void* clipboard_synthesize_image_format_to_bmp(wClipboard* clipboard, UIN WINPR_ASSERT(data); WINPR_ASSERT(pSize); - void* dst = NULL; + BYTE* dst = NULL; const UINT32 SrcSize = *pSize; size_t size = 0; wImage* image = winpr_image_new(); diff --git a/winpr/libwinpr/crt/test/TestUnicodeConversion.c b/winpr/libwinpr/crt/test/TestUnicodeConversion.c index 187a068ae..eb0acb7c9 100644 --- a/winpr/libwinpr/crt/test/TestUnicodeConversion.c +++ b/winpr/libwinpr/crt/test/TestUnicodeConversion.c @@ -15,9 +15,9 @@ typedef struct { - char* utf8; + const char* utf8; size_t utf8len; - WCHAR* utf16; + const WCHAR* utf16; size_t utf16len; } testcase_t; diff --git a/winpr/libwinpr/sspi/Kerberos/kerberos.c b/winpr/libwinpr/sspi/Kerberos/kerberos.c index 3cf778639..cba8038ad 100644 --- a/winpr/libwinpr/sspi/Kerberos/kerberos.c +++ b/winpr/libwinpr/sspi/Kerberos/kerberos.c @@ -1496,7 +1496,7 @@ static SECURITY_STATUS SEC_ENTRY kerberos_EncryptMessage(PCtxtHandle phContext, KRB_CONTEXT* context = get_context(phContext); PSecBuffer sig_buffer = NULL; PSecBuffer data_buffer = NULL; - BYTE* header = NULL; + char* header = NULL; BYTE flags = 0; krb5glue_key key = NULL; krb5_keyusage usage = 0; @@ -1547,15 +1547,15 @@ static SECURITY_STATUS SEC_ENTRY kerberos_EncryptMessage(PCtxtHandle phContext, /* Set up the iov array in sig_buffer */ header = sig_buffer->pvBuffer; encrypt_iov[2].data.data = header + 16; - encrypt_iov[3].data.data = (BYTE*)encrypt_iov[2].data.data + encrypt_iov[2].data.length; - encrypt_iov[4].data.data = (BYTE*)encrypt_iov[3].data.data + encrypt_iov[3].data.length; - encrypt_iov[0].data.data = (BYTE*)encrypt_iov[4].data.data + encrypt_iov[4].data.length; + encrypt_iov[3].data.data = encrypt_iov[2].data.data + encrypt_iov[2].data.length; + encrypt_iov[4].data.data = encrypt_iov[3].data.data + encrypt_iov[3].data.length; + encrypt_iov[0].data.data = encrypt_iov[4].data.data + encrypt_iov[4].data.length; encrypt_iov[1].data.data = data_buffer->pvBuffer; /* Write the GSS header with 0 in RRC */ Data_Write_UINT16_BE(header, TOK_ID_WRAP); header[2] = flags; - header[3] = 0xFF; + header[3] = (char)0xFF; Data_Write_UINT32(header + 4, 0); Data_Write_UINT64_BE(header + 8, (context->local_seq + MessageSeqNo)); @@ -1656,8 +1656,8 @@ static SECURITY_STATUS SEC_ENTRY kerberos_DecryptMessage(PCtxtHandle phContext, iov[0].data.data = header + 16 + rrc + ec; iov[1].data.data = data_buffer->pvBuffer; iov[2].data.data = header + 16 + ec; - iov[3].data.data = (BYTE*)iov[2].data.data + iov[2].data.length; - iov[4].data.data = (BYTE*)iov[3].data.data + iov[3].data.length; + iov[3].data.data = iov[2].data.data + iov[2].data.length; + iov[4].data.data = iov[3].data.data + iov[3].data.length; if (krb_log_exec(krb5glue_decrypt_iov, context->ctx, key, usage, iov, ARRAYSIZE(iov))) return SEC_E_INTERNAL_ERROR; diff --git a/winpr/libwinpr/utils/debug.c b/winpr/libwinpr/utils/debug.c index a7c9a1374..42d916e0d 100644 --- a/winpr/libwinpr/utils/debug.c +++ b/winpr/libwinpr/utils/debug.c @@ -161,7 +161,7 @@ char** winpr_backtrace_symbols(void* buffer, size_t* used) *msgptr = msg; strncpy(msg, support_msg, len); *used = 1; - return ppmsg; + return msgptr; #endif } diff --git a/winpr/libwinpr/utils/image.c b/winpr/libwinpr/utils/image.c index cc2e2ad15..c60982571 100644 --- a/winpr/libwinpr/utils/image.c +++ b/winpr/libwinpr/utils/image.c @@ -52,12 +52,12 @@ #include "../log.h" #define TAG WINPR_TAG("utils.image") -static SSIZE_T winpr_convert_from_jpeg(const char* comp_data, size_t comp_data_bytes, UINT32* width, - UINT32* height, UINT32* bpp, char** ppdecomp_data); -static SSIZE_T winpr_convert_from_png(const char* comp_data, size_t comp_data_bytes, UINT32* width, - UINT32* height, UINT32* bpp, char** ppdecomp_data); -static SSIZE_T winpr_convert_from_webp(const char* comp_data, size_t comp_data_bytes, UINT32* width, - UINT32* height, UINT32* bpp, char** ppdecomp_data); +static SSIZE_T winpr_convert_from_jpeg(const BYTE* comp_data, size_t comp_data_bytes, UINT32* width, + UINT32* height, UINT32* bpp, BYTE** ppdecomp_data); +static SSIZE_T winpr_convert_from_png(const BYTE* comp_data, size_t comp_data_bytes, UINT32* width, + UINT32* height, UINT32* bpp, BYTE** ppdecomp_data); +static SSIZE_T winpr_convert_from_webp(const BYTE* comp_data, size_t comp_data_bytes, UINT32* width, + UINT32* height, UINT32* bpp, BYTE** ppdecomp_data); static BOOL writeBitmapFileHeader(wStream* s, const WINPR_BITMAP_FILE_HEADER* bf) { @@ -484,7 +484,7 @@ int winpr_image_read(wImage* image, const char* filename) if (pos > 0) { - char* buffer = malloc((size_t)pos); + BYTE* buffer = malloc((size_t)pos); if (buffer) { size_t r = fread(buffer, 1, (size_t)pos, fp); @@ -518,9 +518,8 @@ int winpr_image_read_buffer(wImage* image, const BYTE* buffer, size_t size) (sig[8] == 'W') && (sig[9] == 'E') && (sig[10] == 'B') && (sig[11] == 'P')) { image->type = WINPR_IMAGE_WEBP; - const SSIZE_T rc = - winpr_convert_from_webp((const char*)buffer, size, &image->width, &image->height, - &image->bitsPerPixel, ((char**)&image->data)); + const SSIZE_T rc = winpr_convert_from_webp(buffer, size, &image->width, &image->height, + &image->bitsPerPixel, &image->data); if (rc >= 0) { image->bytesPerPixel = (image->bitsPerPixel + 7) / 8; @@ -533,9 +532,8 @@ int winpr_image_read_buffer(wImage* image, const BYTE* buffer, size_t size) (sig[10] == 0x00)) { image->type = WINPR_IMAGE_JPEG; - const SSIZE_T rc = - winpr_convert_from_jpeg((const char*)buffer, size, &image->width, &image->height, - &image->bitsPerPixel, ((char**)&image->data)); + const SSIZE_T rc = winpr_convert_from_jpeg(buffer, size, &image->width, &image->height, + &image->bitsPerPixel, &image->data); if (rc >= 0) { image->bytesPerPixel = (image->bitsPerPixel + 7) / 8; @@ -547,9 +545,8 @@ int winpr_image_read_buffer(wImage* image, const BYTE* buffer, size_t size) (sig[4] == '\r') && (sig[5] == '\n') && (sig[6] == 0x1A) && (sig[7] == '\n')) { image->type = WINPR_IMAGE_PNG; - const SSIZE_T rc = - winpr_convert_from_png((const char*)buffer, size, &image->width, &image->height, - &image->bitsPerPixel, ((char**)&image->data)); + const SSIZE_T rc = winpr_convert_from_png(buffer, size, &image->width, &image->height, + &image->bitsPerPixel, &image->data); if (rc >= 0) { image->bytesPerPixel = (image->bitsPerPixel + 7) / 8; @@ -625,11 +622,11 @@ void* winpr_convert_to_jpeg(const void* data, size_t size, UINT32 width, UINT32 jpeg_start_compress(&cinfo, TRUE); - const unsigned char* cdata = data; + const JSAMPLE* cdata = data; for (size_t x = 0; x < height; x++) { const JDIMENSION offset = x * stride; - const JSAMPROW coffset = &cdata[offset]; + const JSAMPLE* coffset = &cdata[offset]; if (jpeg_write_scanlines(&cinfo, &coffset, 1) != 1) goto fail; } @@ -643,8 +640,8 @@ fail: #endif } -SSIZE_T winpr_convert_from_jpeg(const char* comp_data, size_t comp_data_bytes, UINT32* width, - UINT32* height, UINT32* bpp, char** ppdecomp_data) +SSIZE_T winpr_convert_from_jpeg(const BYTE* comp_data, size_t comp_data_bytes, UINT32* width, + UINT32* height, UINT32* bpp, BYTE** ppdecomp_data) { WINPR_ASSERT(comp_data || (comp_data_bytes == 0)); WINPR_ASSERT(width); @@ -658,7 +655,7 @@ SSIZE_T winpr_convert_from_jpeg(const char* comp_data, size_t comp_data_bytes, U struct jpeg_decompress_struct cinfo = { 0 }; struct jpeg_error_mgr jerr; SSIZE_T size = -1; - char* decomp_data = NULL; + BYTE* decomp_data = NULL; cinfo.err = jpeg_std_error(&jerr); jpeg_create_decompress(&cinfo); @@ -734,8 +731,8 @@ void* winpr_convert_to_webp(const void* data, size_t size, UINT32 width, UINT32 #endif } -SSIZE_T winpr_convert_from_webp(const char* comp_data, size_t comp_data_bytes, UINT32* width, - UINT32* height, UINT32* bpp, char** ppdecomp_data) +SSIZE_T winpr_convert_from_webp(const BYTE* comp_data, size_t comp_data_bytes, UINT32* width, + UINT32* height, UINT32* bpp, BYTE** ppdecomp_data) { WINPR_ASSERT(comp_data || (comp_data_bytes == 0)); WINPR_ASSERT(width); @@ -751,13 +748,20 @@ SSIZE_T winpr_convert_from_webp(const char* comp_data, size_t comp_data_bytes, U return -1; #else - uint8_t* dst = WebPDecodeBGRA(comp_data, comp_data_bytes, width, height); - if (!dst) + int w = 0; + int h = 0; + uint8_t* dst = WebPDecodeBGRA(comp_data, comp_data_bytes, &w, &h); + if (!dst || (w < 0) || (h < 0)) + { + free(dst); return -1; + } + *width = w; + *height = h; *bpp = 32; *ppdecomp_data = dst; - return (*width) * (*height) * 4; + return 4ll * w * h; #endif } @@ -1006,8 +1010,8 @@ void* winpr_convert_to_png(const void* data, size_t size, UINT32 width, UINT32 h #endif } -SSIZE_T winpr_convert_from_png(const char* comp_data, size_t comp_data_bytes, UINT32* width, - UINT32* height, UINT32* bpp, char** ppdecomp_data) +SSIZE_T winpr_convert_from_png(const BYTE* comp_data, size_t comp_data_bytes, UINT32* width, + UINT32* height, UINT32* bpp, BYTE** ppdecomp_data) { #if defined(WINPR_UTILS_IMAGE_PNG) size_t len = 0;