Fix invalid memory usage in event.c

p_dup really only duplicates the given region of memory. It does not append a
zero byte. Thus, the string we are using here was not zero-terminated.

Fix this by just using lua_pushlstring() so that we do not have to worry about a
null terminating the string at all.

Signed-off-by: Uli Schlachter <psychon@znc.in>
This commit is contained in:
Uli Schlachter 2016-03-27 11:26:04 +02:00
parent 4731712af2
commit 5fe0344232
1 changed files with 1 additions and 6 deletions

View File

@ -793,7 +793,6 @@ event_handle_randr_output_change_notify(xcb_randr_notify_event_t *ev)
if(ev->subCode == XCB_RANDR_NOTIFY_OUTPUT_CHANGE) { if(ev->subCode == XCB_RANDR_NOTIFY_OUTPUT_CHANGE) {
xcb_randr_output_t output = ev->u.oc.output; xcb_randr_output_t output = ev->u.oc.output;
uint8_t connection = ev->u.oc.connection; uint8_t connection = ev->u.oc.connection;
char *output_name = NULL;
const char *connection_str = NULL; const char *connection_str = NULL;
xcb_randr_get_output_info_reply_t *info = NULL; xcb_randr_get_output_info_reply_t *info = NULL;
lua_State *L = globalconf_get_lua_State(); lua_State *L = globalconf_get_lua_State();
@ -806,9 +805,6 @@ event_handle_randr_output_change_notify(xcb_randr_notify_event_t *ev)
if(!info) if(!info)
return; return;
output_name = p_dup((char *)xcb_randr_get_output_info_name(info),
xcb_randr_get_output_info_name_length(info));
switch(connection) { switch(connection) {
case XCB_RANDR_CONNECTION_CONNECTED: case XCB_RANDR_CONNECTION_CONNECTED:
connection_str = "Connected"; connection_str = "Connected";
@ -821,11 +817,10 @@ event_handle_randr_output_change_notify(xcb_randr_notify_event_t *ev)
break; break;
} }
lua_pushstring(L, output_name); lua_pushlstring(L, (char *)xcb_randr_get_output_info_name(info), xcb_randr_get_output_info_name_length(info));
lua_pushstring(L, connection_str); lua_pushstring(L, connection_str);
signal_object_emit(L, &global_signals, "screen::change", 2); signal_object_emit(L, &global_signals, "screen::change", 2);
p_delete(&output_name);
p_delete(&info); p_delete(&info);
/* The docs for RRSetOutputPrimary say we get this signal */ /* The docs for RRSetOutputPrimary say we get this signal */