diff options
author | Explorer09 <explorer09@gmail.com> | 2023-10-10 20:07:57 +0800 |
---|---|---|
committer | BenBE <BenBE@geshi.org> | 2023-10-10 21:57:39 +0200 |
commit | 83041f3550ee5bb83b6f9c4dcae90d59b33e0fb5 (patch) | |
tree | fc08b831b68e1eb762af71aa005826687d865235 | |
parent | 1a9ae38b5b8454a32863aa24bf2546be54f4b558 (diff) |
Cap the maximum size of GraphData buffer to 32768 values.
Signed-off-by: Kang-Che Sung <explorer09@gmail.com>
-rw-r--r-- | Meter.c | 9 | ||||
-rw-r--r-- | Meter.h | 1 |
2 files changed, 8 insertions, 2 deletions
@@ -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), <)) { @@ -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 { \ |