Fix memory corruption with memcpy(), support musl libc

This commit is contained in:
Kuba Szczodrzyński 2024-02-08 22:05:57 +01:00
parent ed6b17cfd7
commit f36dd66a05
No known key found for this signature in database
GPG Key ID: 43037AC62A600562
3 changed files with 25 additions and 21 deletions

View File

@ -1360,7 +1360,7 @@ void dispatch_idle_state(uint8_t state)
{
char topic[8];
char buffer[8];
memcpy_P(topic, PSTR("idle"), 8);
memcpy_P(topic, PSTR("idle"), 5);
hasp_get_sleep_payload(state, buffer);
dispatch_state_subtopic(topic, buffer);
}

View File

@ -177,7 +177,7 @@ void event_timer_clock(lv_task_t* task)
int rslt = gettimeofday(&curTime, NULL);
(void)rslt; // unused
time_t seconds = curTime.tv_sec;
useconds_t tv_msec = curTime.tv_usec / 1000;
auto tv_msec = curTime.tv_usec / 1000;
tm* timeinfo = localtime(&seconds);
lv_task_set_period(task, data->interval - tv_msec);
@ -853,12 +853,16 @@ void cpicker_event_handler(lv_obj_t* obj, lv_event_t event)
if(const char* tag = my_obj_get_tag(obj))
snprintf_P(data, sizeof(data),
PSTR("{\"event\":\"%s\",\"color\":\"#%02x%02x%02x\",\"r\":%d,\"g\":%d,\"b\":%d,\"h\":%d,\"s\":%d,\"v\":%d,\"tag\":%s}"),
eventname, c32.ch.red, c32.ch.green, c32.ch.blue, c32.ch.red, c32.ch.green, c32.ch.blue, hsv.h, hsv.s, hsv.v, tag);
PSTR("{\"event\":\"%s\",\"color\":\"#%02x%02x%02x\",\"r\":%d,\"g\":%d,\"b\":%d,\"h\":%d,\"s\":%"
"d,\"v\":%d,\"tag\":%s}"),
eventname, c32.ch.red, c32.ch.green, c32.ch.blue, c32.ch.red, c32.ch.green, c32.ch.blue, hsv.h,
hsv.s, hsv.v, tag);
else
snprintf_P(data, sizeof(data),
PSTR("{\"event\":\"%s\",\"color\":\"#%02x%02x%02x\",\"r\":%d,\"g\":%d,\"b\":%d,\"h\":%d,\"s\":%d,\"v\":%d}"), eventname,
c32.ch.red, c32.ch.green, c32.ch.blue, c32.ch.red, c32.ch.green, c32.ch.blue, hsv.h, hsv.s, hsv.v);
PSTR("{\"event\":\"%s\",\"color\":\"#%02x%02x%02x\",\"r\":%d,\"g\":%d,\"b\":%d,\"h\":%d,\"s\":%"
"d,\"v\":%d}"),
eventname, c32.ch.red, c32.ch.green, c32.ch.blue, c32.ch.red, c32.ch.green, c32.ch.blue, hsv.h,
hsv.s, hsv.v);
}
event_send_object_data(obj, data);

View File

@ -136,34 +136,34 @@ void Parser::get_event_name(uint8_t eventid, char* buffer, size_t size)
{
switch(eventid) {
case HASP_EVENT_ON:
memcpy_P(buffer, PSTR("on"), size);
memcpy_P(buffer, PSTR("on"), 3);
break;
case HASP_EVENT_OFF:
memcpy_P(buffer, PSTR("off"), size);
memcpy_P(buffer, PSTR("off"), 4);
break;
case HASP_EVENT_UP:
memcpy_P(buffer, PSTR("up"), size);
memcpy_P(buffer, PSTR("up"), 3);
break;
case HASP_EVENT_DOWN:
memcpy_P(buffer, PSTR("down"), size);
memcpy_P(buffer, PSTR("down"), 5);
break;
case HASP_EVENT_RELEASE:
memcpy_P(buffer, PSTR("release"), size);
memcpy_P(buffer, PSTR("release"), 8);
break;
case HASP_EVENT_LONG:
memcpy_P(buffer, PSTR("long"), size);
memcpy_P(buffer, PSTR("long"), 5);
break;
case HASP_EVENT_HOLD:
memcpy_P(buffer, PSTR("hold"), size);
memcpy_P(buffer, PSTR("hold"), 5);
break;
case HASP_EVENT_LOST:
memcpy_P(buffer, PSTR("lost"), size);
memcpy_P(buffer, PSTR("lost"), 5);
break;
case HASP_EVENT_CHANGED:
memcpy_P(buffer, PSTR("changed"), size);
memcpy_P(buffer, PSTR("changed"), 8);
break;
default:
memcpy_P(buffer, PSTR("unknown"), size);
memcpy_P(buffer, PSTR("unknown"), 8);
}
}