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 topic[8];
char buffer[8]; char buffer[8];
memcpy_P(topic, PSTR("idle"), 8); memcpy_P(topic, PSTR("idle"), 5);
hasp_get_sleep_payload(state, buffer); hasp_get_sleep_payload(state, buffer);
dispatch_state_subtopic(topic, buffer); dispatch_state_subtopic(topic, buffer);
} }

View File

@ -176,9 +176,9 @@ void event_timer_clock(lv_task_t* task)
timeval curTime; timeval curTime;
int rslt = gettimeofday(&curTime, NULL); int rslt = gettimeofday(&curTime, NULL);
(void)rslt; // unused (void)rslt; // unused
time_t seconds = curTime.tv_sec; 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); tm* timeinfo = localtime(&seconds);
lv_task_set_period(task, data->interval - tv_msec); lv_task_set_period(task, data->interval - tv_msec);
char buffer[128] = {0}; char buffer[128] = {0};
@ -835,7 +835,7 @@ void cpicker_event_handler(lv_obj_t* obj, lv_event_t event)
if(!translate_event(obj, event, hasp_event_id) || event == LV_EVENT_VALUE_CHANGED) return; if(!translate_event(obj, event, hasp_event_id) || event == LV_EVENT_VALUE_CHANGED) return;
/* Get the new value */ /* Get the new value */
lv_color_t color = lv_cpicker_get_color(obj); lv_color_t color = lv_cpicker_get_color(obj);
lv_cpicker_color_mode_t mode = lv_cpicker_get_color_mode(obj); lv_cpicker_color_mode_t mode = lv_cpicker_get_color_mode(obj);
if(hasp_event_id == HASP_EVENT_CHANGED && last_color_sent.full == color.full) return; // same value as before if(hasp_event_id == HASP_EVENT_CHANGED && last_color_sent.full == color.full) return; // same value as before
@ -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)) if(const char* tag = my_obj_get_tag(obj))
snprintf_P(data, sizeof(data), 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}"), PSTR("{\"event\":\"%s\",\"color\":\"#%02x%02x%02x\",\"r\":%d,\"g\":%d,\"b\":%d,\"h\":%d,\"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); "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 else
snprintf_P(data, sizeof(data), 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, PSTR("{\"event\":\"%s\",\"color\":\"#%02x%02x%02x\",\"r\":%d,\"g\":%d,\"b\":%d,\"h\":%d,\"s\":%"
c32.ch.red, c32.ch.green, c32.ch.blue, c32.ch.red, c32.ch.green, c32.ch.blue, hsv.h, hsv.s, hsv.v); "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); 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) { switch(eventid) {
case HASP_EVENT_ON: case HASP_EVENT_ON:
memcpy_P(buffer, PSTR("on"), size); memcpy_P(buffer, PSTR("on"), 3);
break; break;
case HASP_EVENT_OFF: case HASP_EVENT_OFF:
memcpy_P(buffer, PSTR("off"), size); memcpy_P(buffer, PSTR("off"), 4);
break; break;
case HASP_EVENT_UP: case HASP_EVENT_UP:
memcpy_P(buffer, PSTR("up"), size); memcpy_P(buffer, PSTR("up"), 3);
break; break;
case HASP_EVENT_DOWN: case HASP_EVENT_DOWN:
memcpy_P(buffer, PSTR("down"), size); memcpy_P(buffer, PSTR("down"), 5);
break; break;
case HASP_EVENT_RELEASE: case HASP_EVENT_RELEASE:
memcpy_P(buffer, PSTR("release"), size); memcpy_P(buffer, PSTR("release"), 8);
break; break;
case HASP_EVENT_LONG: case HASP_EVENT_LONG:
memcpy_P(buffer, PSTR("long"), size); memcpy_P(buffer, PSTR("long"), 5);
break; break;
case HASP_EVENT_HOLD: case HASP_EVENT_HOLD:
memcpy_P(buffer, PSTR("hold"), size); memcpy_P(buffer, PSTR("hold"), 5);
break; break;
case HASP_EVENT_LOST: case HASP_EVENT_LOST:
memcpy_P(buffer, PSTR("lost"), size); memcpy_P(buffer, PSTR("lost"), 5);
break; break;
case HASP_EVENT_CHANGED: case HASP_EVENT_CHANGED:
memcpy_P(buffer, PSTR("changed"), size); memcpy_P(buffer, PSTR("changed"), 8);
break; break;
default: default:
memcpy_P(buffer, PSTR("unknown"), size); memcpy_P(buffer, PSTR("unknown"), 8);
} }
} }