summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkamel5 <vdr.kamel5 (at) gmx (dot) net>2021-03-11 12:52:48 +0100
committerkamel5 <vdr.kamel5 (at) gmx (dot) net>2021-03-11 12:52:48 +0100
commit3334263a96790128fba9e9299e52712a8f7847a8 (patch)
treebe93e62f9f9fa55fcc840936fbb649d7ae424b57
parent9a0eac1c4feb8fbf9cac4733080e34b481d3ded3 (diff)
parent4d3fa0bc71ff24c37446c621bd16ddb039f396ff (diff)
downloadvdr-plugin-skindesigner-3334263a96790128fba9e9299e52712a8f7847a8.tar.gz
vdr-plugin-skindesigner-3334263a96790128fba9e9299e52712a8f7847a8.tar.bz2
Merge branch 'pbiering/skindesigner-fix-tuner-device-mapping'
-rw-r--r--coreengine/complextypes.c33
-rw-r--r--coreengine/viewelementscommon.c12
-rw-r--r--extensions/imageloader.c4
3 files changed, 30 insertions, 19 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);
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();
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);
}