From 7d63e95471a94c5f2f6b30de501c86e4311f8d6d Mon Sep 17 00:00:00 2001 From: Peter Bieringer Date: Sat, 6 Feb 2021 08:12:45 +0100 Subject: [PATCH 1/3] add TODO token --- extensions/imageloader.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/extensions/imageloader.c b/extensions/imageloader.c index 88ecb14..467e17d 100644 --- a/extensions/imageloader.c +++ b/extensions/imageloader.c @@ -178,14 +178,14 @@ cImageImporterSVG::cImageImporterSVG() { cImageImporterSVG::~cImageImporterSVG() { if (handle) { - rsvg_handle_close(handle, NULL); // deprecated since version 2.46 + rsvg_handle_close(handle, NULL); // TODO: deprecated since version 2.46 g_object_unref(handle); } } bool cImageImporterSVG::LoadImage(const char *path) { if (handle) { - rsvg_handle_close(handle, NULL); // deprecated since version 2.46 + rsvg_handle_close(handle, NULL); // TODO: deprecated since version 2.46 g_object_unref(handle); } From 4bebeda1b02d91a2a359905270f8e8b22b97cdb7 Mon Sep 17 00:00:00 2001 From: Peter Bieringer Date: Sat, 6 Feb 2021 09:36:17 +0100 Subject: [PATCH 2/3] fix 3x Wstringop-overflow compiler warnings --- coreengine/complextypes.c | 33 ++++++++++++++++++--------------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/coreengine/complextypes.c b/coreengine/complextypes.c index 2574208..064e2bf 100644 --- a/coreengine/complextypes.c +++ b/coreengine/complextypes.c @@ -726,15 +726,15 @@ bool cNumericExpr::IsNumericExpression(const char *e) { } bool cNumericExpr::PercentValue(const char *e) { + if (!e) + return e; const char *hit = strchr(e, '%'); if (!hit) return false; - char buffer[20] = ""; - if (strlen(e) > 20) - return false; - strncpy(buffer, e, strlen(e)-1); - buffer[strlen(e)-1] = '\0'; - int val = atoi(buffer); + int val; + int r = sscanf(e, "%d%%", &val); // use sscanf to retrieve %-value to avoid -Wstringop-overflow + if (r != 1) + return false; // sscanf parsing problem bool ok = false; if (horizontal && container->Width() > 0) { value = container->Width() * val / 100; @@ -747,22 +747,22 @@ bool cNumericExpr::PercentValue(const char *e) { } char *cNumericExpr::ReplacePercentValue(char *e) { + if (!e) + return e; const char *hit = strchr(e, '%'); if (!hit) return e; - char buffer[20] = ""; - if (strlen(e) > 20) - return e; - strncpy(buffer, e, strlen(e)-1); - buffer[strlen(e)-1] = '\0'; - int val = atoi(buffer); + int val; + int r = sscanf(e, "%d%%", &val); // use sscanf to retrieve %-value to avoid -Wstringop-overflow + if (r != 1) + return e; // sscanf parsing problem double percentVal = (double)val/100.0f; char replacement[50] = ""; if (horizontal) { - sprintf(replacement, "%.5f*{areawidth}", percentVal); + snprintf(replacement, sizeof(replacement), "%.5f*{areawidth}", percentVal); } else { - sprintf(replacement, "%.5f*{areaheight}", percentVal); + snprintf(replacement, sizeof(replacement), "%.5f*{areaheight}", percentVal); } int len = strlen(replacement) + 1; @@ -774,16 +774,19 @@ char *cNumericExpr::ReplacePercentValue(char *e) { } char *cNumericExpr::ReplaceToken(char *e, const char* token, int val) { + if (!e) + return e; char *tokenStart = strstr(e, token); if (!tokenStart) { return e; } char buffer[20] = ""; - sprintf(buffer, "%d", val); + snprintf(buffer, sizeof(buffer), "%d", val); size_t newSize = strlen(e) - strlen(token) + strlen(buffer) + 1; char *replaced = (char*)malloc(newSize); memset(replaced, 0, newSize); size_t beginning = strlen(e) - strlen(tokenStart); + if (beginning >= newSize) beginning = newSize - 1; // will never happen but avoid -Wstringop-overflow if (beginning > 0) strncpy(replaced, e, beginning); strcat(replaced, buffer); From 4d3fa0bc71ff24c37446c621bd16ddb039f396ff Mon Sep 17 00:00:00 2001 From: Peter Bieringer Date: Thu, 11 Mar 2021 09:32:09 +0100 Subject: [PATCH 3/3] fix tuner device mapping in case tuners are not starting as first device (e.g. NetCeiver mcli) --- coreengine/viewelementscommon.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/coreengine/viewelementscommon.c b/coreengine/viewelementscommon.c index a1067c2..2df678a 100644 --- a/coreengine/viewelementscommon.c +++ b/coreengine/viewelementscommon.c @@ -306,7 +306,15 @@ bool cVeDevices::Parse(bool forced) { if (recDevice) { mutexDevices.Lock(); if (recDevices) - recDevices[recDevice->DeviceNumber()] = true; + { + int d = recDevice->DeviceNumber(); + for (int i = 0; i < numDevices; i++) { + if (devices[i] == d) { + recDevices[i] = true; + break; + } + } + } mutexDevices.Unlock(); } } @@ -347,7 +355,7 @@ bool cVeDevices::Parse(bool forced) { } tokenContainer->AddLoopToken(devicesIndex, i, (int)eDevicesLT::signalstrength, *cString::sprintf("%d", signalStrength)); tokenContainer->AddLoopToken(devicesIndex, i, (int)eDevicesLT::signalquality, *cString::sprintf("%d", signalQuality)); - tokenContainer->AddLoopToken(devicesIndex, i, (int)eDevicesLT::livetv, i == deviceLiveTV ? "1" : "0"); + tokenContainer->AddLoopToken(devicesIndex, i, (int)eDevicesLT::livetv, devices[i] == deviceLiveTV ? "1" : "0"); bool isRecording = false; mutexDevices.Lock();