diff --git a/.clang-tidy b/.clang-tidy index d843dc2d3..e4e1981bd 100644 --- a/.clang-tidy +++ b/.clang-tidy @@ -56,6 +56,7 @@ Checks: > -hicpp-uppercase-literal-suffix, -hicpp-vararg, -hicpp-no-malloc, + -llvm-use-ranges, -llvm-header-guard, -llvm-include-order, -llvm-qualified-auto, @@ -63,6 +64,7 @@ Checks: > -readability-else-after-return, -readability-avoid-nested-conditional-operator, -modernize-use-using, + -modernize-avoid-variadic-functions, -modernize-use-trailing-return-type, -modernize-return-braced-init-list, -modernize-macro-to-enum, @@ -78,6 +80,7 @@ Checks: > -readability-math-missing-parentheses, -readability-misleading-indentation, -readability-qualified-auto, + -readability-redundant-parentheses, -readability-suspicious-call-argument, -readability-string-compare, -readability-uppercase-literal-suffix, diff --git a/channels/audin/client/pulse/audin_pulse.c b/channels/audin/client/pulse/audin_pulse.c index bc6367d45..2a42d495a 100644 --- a/channels/audin/client/pulse/audin_pulse.c +++ b/channels/audin/client/pulse/audin_pulse.c @@ -139,7 +139,7 @@ static UINT audin_pulse_connect(IAudinDevice* device) if (!pulse->context) return ERROR_INVALID_PARAMETER; - if (pa_context_connect(pulse->context, NULL, 0, NULL)) + if (pa_context_connect(pulse->context, NULL, PA_CONTEXT_NOFLAGS, NULL)) { WLog_Print(pulse->log, WLOG_ERROR, "pa_context_connect failed (%d)", pa_context_errno(pulse->context)); @@ -253,7 +253,6 @@ static BOOL audin_pulse_format_supported(IAudinDevice* device, const AUDIO_FORMA static UINT audin_pulse_set_format(IAudinDevice* device, const AUDIO_FORMAT* format, UINT32 FramesPerPacket) { - pa_sample_spec sample_spec = { 0 }; AudinPulseDevice* pulse = (AudinPulseDevice*)device; if (!pulse || !format) @@ -265,21 +264,18 @@ static UINT audin_pulse_set_format(IAudinDevice* device, const AUDIO_FORMAT* for if (FramesPerPacket > 0) pulse->frames_per_packet = FramesPerPacket; - sample_spec.rate = format->nSamplesPerSec; - - sample_spec.channels = WINPR_ASSERTING_INT_CAST(uint8_t, format->nChannels); - + pa_sample_format_t sformat = PA_SAMPLE_INVALID; switch (format->wFormatTag) { case WAVE_FORMAT_PCM: /* PCM */ switch (format->wBitsPerSample) { case 8: - sample_spec.format = PA_SAMPLE_U8; + sformat = PA_SAMPLE_U8; break; case 16: - sample_spec.format = PA_SAMPLE_S16LE; + sformat = PA_SAMPLE_S16LE; break; default: @@ -292,6 +288,12 @@ static UINT audin_pulse_set_format(IAudinDevice* device, const AUDIO_FORMAT* for return ERROR_INTERNAL_ERROR; } + const pa_sample_spec sample_spec = { + .format = sformat, + .rate = format->nSamplesPerSec, + .channels = WINPR_ASSERTING_INT_CAST(uint8_t, format->nChannels), + }; + pulse->sample_spec = sample_spec; pulse->format = *format; return CHANNEL_RC_OK; diff --git a/channels/rdpear/client/rdpear_main.c b/channels/rdpear/client/rdpear_main.c index cff382701..e7c8792f0 100644 --- a/channels/rdpear/client/rdpear_main.c +++ b/channels/rdpear/client/rdpear_main.c @@ -394,9 +394,9 @@ static char* KERB_RPC_UNICODESTR_to_charptr(const RPC_UNICODE_STRING* src) static BOOL extractAuthData(const KERB_ASN1_DATA* src, krb5_authdata* authData, BOOL* haveData) { - WinPrAsn1Decoder dec = { 0 }; - WinPrAsn1Decoder dec2 = { 0 }; - WinPrAsn1Decoder dec3 = { 0 }; + WinPrAsn1Decoder dec = { .encoding = WINPR_ASN1_BER, { 0 } }; + WinPrAsn1Decoder dec2 = { .encoding = WINPR_ASN1_BER, { 0 } }; + WinPrAsn1Decoder dec3 = { .encoding = WINPR_ASN1_BER, { 0 } }; WinPrAsn1Decoder_InitMem(&dec, WINPR_ASN1_DER, src->Asn1Buffer, src->Asn1BufferHints.count); BOOL error = FALSE; WinPrAsn1_INTEGER adType = 0; @@ -429,8 +429,8 @@ static BOOL extractAuthData(const KERB_ASN1_DATA* src, krb5_authdata* authData, static BOOL extractChecksum(const KERB_ASN1_DATA* src, krb5_checksum* dst) { - WinPrAsn1Decoder dec = { 0 }; - WinPrAsn1Decoder dec2 = { 0 }; + WinPrAsn1Decoder dec = { .encoding = WINPR_ASN1_BER, { 0 } }; + WinPrAsn1Decoder dec2 = { .encoding = WINPR_ASN1_BER, { 0 } }; WinPrAsn1Decoder_InitMem(&dec, WINPR_ASN1_DER, src->Asn1Buffer, src->Asn1BufferHints.count); BOOL error = FALSE; WinPrAsn1_OctetString os; @@ -626,8 +626,8 @@ out: static BOOL rdpear_findEncryptedData(const KERB_ASN1_DATA* src, int* penctype, krb5_data* data) { - WinPrAsn1Decoder dec = { 0 }; - WinPrAsn1Decoder dec2 = { 0 }; + WinPrAsn1Decoder dec = { .encoding = WINPR_ASN1_BER, { 0 } }; + WinPrAsn1Decoder dec2 = { .encoding = WINPR_ASN1_BER, { 0 } }; WinPrAsn1Decoder_InitMem(&dec, WINPR_ASN1_DER, src->Asn1Buffer, src->Asn1BufferHints.count); BOOL error = FALSE; WinPrAsn1_INTEGER encType = 0; @@ -974,8 +974,8 @@ static UINT rdpear_on_data_received(IWTSVirtualChannelCallback* pChannelCallback if (!freerdp_nla_decrypt(rdpear->rdp_context, &inBuffer, &decrypted)) goto out; - WinPrAsn1Decoder dec = { 0 }; - WinPrAsn1Decoder dec2 = { 0 }; + WinPrAsn1Decoder dec = { .encoding = WINPR_ASN1_BER, { 0 } }; + WinPrAsn1Decoder dec2 = { .encoding = WINPR_ASN1_BER, { 0 } }; wStream decodedStream = { 0 }; Stream_StaticInit(&decodedStream, decrypted.pvBuffer, decrypted.cbBuffer); WinPrAsn1Decoder_Init(&dec, WINPR_ASN1_DER, &decodedStream); diff --git a/channels/rdpecam/CMakeLists.txt b/channels/rdpecam/CMakeLists.txt index 525d8d041..19fd20f1d 100644 --- a/channels/rdpecam/CMakeLists.txt +++ b/channels/rdpecam/CMakeLists.txt @@ -18,12 +18,14 @@ define_channel("rdpecam") if(WITH_SERVER_CHANNELS) + include_directories(common) add_channel_server(${MODULE_PREFIX} ${CHANNEL_NAME}) endif() if(WITH_CLIENT_CHANNELS) option(RDPECAM_CLIENT_CHANNEL_STUB "Only build [MS-RDPECAM] channel stub" OFF) if(NOT RDPECAM_CLIENT_CHANNEL_STUB) + include_directories(common) add_channel_client(${MODULE_PREFIX} ${CHANNEL_NAME}) endif() endif() diff --git a/channels/rdpecam/client/camera.h b/channels/rdpecam/client/camera.h index 35b5fbc7d..ef7375874 100644 --- a/channels/rdpecam/client/camera.h +++ b/channels/rdpecam/client/camera.h @@ -155,7 +155,7 @@ typedef UINT (*ICamHalEnumCallback)(CameraPlugin* ecam, GENERIC_CHANNEL_CALLBACK const char* deviceId, const char* deviceName); /* may run in context of different thread */ -typedef UINT (*ICamHalSampleCapturedCallback)(CameraDevice* dev, int streamIndex, +typedef UINT (*ICamHalSampleCapturedCallback)(CameraDevice* dev, size_t streamIndex, const BYTE* sample, size_t size); /** @brief interface to implement for the camera HAL*/ @@ -181,7 +181,7 @@ struct s_ICamHal * @return if the operation was successful * @since 3.18.0 */ - BOOL (*Activate)(ICamHal* ihal, const char* deviceId, UINT32* errorCode); + BOOL (*Activate)(ICamHal* ihal, const char* deviceId, CAM_ERROR_CODE* errorCode); /** * callback to deactivate a given camera device @@ -191,7 +191,7 @@ struct s_ICamHal * @return if the operation was successful * @since 3.18.0 */ - BOOL (*Deactivate)(ICamHal* ihal, const char* deviceId, UINT32* errorCode); + BOOL (*Deactivate)(ICamHal* ihal, const char* deviceId, CAM_ERROR_CODE* errorCode); /** * callback that returns the list of compatible media types given a set of supported formats @@ -205,7 +205,7 @@ struct s_ICamHal * @return number of matched supported formats */ INT16(*GetMediaTypeDescriptions) - (ICamHal* ihal, const char* deviceId, int streamIndex, + (ICamHal* ihal, const char* deviceId, size_t streamIndex, const CAM_MEDIA_FORMAT_INFO* supportedFormats, size_t nSupportedFormats, CAM_MEDIA_TYPE_DESCRIPTION* mediaTypes, size_t* nMediaTypes); @@ -216,27 +216,27 @@ struct s_ICamHal * @param streamIndex stream index number * @param mediaType * @param callback - * @return 0 on success, a CAM_Error otherwise + * @return \b CAM_ERROR_CODE_None on success, a CAM_Error otherwise */ - UINT(*StartStream) - (ICamHal* ihal, CameraDevice* dev, int streamIndex, const CAM_MEDIA_TYPE_DESCRIPTION* mediaType, - ICamHalSampleCapturedCallback callback); + CAM_ERROR_CODE(*StartStream) + (ICamHal* ihal, CameraDevice* dev, size_t streamIndex, + const CAM_MEDIA_TYPE_DESCRIPTION* mediaType, ICamHalSampleCapturedCallback callback); /** * callback to stop a stream * @param ihal the hal interface * @param deviceId the name of the device * @param streamIndex stream index number - * @return 0 on success, a CAM_Error otherwise + * @return \b CAM_ERROR_CODE_None on success, a CAM_Error otherwise */ - UINT (*StopStream)(ICamHal* ihal, const char* deviceId, int streamIndex); + CAM_ERROR_CODE (*StopStream)(ICamHal* ihal, const char* deviceId, size_t streamIndex); /** * callback to free the ICamHal * @param hal the hal interface - * @return 0 on success, a CAM_Error otherwise + * @return \b CAM_ERROR_CODE_None on success, a CAM_Error otherwise */ - UINT (*Free)(ICamHal* ihal); + CAM_ERROR_CODE (*Free)(ICamHal* ihal); }; typedef UINT (*PREGISTERCAMERAHAL)(IWTSPlugin* plugin, ICamHal* hal); diff --git a/channels/rdpecam/client/camera_device_main.c b/channels/rdpecam/client/camera_device_main.c index 57c52d83f..64dd33d55 100644 --- a/channels/rdpecam/client/camera_device_main.c +++ b/channels/rdpecam/client/camera_device_main.c @@ -22,6 +22,7 @@ #include #include "camera.h" +#include "rdpecam-utils.h" #define TAG CHANNELS_TAG("rdpecam-device.client") @@ -64,14 +65,22 @@ static BOOL ecam_dev_read_media_type(wStream* s, CAM_MEDIA_TYPE_DESCRIPTION* med { WINPR_ASSERT(mediaType); - Stream_Read_UINT8(s, mediaType->Format); + const uint8_t format = Stream_Get_UINT8(s); + if (!rdpecam_valid_CamMediaFormat(format)) + return FALSE; + + mediaType->Format = WINPR_ASSERTING_INT_CAST(CAM_MEDIA_FORMAT, format); Stream_Read_UINT32(s, mediaType->Width); Stream_Read_UINT32(s, mediaType->Height); Stream_Read_UINT32(s, mediaType->FrameRateNumerator); Stream_Read_UINT32(s, mediaType->FrameRateDenominator); Stream_Read_UINT32(s, mediaType->PixelAspectRatioNumerator); Stream_Read_UINT32(s, mediaType->PixelAspectRatioDenominator); - Stream_Read_UINT8(s, mediaType->Flags); + + const uint8_t flags = Stream_Get_UINT8(s); + if (!rdpecam_valid_MediaTypeDescriptionFlags(flags)) + return FALSE; + mediaType->Flags = WINPR_ASSERTING_INT_CAST(CAM_MEDIA_TYPE_DESCRIPTION_FLAGS, flags); return TRUE; } @@ -163,12 +172,12 @@ static UINT ecam_dev_send_pending(CameraDevice* dev, size_t streamIndex, CameraD return ecam_dev_send_sample_response(dev, streamIndex, encodedSample, encodedSize); } -static UINT ecam_dev_sample_captured_callback(CameraDevice* dev, int streamIndex, +static UINT ecam_dev_sample_captured_callback(CameraDevice* dev, size_t streamIndex, const BYTE* sample, size_t size) { WINPR_ASSERT(dev); - if ((streamIndex >= ECAM_DEVICE_MAX_STREAMS) || (streamIndex < 0)) + if (streamIndex >= ECAM_DEVICE_MAX_STREAMS) return ERROR_INVALID_INDEX; CameraDeviceStream* stream = &dev->streams[streamIndex]; @@ -228,7 +237,7 @@ static UINT ecam_dev_sample_captured_callback(CameraDevice* dev, int streamIndex Stream_SealLength(stream->pendingSample); stream->haveSample = TRUE; - ret = ecam_dev_send_pending(dev, WINPR_ASSERTING_INT_CAST(size_t, streamIndex), stream); + ret = ecam_dev_send_pending(dev, streamIndex, stream); out: LeaveCriticalSection(&stream->lock); @@ -367,8 +376,8 @@ static UINT ecam_dev_process_start_streams_request(CameraDevice* dev, return ERROR_INVALID_DATA; } - UINT error = dev->ihal->StartStream(dev->ihal, dev, streamIndex, &mediaType, - ecam_dev_sample_captured_callback); + const CAM_ERROR_CODE error = dev->ihal->StartStream(dev->ihal, dev, streamIndex, &mediaType, + ecam_dev_sample_captured_callback); if (error) { WLog_ERR(TAG, "StartStream failure"); @@ -656,7 +665,7 @@ static UINT ecam_dev_process_activate_device_request(CameraDevice* dev, WINPR_ATTR_UNUSED wStream* s) { WINPR_ASSERT(dev); - UINT32 errorCode = 0; + CAM_ERROR_CODE errorCode = CAM_ERROR_CODE_None; if (dev->ihal->Activate(dev->ihal, dev->deviceId, &errorCode)) return ecam_channel_send_generic_msg(dev->ecam, hchannel, CAM_MSG_ID_SuccessResponse); @@ -679,7 +688,7 @@ static UINT ecam_dev_process_deactivate_device_request(CameraDevice* dev, for (size_t i = 0; i < ECAM_DEVICE_MAX_STREAMS; i++) ecam_dev_stop_stream(dev, i); - UINT32 errorCode = 0; + CAM_ERROR_CODE errorCode = CAM_ERROR_CODE_None; if (dev->ihal->Deactivate(dev->ihal, dev->deviceId, &errorCode)) return ecam_channel_send_generic_msg(dev->ecam, hchannel, CAM_MSG_ID_SuccessResponse); diff --git a/channels/rdpecam/client/v4l/camera_v4l.c b/channels/rdpecam/client/v4l/camera_v4l.c index 223ebd412..693111dd3 100644 --- a/channels/rdpecam/client/v4l/camera_v4l.c +++ b/channels/rdpecam/client/v4l/camera_v4l.c @@ -45,7 +45,7 @@ typedef struct } CamV4lHal; -static CamV4lStream* cam_v4l_stream_create(const char* deviceId, int streamIndex); +static CamV4lStream* cam_v4l_stream_create(const char* deviceId, size_t streamIndex); static void cam_v4l_stream_free(void* obj); static void cam_v4l_stream_close_device(CamV4lStream* stream); static UINT cam_v4l_stream_stop(CamV4lStream* stream); @@ -154,21 +154,21 @@ static int cam_v4l_open_device(const char* deviceId, int flags) return fd; } -static BOOL cam_v4l_activate(ICamHal* ihal, const char* deviceId, UINT32* errorCode) +static BOOL cam_v4l_activate(ICamHal* ihal, const char* deviceId, CAM_ERROR_CODE* errorCode) { WINPR_UNUSED(ihal); WINPR_UNUSED(deviceId); - *errorCode = 0; + *errorCode = CAM_ERROR_CODE_None; return TRUE; } -static BOOL cam_v4l_deactivate(ICamHal* ihal, const char* deviceId, UINT32* errorCode) +static BOOL cam_v4l_deactivate(ICamHal* ihal, const char* deviceId, CAM_ERROR_CODE* errorCode) { WINPR_UNUSED(ihal); WINPR_UNUSED(deviceId); - *errorCode = 0; + *errorCode = CAM_ERROR_CODE_None; return TRUE; } @@ -179,7 +179,7 @@ static BOOL cam_v4l_deactivate(ICamHal* ihal, const char* deviceId, UINT32* erro * in */ static INT16 cam_v4l_get_media_type_descriptions(ICamHal* ihal, const char* deviceId, - int streamIndex, + size_t streamIndex, const CAM_MEDIA_FORMAT_INFO* supportedFormats, size_t nSupportedFormats, CAM_MEDIA_TYPE_DESCRIPTION* mediaTypes, @@ -520,7 +520,8 @@ void cam_v4l_stream_close_device(CamV4lStream* stream) * * @return Null on failure, otherwise pointer to new CamV4lStream */ -static CamV4lStream* cam_v4l_stream_create(const char* deviceId, int streamIndex) +WINPR_ATTR_MALLOC(cam_v4l_stream_free, 1) +CamV4lStream* cam_v4l_stream_create(const char* deviceId, size_t streamIndex) { CamV4lStream* stream = calloc(1, sizeof(CamV4lStream)); @@ -548,10 +549,10 @@ static CamV4lStream* cam_v4l_stream_create(const char* deviceId, int streamIndex * * @return 0 on success, otherwise a Win32 error code */ -UINT cam_v4l_stream_stop(CamV4lStream* stream) +CAM_ERROR_CODE cam_v4l_stream_stop(CamV4lStream* stream) { if (!stream || !stream->streaming) - return CHANNEL_RC_OK; + return CAM_ERROR_CODE_None; stream->streaming = FALSE; /* this will terminate capture thread */ @@ -578,33 +579,29 @@ UINT cam_v4l_stream_stop(CamV4lStream* stream) LeaveCriticalSection(&stream->lock); - return CHANNEL_RC_OK; + return CAM_ERROR_CODE_None; } -/** - * Function description - * - * @return 0 on success, otherwise CAM_ERROR_CODE - */ -static UINT cam_v4l_stream_start(ICamHal* ihal, CameraDevice* dev, int streamIndex, - const CAM_MEDIA_TYPE_DESCRIPTION* mediaType, - ICamHalSampleCapturedCallback callback) +static CAM_ERROR_CODE cam_v4l_stream_start(ICamHal* ihal, CameraDevice* dev, size_t streamIndex, + const CAM_MEDIA_TYPE_DESCRIPTION* mediaType, + ICamHalSampleCapturedCallback callback) { CamV4lHal* hal = (CamV4lHal*)ihal; + WINPR_ASSERT(hal); CamV4lStream* stream = (CamV4lStream*)HashTable_GetItemValue(hal->streams, dev->deviceId); if (!stream) { - WLog_ERR(TAG, "Unable to find stream, device %s, streamIndex %d", dev->deviceId, + WLog_ERR(TAG, "Unable to find stream, device %s, streamIndex %" PRIuz, dev->deviceId, streamIndex); return CAM_ERROR_CODE_UnexpectedError; } if (stream->streaming) { - WLog_ERR(TAG, "Streaming already in progress, device %s, streamIndex %d", dev->deviceId, - streamIndex); + WLog_ERR(TAG, "Streaming already in progress, device %s, streamIndex %" PRIuz, + dev->deviceId, streamIndex); return CAM_ERROR_CODE_UnexpectedError; } @@ -724,7 +721,7 @@ static UINT cam_v4l_stream_start(ICamHal* ihal, CameraDevice* dev, int streamInd mediaType->Width, mediaType->Height, mediaType->FrameRateNumerator, mediaType->FrameRateDenominator); - return CHANNEL_RC_OK; + return CAM_ERROR_CODE_None; } /** @@ -732,15 +729,15 @@ static UINT cam_v4l_stream_start(ICamHal* ihal, CameraDevice* dev, int streamInd * * @return 0 on success, otherwise a Win32 error code */ -static UINT cam_v4l_stream_stop_by_device_id(ICamHal* ihal, const char* deviceId, - WINPR_ATTR_UNUSED int streamIndex) +static CAM_ERROR_CODE cam_v4l_stream_stop_by_device_id(ICamHal* ihal, const char* deviceId, + WINPR_ATTR_UNUSED size_t streamIndex) { CamV4lHal* hal = (CamV4lHal*)ihal; CamV4lStream* stream = (CamV4lStream*)HashTable_GetItemValue(hal->streams, deviceId); if (!stream) - return CHANNEL_RC_OK; + return CAM_ERROR_CODE_NotInitialized; return cam_v4l_stream_stop(stream); } @@ -768,18 +765,18 @@ void cam_v4l_stream_free(void* obj) * * @return 0 on success, otherwise a Win32 error code */ -static UINT cam_v4l_free(ICamHal* ihal) +static CAM_ERROR_CODE cam_v4l_free(ICamHal* ihal) { CamV4lHal* hal = (CamV4lHal*)ihal; if (hal == NULL) - return ERROR_INVALID_PARAMETER; + return CAM_ERROR_CODE_NotInitialized; HashTable_Free(hal->streams); free(hal); - return CHANNEL_RC_OK; + return CAM_ERROR_CODE_None; } /** diff --git a/channels/rdpecam/client/v4l/camera_v4l.h b/channels/rdpecam/client/v4l/camera_v4l.h index 8f1a32fec..370154b5b 100644 --- a/channels/rdpecam/client/v4l/camera_v4l.h +++ b/channels/rdpecam/client/v4l/camera_v4l.h @@ -38,7 +38,7 @@ typedef struct /* members used to call the callback */ CameraDevice* dev; - int streamIndex; + size_t streamIndex; ICamHalSampleCapturedCallback sampleCallback; BOOL streaming; diff --git a/channels/rdpecam/server/rdpecam-utils.h b/channels/rdpecam/common/rdpecam-utils.h similarity index 100% rename from channels/rdpecam/server/rdpecam-utils.h rename to channels/rdpecam/common/rdpecam-utils.h diff --git a/channels/rdpecam/server/CMakeLists.txt b/channels/rdpecam/server/CMakeLists.txt index 8d7d25abf..bd843379f 100644 --- a/channels/rdpecam/server/CMakeLists.txt +++ b/channels/rdpecam/server/CMakeLists.txt @@ -17,7 +17,7 @@ define_channel_server("rdpecam") -set(${MODULE_PREFIX}_SRCS camera_device_enumerator_main.c camera_device_main.c rdpecam-utils.h) +set(${MODULE_PREFIX}_SRCS camera_device_enumerator_main.c camera_device_main.c) set(${MODULE_PREFIX}_LIBS freerdp) diff --git a/channels/rdpsnd/client/pulse/rdpsnd_pulse.c b/channels/rdpsnd/client/pulse/rdpsnd_pulse.c index 24c0f0d83..5c879aa3b 100644 --- a/channels/rdpsnd/client/pulse/rdpsnd_pulse.c +++ b/channels/rdpsnd/client/pulse/rdpsnd_pulse.c @@ -171,7 +171,7 @@ static BOOL rdpsnd_pulse_connect(rdpsndDevicePlugin* device) pa_threaded_mainloop_lock(pulse->mainloop); - if (pa_context_connect(pulse->context, NULL, 0, NULL) < 0) + if (pa_context_connect(pulse->context, NULL, PA_CONTEXT_NOFLAGS, NULL) < 0) { pa_threaded_mainloop_unlock(pulse->mainloop); return FALSE; @@ -301,8 +301,6 @@ static void rdpsnd_pulse_close(rdpsndDevicePlugin* device) static BOOL rdpsnd_pulse_set_format_spec(rdpsndPulsePlugin* pulse, const AUDIO_FORMAT* format) { - pa_sample_spec sample_spec = { 0 }; - WINPR_ASSERT(format); if (!rdpsnd_check_pulse(pulse, FALSE)) @@ -311,20 +309,18 @@ static BOOL rdpsnd_pulse_set_format_spec(rdpsndPulsePlugin* pulse, const AUDIO_F if (!rdpsnd_pulse_format_supported(&pulse->device, format)) return FALSE; - sample_spec.rate = format->nSamplesPerSec; - sample_spec.channels = WINPR_ASSERTING_INT_CAST(uint8_t, format->nChannels); - + pa_sample_format_t sformat = PA_SAMPLE_INVALID; switch (format->wFormatTag) { case WAVE_FORMAT_PCM: switch (format->wBitsPerSample) { case 8: - sample_spec.format = PA_SAMPLE_U8; + sformat = PA_SAMPLE_U8; break; case 16: - sample_spec.format = PA_SAMPLE_S16LE; + sformat = PA_SAMPLE_S16LE; break; default: @@ -337,6 +333,10 @@ static BOOL rdpsnd_pulse_set_format_spec(rdpsndPulsePlugin* pulse, const AUDIO_F return FALSE; } + const pa_sample_spec sample_spec = { .format = sformat, + .rate = format->nSamplesPerSec, + .channels = + WINPR_ASSERTING_INT_CAST(uint8_t, format->nChannels) }; pulse->sample_spec = sample_spec; return TRUE; } diff --git a/client/SDL/SDL2/dialogs/sdl_connection_dialog.cpp b/client/SDL/SDL2/dialogs/sdl_connection_dialog.cpp index a5a3a85b3..476287c93 100644 --- a/client/SDL/SDL2/dialogs/sdl_connection_dialog.cpp +++ b/client/SDL/SDL2/dialogs/sdl_connection_dialog.cpp @@ -57,7 +57,7 @@ bool SDLConnectionDialog::visible() const bool SDLConnectionDialog::setTitle(const char* fmt, ...) { - std::lock_guard lock(_mux); + std::scoped_lock lock(_mux); va_list ap = {}; va_start(ap, fmt); _title = print(fmt, ap); @@ -97,25 +97,25 @@ bool SDLConnectionDialog::showError(const char* fmt, ...) bool SDLConnectionDialog::show() { - std::lock_guard lock(_mux); + std::scoped_lock lock(_mux); return show(_type_active); } bool SDLConnectionDialog::hide() { - std::lock_guard lock(_mux); + std::scoped_lock lock(_mux); return show(MSG_DISCARD); } bool SDLConnectionDialog::running() const { - std::lock_guard lock(_mux); + std::scoped_lock lock(_mux); return _running; } bool SDLConnectionDialog::update() { - std::lock_guard lock(_mux); + std::scoped_lock lock(_mux); switch (_type) { case MSG_INFO: @@ -169,7 +169,7 @@ bool SDLConnectionDialog::clearWindow(SDL_Renderer* renderer) bool SDLConnectionDialog::update(SDL_Renderer* renderer) { - std::lock_guard lock(_mux); + std::scoped_lock lock(_mux); if (!renderer) return false; @@ -433,7 +433,7 @@ void SDLConnectionDialog::destroyWindow() bool SDLConnectionDialog::show(MsgType type, const char* fmt, va_list ap) { - std::lock_guard lock(_mux); + std::scoped_lock lock(_mux); _msg = print(fmt, ap); return show(type); } @@ -470,7 +470,7 @@ std::string SDLConnectionDialog::print(const char* fmt, va_list ap) bool SDLConnectionDialog::setTimer(Uint32 timeoutMS) { - std::lock_guard lock(_mux); + std::scoped_lock lock(_mux); resetTimer(); _timer = SDL_AddTimer(timeoutMS, &SDLConnectionDialog::timeout, this); diff --git a/client/SDL/SDL3/dialogs/sdl_buttons.cpp b/client/SDL/SDL3/dialogs/sdl_buttons.cpp index f7d54fd37..d22203986 100644 --- a/client/SDL/SDL3/dialogs/sdl_buttons.cpp +++ b/client/SDL/SDL3/dialogs/sdl_buttons.cpp @@ -25,7 +25,7 @@ bool SdlButtonList::populate(std::shared_ptr& renderer, const size_t curOffsetX = offsetX + x * (static_cast(width) + hpadding); const SDL_FRect rect = { static_cast(curOffsetX), static_cast(offsetY), static_cast(width), static_cast(height) }; - std::shared_ptr button(new SdlButton(renderer, labels[x], ids[x], rect)); + auto button = std::make_shared(renderer, labels[x], ids[x], rect); _list.emplace_back(button); } return true; diff --git a/client/SDL/SDL3/dialogs/sdl_input_widget_pair.hpp b/client/SDL/SDL3/dialogs/sdl_input_widget_pair.hpp index 2fedeb853..892fdb992 100644 --- a/client/SDL/SDL3/dialogs/sdl_input_widget_pair.hpp +++ b/client/SDL/SDL3/dialogs/sdl_input_widget_pair.hpp @@ -19,7 +19,7 @@ #pragma once -#include +#include #include #include diff --git a/client/SDL/SDL3/dialogs/sdl_input_widget_pair_list.cpp b/client/SDL/SDL3/dialogs/sdl_input_widget_pair_list.cpp index e07ea9657..dcb091a42 100644 --- a/client/SDL/SDL3/dialogs/sdl_input_widget_pair_list.cpp +++ b/client/SDL/SDL3/dialogs/sdl_input_widget_pair_list.cpp @@ -50,8 +50,8 @@ SdlInputWidgetPairList::SdlInputWidgetPairList(const std::string& title, { for (size_t x = 0; x < labels.size(); x++) { - std::shared_ptr widget(new SdlInputWidgetPair( - _renderer, labels[x], initial[x], flags[x], x, widget_width, widget_heigth)); + auto widget = std::make_shared( + _renderer, labels[x], initial[x], flags[x], x, widget_width, widget_heigth); m_list.emplace_back(widget); } diff --git a/client/X11/xf_utils.c b/client/X11/xf_utils.c index ee20b767c..99a3e4c93 100644 --- a/client/X11/xf_utils.c +++ b/client/X11/xf_utils.c @@ -92,7 +92,6 @@ static int write_result_log_expect_success(wLog* log, DWORD level, const char* f { va_list ap; (void)write_result_log_va(log, level, fname, fkt, line, display, name, rc, 0, ap); - va_end(ap); } return rc; } @@ -104,7 +103,6 @@ static int write_result_log_expect_one(wLog* log, DWORD level, const char* fname { va_list ap; (void)write_result_log_va(log, level, fname, fkt, line, display, name, rc, 0, ap); - va_end(ap); } return rc; } diff --git a/cmake/ClangTidy.cmake b/cmake/ClangTidy.cmake index d6b504d45..3b74a5d69 100644 --- a/cmake/ClangTidy.cmake +++ b/cmake/ClangTidy.cmake @@ -4,10 +4,10 @@ if(BUILD_WITH_CLANG_TIDY) include(ClangDetectTool) clang_detect_tool(CLANG_TIDY_EXE clang-tidy REQUIRED) - set(CLANG_TIDY_COMMAND "${CLANG_TIDY_EXE}") + set(CLANG_TIDY_COMMAND ${CLANG_TIDY_EXE}) - set(CMAKE_C_CLANG_TIDY "${CLANG_TIDY_COMMAND}" --extra-arg=-std=gnu11) - set(CMAKE_CXX_CLANG_TIDY "${CLANG_TIDY_COMMAND}" --extra-arg=-std=gnu++17) + set(CMAKE_C_CLANG_TIDY "${CLANG_TIDY_COMMAND}") + set(CMAKE_CXX_CLANG_TIDY "${CLANG_TIDY_COMMAND}") set(CMAKE_OBJC_CLANG_TIDY "${CLANG_TIDY_COMMAND}") else() unset(CMAKE_C_CLANG_TIDY) diff --git a/include/freerdp/channels/audin.h b/include/freerdp/channels/audin.h index 1bb0e86c3..1e67f7d3a 100644 --- a/include/freerdp/channels/audin.h +++ b/include/freerdp/channels/audin.h @@ -45,6 +45,7 @@ typedef struct typedef enum { + SNDIN_VERSION_Invalid = 0x00000000, SNDIN_VERSION_Version_1 = 0x00000001, SNDIN_VERSION_Version_2 = 0x00000002, } SNDIN_VERSION_Version; diff --git a/include/freerdp/channels/rdpecam.h b/include/freerdp/channels/rdpecam.h index 36075252e..ca9e8a319 100644 --- a/include/freerdp/channels/rdpecam.h +++ b/include/freerdp/channels/rdpecam.h @@ -39,6 +39,7 @@ extern "C" typedef enum { + CAM_MSG_ID_Invalid = 0x00, CAM_MSG_ID_SuccessResponse = 0x01, CAM_MSG_ID_ErrorResponse = 0x02, CAM_MSG_ID_SelectVersionRequest = 0x03, @@ -107,6 +108,7 @@ typedef struct typedef enum { + CAM_ERROR_CODE_None = 0x00000000, CAM_ERROR_CODE_UnexpectedError = 0x00000001, CAM_ERROR_CODE_InvalidMessage = 0x00000002, CAM_ERROR_CODE_NotInitialized = 0x00000003, @@ -187,6 +189,7 @@ typedef enum typedef enum { + AM_MEDIA_TYPE_DESCRIPTION_FLAG_Invalid = 0x00, CAM_MEDIA_TYPE_DESCRIPTION_FLAG_DecodingRequired = 0x01, CAM_MEDIA_TYPE_DESCRIPTION_FLAG_BottomUpImage = 0x02, } CAM_MEDIA_TYPE_DESCRIPTION_FLAGS; diff --git a/libfreerdp/codec/test/TestFreeRDPCodecProgressive.c b/libfreerdp/codec/test/TestFreeRDPCodecProgressive.c index 60f22bdbe..fdf831f36 100644 --- a/libfreerdp/codec/test/TestFreeRDPCodecProgressive.c +++ b/libfreerdp/codec/test/TestFreeRDPCodecProgressive.c @@ -1120,43 +1120,79 @@ fail: return res; } +static BOOL readUInt(FILE* fp, const char* prefix, const char* postfix, UINT32* pval) +{ + WINPR_ASSERT(fp); + WINPR_ASSERT(prefix); + WINPR_ASSERT(postfix); + WINPR_ASSERT(pval); + + BOOL rc = FALSE; + const size_t plen = strlen(prefix); + const size_t polen = strlen(postfix); + + char* str = NULL; + size_t len = SIZE_MAX; + const INT64 res = GetLine(&str, &len, fp); + if ((res < plen + polen) || !str) + goto fail; + + if (strncmp(str, prefix, plen) != 0) + goto fail; + + char* start = &str[plen]; + char* end = strstr(start, postfix); + if (!end) + goto fail; + *end = '\0'; + + errno = 0; + unsigned long val = strtoul(start, NULL, 0); + if ((errno != 0) || (val > UINT32_MAX)) + goto fail; + + *pval = val; + rc = TRUE; + +fail: + free(str); + return rc; +} + static BOOL read_cmd(FILE* fp, RDPGFX_SURFACE_COMMAND* cmd, UINT32* frameId) { WINPR_ASSERT(fp); WINPR_ASSERT(cmd); WINPR_ASSERT(frameId); - // NOLINTBEGIN(cert-err34-c) - if (1 != fscanf(fp, "frameid: %" PRIu32 "\n", frameId)) + if (!readUInt(fp, "frameid: ", "\n", frameId)) return FALSE; - if (1 != fscanf(fp, "surfaceId: %" PRIu32 "\n", &cmd->surfaceId)) + if (!readUInt(fp, "surfaceId: ", "\n", &cmd->surfaceId)) return FALSE; - if (1 != fscanf(fp, "codecId: %" PRIu32 "\n", &cmd->codecId)) + if (!readUInt(fp, "codecId: ", "\n", &cmd->codecId)) return FALSE; - if (1 != fscanf(fp, "contextId: %" PRIu32 "\n", &cmd->contextId)) + if (!readUInt(fp, "contextId: ", "\n", &cmd->contextId)) return FALSE; - if (1 != fscanf(fp, "format: %" PRIu32 "\n", &cmd->format)) + if (!readUInt(fp, "format: ", "\n", &cmd->format)) return FALSE; - if (1 != fscanf(fp, "left: %" PRIu32 "\n", &cmd->left)) + if (!readUInt(fp, "left: ", "\n", &cmd->left)) return FALSE; - if (1 != fscanf(fp, "top: %" PRIu32 "\n", &cmd->top)) + if (!readUInt(fp, "top: ", "\n", &cmd->top)) return FALSE; - if (1 != fscanf(fp, "right: %" PRIu32 "\n", &cmd->right)) + if (!readUInt(fp, "right: ", "\n", &cmd->right)) return FALSE; - if (1 != fscanf(fp, "bottom: %" PRIu32 "\n", &cmd->bottom)) + if (!readUInt(fp, "bottom: ", "\n", &cmd->bottom)) return FALSE; - if (1 != fscanf(fp, "width: %" PRIu32 "\n", &cmd->width)) + if (!readUInt(fp, "width: ", "\n", &cmd->width)) return FALSE; - if (1 != fscanf(fp, "height: %" PRIu32 "\n", &cmd->height)) + if (!readUInt(fp, "height: ", "\n", &cmd->height)) return FALSE; - if (1 != fscanf(fp, "length: %" PRIu32 "\n", &cmd->length)) + if (!readUInt(fp, "length: ", "\n", &cmd->length)) return FALSE; - // NOLINTEND(cert-err34-c) char* data = NULL; - size_t dlen = SIZE_MAX; - SSIZE_T slen = GetLine(&data, &slen, fp); + INT64 slen = GetLine(&data, &dlen, fp); if (slen < 0) return FALSE; diff --git a/libfreerdp/common/assistance.c b/libfreerdp/common/assistance.c index 9c09f5c30..44a3b24dc 100644 --- a/libfreerdp/common/assistance.c +++ b/libfreerdp/common/assistance.c @@ -868,8 +868,8 @@ BYTE* freerdp_assistance_encrypt_pass_stub(const char* password, const char* pas WCHAR* PasswordW = ConvertUtf8ToWCharAlloc(password, &cbPasswordW); WCHAR* PassStubW = ConvertUtf8ToWCharAlloc(passStub, &cbPassStubW); - cbPasswordW = (cbPasswordW) * sizeof(WCHAR); - cbPassStubW = (cbPassStubW) * sizeof(WCHAR); + cbPasswordW = cbPasswordW * sizeof(WCHAR); + cbPassStubW = cbPassStubW * sizeof(WCHAR); const size_t EncryptedSize = cbPassStubW + 4; if (!PasswordW || !PassStubW) @@ -945,7 +945,7 @@ static BOOL freerdp_assistance_decrypt2(rdpAssistanceFile* file) return FALSE; } - cbPasswordW = (cbPasswordW) * sizeof(WCHAR); + cbPasswordW = cbPasswordW * sizeof(WCHAR); if (!winpr_Digest(WINPR_MD_SHA1, (BYTE*)PasswordW, cbPasswordW, PasswordHash, sizeof(PasswordHash))) diff --git a/libfreerdp/primitives/test/TestPrimitivesYUV.c b/libfreerdp/primitives/test/TestPrimitivesYUV.c index 48c5c0d73..2bbda85d8 100644 --- a/libfreerdp/primitives/test/TestPrimitivesYUV.c +++ b/libfreerdp/primitives/test/TestPrimitivesYUV.c @@ -3,6 +3,7 @@ #include #include +#include #include "prim_test.h" @@ -1413,10 +1414,21 @@ int TestPrimitivesYUV(int argc, char* argv[]) if (argc > 1) { - // NOLINTNEXTLINE(cert-err34-c) - int crc = sscanf(argv[1], "%" PRIu32 "x%" PRIu32, &roi.width, &roi.height); + BOOL reset = TRUE; + char* str = argv[1]; + char* ptr = strchr(str, 'x'); + if (ptr) + { + *ptr++ = '\0'; - if (crc != 2) + errno = 0; + roi.width = strtoul(str, NULL, 0); + if (errno == 0) + roi.height = strtoul(str, NULL, 0); + reset = errno != 0; + } + + if (reset) { roi.width = 1920; roi.height = 1080; diff --git a/libfreerdp/utils/http.c b/libfreerdp/utils/http.c index e4313fc2f..5cc226653 100644 --- a/libfreerdp/utils/http.c +++ b/libfreerdp/utils/http.c @@ -233,10 +233,20 @@ BOOL freerdp_http_request(const char* url, const char* body, long* status_code, goto out; } - // NOLINTNEXTLINE(cert-err34-c) - if (sscanf(buffer, "HTTP/1.1 %li %*[^\r\n]\r\n", status_code) < 1) + const char header[9] = { 'H', 'T', 'T', 'P', '/', '1', '.', '1', ' ' }; + if ((status < (INT64)sizeof(header)) || (strncmp(header, buffer, sizeof(header)) != 0)) { - WLog_Print(log, WLOG_ERROR, "invalid HTTP status line"); + WLog_Print(log, WLOG_ERROR, "invalid HTTP status header"); + goto out; + } + + errno = 0; + *status_code = strtol(&buffer[sizeof(header)], NULL, 0); + if (errno != 0) + { + char ebuffer[256] = { 0 }; + WLog_Print(log, WLOG_ERROR, "invalid HTTP status line: %s [%d]", + winpr_strerror(errno, ebuffer, sizeof(ebuffer)), errno); goto out; } diff --git a/winpr/libwinpr/smartcard/smartcard_pcsc.c b/winpr/libwinpr/smartcard/smartcard_pcsc.c index e2ba5beb2..5987f841a 100644 --- a/winpr/libwinpr/smartcard/smartcard_pcsc.c +++ b/winpr/libwinpr/smartcard/smartcard_pcsc.c @@ -2510,11 +2510,10 @@ static LONG WINAPI PCSC_SCardGetAttrib_FriendlyName(SCARDHANDLE hCard, DWORD dwA return status; } -static LONG PCSC_ReadDeviceSystemName(SCARDCONTEXT hContext, SCARDHANDLE hCard, DWORD dwAttrId, - LPBYTE pbAttr, LPDWORD pcbAttrLen) +static LONG PCSC_ReadDeviceSystemName(WINPR_ATTR_UNUSED SCARDCONTEXT hContext, SCARDHANDLE hCard, + DWORD dwAttrId, LPBYTE pbAttr, LPDWORD pcbAttrLen) { /* Get reader name from SCardStatus */ - CHAR* szReader = NULL; PCSC_DWORD dwState = 0; PCSC_DWORD dwProtocol = 0; LONG status = 0; @@ -2531,7 +2530,7 @@ static LONG PCSC_ReadDeviceSystemName(SCARDCONTEXT hContext, SCARDHANDLE hCard, const PCSC_LONG rc = g_PCSC.pfnSCardStatus(hCard, (LPSTR)pbAttr, &cchReader, &dwState, &dwProtocol, NULL, &cbAtr); - *pcbAttrLen = cchReader; + *pcbAttrLen = WINPR_ASSERTING_INT_CAST(DWORD, cchReader); status = WINPR_ASSERTING_INT_CAST(LONG, rc); if (status != SCARD_S_SUCCESS) return status; @@ -2552,7 +2551,7 @@ static LONG PCSC_ReadDeviceSystemName(SCARDCONTEXT hContext, SCARDHANDLE hCard, free(tmp); return SCARD_E_INSUFFICIENT_BUFFER; } - *pcbAttrLen = MIN(wlen, cchReader) * sizeof(WCHAR); + *pcbAttrLen = WINPR_ASSERTING_INT_CAST(DWORD, MIN(wlen, cchReader) * sizeof(WCHAR)); memcpy(pbAttr, tmp, *pcbAttrLen); free(tmp); } @@ -2566,7 +2565,7 @@ static LONG WINAPI PCSC_SCardGetAttrib(SCARDHANDLE hCard, DWORD dwAttrId, LPBYTE DWORD cbAttrLen = 0; SCARDCONTEXT hContext = 0; BOOL pcbAttrLenAlloc = FALSE; - LONG status = SCARD_S_SUCCESS; + PCSC_LONG status = SCARD_S_SUCCESS; if (NULL == pcbAttrLen) return SCARD_E_INVALID_PARAMETER; @@ -2742,7 +2741,7 @@ static LONG WINAPI PCSC_SCardGetAttrib(SCARDHANDLE hCard, DWORD dwAttrId, LPBYTE } } - return status; + return WINPR_ASSERTING_INT_CAST(LONG, status); } static LONG WINAPI PCSC_SCardSetAttrib(SCARDHANDLE hCard, DWORD dwAttrId, LPCBYTE pbAttr, diff --git a/winpr/libwinpr/sspi/Negotiate/negotiate.c b/winpr/libwinpr/sspi/Negotiate/negotiate.c index c2e5b08b1..901cf4376 100644 --- a/winpr/libwinpr/sspi/Negotiate/negotiate.c +++ b/winpr/libwinpr/sspi/Negotiate/negotiate.c @@ -477,13 +477,13 @@ cleanup: static BOOL negotiate_read_neg_token(PSecBuffer input, NegToken* token) { - WinPrAsn1Decoder dec; - WinPrAsn1Decoder dec2; - WinPrAsn1_OID oid; + WinPrAsn1Decoder dec = { .encoding = WINPR_ASN1_BER, { 0 } }; + WinPrAsn1Decoder dec2 = { .encoding = WINPR_ASN1_BER, { 0 } }; + WinPrAsn1_OID oid = { 0 }; WinPrAsn1_tagId contextual = 0; WinPrAsn1_tag tag = 0; size_t len = 0; - WinPrAsn1_OctetString octet_string; + WinPrAsn1_OctetString octet_string = { 0 }; BOOL err = 0; WINPR_ASSERT(input); @@ -990,8 +990,8 @@ static SECURITY_STATUS SEC_ENTRY negotiate_InitializeSecurityContextA( static const Mech* guessMech(PSecBuffer input_buffer, BOOL* spNego, WinPrAsn1_OID* oid) { - WinPrAsn1Decoder decoder; - WinPrAsn1Decoder appDecoder; + WinPrAsn1Decoder decoder = { .encoding = WINPR_ASN1_BER, { 0 } }; + WinPrAsn1Decoder appDecoder = { .encoding = WINPR_ASN1_BER, { 0 } }; WinPrAsn1_tagId tag = 0; const char ssp[] = "NTLMSSP"; @@ -1039,8 +1039,8 @@ static SECURITY_STATUS SEC_ENTRY negotiate_AcceptSecurityContext( SecBufferDesc mech_input = { SECBUFFER_VERSION, 1, &input_token.mechToken }; SecBufferDesc mech_output = { SECBUFFER_VERSION, 1, &output_token.mechToken }; SECURITY_STATUS status = SEC_E_INTERNAL_ERROR; - WinPrAsn1Decoder dec; - WinPrAsn1Decoder dec2; + WinPrAsn1Decoder dec = { .encoding = WINPR_ASN1_BER, { 0 } }; + WinPrAsn1Decoder dec2 = { .encoding = WINPR_ASN1_BER, { 0 } }; WinPrAsn1_tagId tag = 0; WinPrAsn1_OID oid = { 0 }; const Mech* first_mech = NULL; diff --git a/winpr/libwinpr/sspi/sspi_gss.c b/winpr/libwinpr/sspi/sspi_gss.c index 26c3927dc..9fc9340c2 100644 --- a/winpr/libwinpr/sspi/sspi_gss.c +++ b/winpr/libwinpr/sspi/sspi_gss.c @@ -86,8 +86,8 @@ cleanup: BOOL sspi_gss_unwrap_token(const SecBuffer* buf, WinPrAsn1_OID* oid, uint16_t* tok_id, sspi_gss_data* token) { - WinPrAsn1Decoder dec; - WinPrAsn1Decoder dec2; + WinPrAsn1Decoder dec = { .encoding = WINPR_ASN1_BER, { 0 } }; + WinPrAsn1Decoder dec2 = { .encoding = WINPR_ASN1_BER, { 0 } }; WinPrAsn1_tagId tag = 0; wStream sbuffer = { 0 }; wStream* s = NULL; diff --git a/winpr/libwinpr/utils/asn1/asn1.c b/winpr/libwinpr/utils/asn1/asn1.c index c91484bac..e8b503d1b 100644 --- a/winpr/libwinpr/utils/asn1/asn1.c +++ b/winpr/libwinpr/utils/asn1/asn1.c @@ -1388,7 +1388,7 @@ size_t WinPrAsn1DecReadContextualBool(WinPrAsn1Decoder* dec, WinPrAsn1_tagId tag { size_t ret = 0; size_t ret2 = 0; - WinPrAsn1Decoder content; + WinPrAsn1Decoder content = { .encoding = WINPR_ASN1_BER, { 0 } }; ret = readContextualHeader(dec, tagId, error, &content); if (!ret) @@ -1410,7 +1410,7 @@ size_t WinPrAsn1DecReadContextualInteger(WinPrAsn1Decoder* dec, WinPrAsn1_tagId { size_t ret = 0; size_t ret2 = 0; - WinPrAsn1Decoder content; + WinPrAsn1Decoder content = { .encoding = WINPR_ASN1_BER, { 0 } }; ret = readContextualHeader(dec, tagId, error, &content); if (!ret) @@ -1432,7 +1432,7 @@ size_t WinPrAsn1DecReadContextualOID(WinPrAsn1Decoder* dec, WinPrAsn1_tagId tagI { size_t ret = 0; size_t ret2 = 0; - WinPrAsn1Decoder content; + WinPrAsn1Decoder content = { .encoding = WINPR_ASN1_BER, { 0 } }; ret = readContextualHeader(dec, tagId, error, &content); if (!ret) @@ -1455,7 +1455,7 @@ size_t WinPrAsn1DecReadContextualOctetString(WinPrAsn1Decoder* dec, WinPrAsn1_ta { size_t ret = 0; size_t ret2 = 0; - WinPrAsn1Decoder content; + WinPrAsn1Decoder content = { .encoding = WINPR_ASN1_BER, { 0 } }; ret = readContextualHeader(dec, tagId, error, &content); if (!ret) @@ -1477,7 +1477,7 @@ size_t WinPrAsn1DecReadContextualSequence(WinPrAsn1Decoder* dec, WinPrAsn1_tagId { size_t ret = 0; size_t ret2 = 0; - WinPrAsn1Decoder content; + WinPrAsn1Decoder content = { .encoding = WINPR_ASN1_BER, { 0 } }; ret = readContextualHeader(dec, tagId, error, &content); if (!ret) diff --git a/winpr/libwinpr/utils/test/TestASN1.c b/winpr/libwinpr/utils/test/TestASN1.c index 99d9e5db2..79d5b82b3 100644 --- a/winpr/libwinpr/utils/test/TestASN1.c +++ b/winpr/libwinpr/utils/test/TestASN1.c @@ -30,14 +30,14 @@ static const BYTE utctimeContent[] = { 0x17, 0x0D, 0x32, 0x31, 0x30, 0x33, 0x31, int TestASN1Read(int argc, char* argv[]) { - WinPrAsn1Decoder decoder; - WinPrAsn1Decoder seqDecoder; - wStream staticS; + WinPrAsn1Decoder decoder = { .encoding = WINPR_ASN1_BER, { 0 } }; + WinPrAsn1Decoder seqDecoder = { .encoding = WINPR_ASN1_BER, { 0 } }; + wStream staticS = { 0 }; WinPrAsn1_BOOL boolV = 0; WinPrAsn1_INTEGER integerV = 0; - WinPrAsn1_OID oidV; + WinPrAsn1_OID oidV = { 0 }; WinPrAsn1_IA5STRING ia5stringV = NULL; - WinPrAsn1_UTCTIME utctimeV; + WinPrAsn1_UTCTIME utctimeV = { 0 }; WinPrAsn1_tag tag = 0; size_t len = 0; BOOL error = 0; diff --git a/winpr/libwinpr/utils/winpr.c b/winpr/libwinpr/utils/winpr.c index 8adcfe26b..fcb4bde2c 100644 --- a/winpr/libwinpr/utils/winpr.c +++ b/winpr/libwinpr/utils/winpr.c @@ -57,7 +57,7 @@ static BOOL CALLBACK init_app_details(WINPR_ATTR_UNUSED PINIT_ONCE once, return FALSE; #if defined(WITH_RESOURCE_VERSIONING) - s_winpr_version = WINPR_API_VERSION; + s_winpr_version = WINPR_VERSION_MAJOR; #else s_winpr_version = -1; #endif diff --git a/winpr/libwinpr/wtsapi/test/TestWtsApiExtraStartRemoteSessionEx.c b/winpr/libwinpr/wtsapi/test/TestWtsApiExtraStartRemoteSessionEx.c index 0f379ca12..48b8b4f84 100644 --- a/winpr/libwinpr/wtsapi/test/TestWtsApiExtraStartRemoteSessionEx.c +++ b/winpr/libwinpr/wtsapi/test/TestWtsApiExtraStartRemoteSessionEx.c @@ -16,7 +16,10 @@ int TestWtsApiExtraStartRemoteSessionEx(int argc, char* argv[]) DWORD bSuccess = GetEnvironmentVariableA("TEST_SESSION_LOGON_ID", logonIdStr, 10); if (bSuccess > 0) { - sscanf(logonIdStr, "%u\n", &logonId); + errno = 0; + logonId = strtoul(logonIdStr, NULL, 0); + if (errno != 0) + return -1; } bSuccess = WTSStartRemoteControlSessionEx(