summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorExplorer09 <explorer09@gmail.com>2023-10-10 20:07:57 +0800
committerBenBE <BenBE@geshi.org>2023-10-10 21:57:39 +0200
commit83041f3550ee5bb83b6f9c4dcae90d59b33e0fb5 (patch)
treefc08b831b68e1eb762af71aa005826687d865235
parent1a9ae38b5b8454a32863aa24bf2546be54f4b558 (diff)
Cap the maximum size of GraphData buffer to 32768 values.
Signed-off-by: Kang-Che Sung <explorer09@gmail.com>
-rw-r--r--Meter.c9
-rw-r--r--Meter.h1
2 files changed, 8 insertions, 2 deletions
diff --git a/Meter.c b/Meter.c
index 460b2925..bb137aad 100644
--- a/Meter.c
+++ b/Meter.c
@@ -299,14 +299,19 @@ static void GraphMeterMode_draw(Meter* this, int x, int y, int w) {
return;
GraphData* data = &this->drawData;
- if ((size_t)w * 2 > data->nValues) {
+ if ((size_t)w * 2 > data->nValues && MAX_METER_GRAPHDATA_VALUES > data->nValues) {
size_t oldNValues = data->nValues;
- data->nValues = MAXIMUM(oldNValues + (oldNValues / 2), (size_t)w * 2);
+ data->nValues = MAXIMUM(oldNValues + oldNValues / 2, (size_t)w * 2);
+ data->nValues = MINIMUM(data->nValues, MAX_METER_GRAPHDATA_VALUES);
data->values = xReallocArray(data->values, data->nValues, sizeof(*data->values));
memmove(data->values + (data->nValues - oldNValues), data->values, oldNValues * sizeof(*data->values));
memset(data->values, 0, (data->nValues - oldNValues) * sizeof(*data->values));
}
const size_t nValues = data->nValues;
+ if ((size_t)w * 2 > nValues) {
+ x += w - nValues / 2;
+ w = nValues / 2;
+ }
const Machine* host = this->host;
if (!timercmp(&host->realtime, &(data->time), <)) {
diff --git a/Meter.h b/Meter.h
index c0a44338..e0ca1f07 100644
--- a/Meter.h
+++ b/Meter.h
@@ -20,6 +20,7 @@ in the source distribution for its full text.
#define METER_TXTBUFFER_LEN 256
+#define MAX_METER_GRAPHDATA_VALUES 32768
#define METER_BUFFER_CHECK(buffer, size, written) \
do { \

© 2014-2024 Faster IT GmbH | imprint | privacy policy