process_pipeline: correctly handle empty stdout
When stdout is empty and end is zero. There are several incorrect read and write access. Valgrind reported following: ``` ==70402== Invalid write of size 1 ==70402== at 0x11F626: post_process_finished (process_pipeline.c:1266) ==70402== by 0x53D7C32: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.8400.1) ==70402== by 0x53D88D2: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.8400.1) ==70402== by 0x53D6627: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.8400.1) ==70402== by 0x53D7C32: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.8400.1) ==70402== by 0x53D7C6C: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.8400.1) ==70402== by 0x55D5344: ??? (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.8400.1) ==70402== by 0x55D7576: ??? (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.8400.1) ==70402== by 0x55D7CDF: g_main_context_iteration (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.8400.1) ==70402== by 0x5407EDC: g_application_run (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.8400.1) ==70402== by 0x11BB5F: main (main.c:1551) ==70402== Address 0xb84651f is 1 bytes before a block of size 16 alloc'd ==70402== at 0x484BDD0: realloc (vg_replace_malloc.c:1801) ==70402== by 0x55DE761: g_realloc (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.8400.1) ==70402== by 0x53AE250: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.8400.1) ==70402== by 0x53AE3C0: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.8400.1) ==70402== by 0x53B6CFC: g_output_stream_write (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.8400.1) ==70402== by 0x53B6E48: g_output_stream_write_all (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.8400.1) ==70402== by 0x53D65EA: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.8400.1) ==70402== by 0x53D7C32: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.8400.1) ==70402== by 0x53D88D2: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.8400.1) ==70402== by 0x53B7D8A: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.8400.1) ==70402== by 0x53D7C32: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.8400.1) ==70402== by 0x53D88D2: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.8400.1) ==70402== ==70402== Invalid read of size 1 ==70402== at 0x11F642: post_process_finished (process_pipeline.c:1270) ==70402== by 0x53D7C32: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.8400.1) ==70402== by 0x53D88D2: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.8400.1) ==70402== by 0x53D6627: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.8400.1) ==70402== by 0x53D7C32: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.8400.1) ==70402== by 0x53D7C6C: ??? (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.8400.1) ==70402== by 0x55D5344: ??? (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.8400.1) ==70402== by 0x55D7576: ??? (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.8400.1) ==70402== by 0x55D7CDF: g_main_context_iteration (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.8400.1) ==70402== by 0x5407EDC: g_application_run (in /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0.8400.1) ==70402== by 0x11BB5F: main (main.c:1551) ```
This commit is contained in:

committed by
Martijn Braam

parent
529e7841ab
commit
928714595d
@@ -1262,14 +1262,17 @@ static void
|
||||
post_process_finished(GSubprocess *proc, GAsyncResult *res, GdkTexture *thumb)
|
||||
{
|
||||
char *stdout;
|
||||
char *path;
|
||||
g_subprocess_communicate_utf8_finish(proc, res, &stdout, NULL, NULL);
|
||||
|
||||
// The last line contains the file name
|
||||
int end = strlen(stdout);
|
||||
|
||||
if (end > 0) {
|
||||
// Skip the newline at the end
|
||||
stdout[--end] = '\0';
|
||||
|
||||
char *path = path = stdout + end - 1;
|
||||
path = stdout + end - 1;
|
||||
do {
|
||||
if (*path == '\n') {
|
||||
path++;
|
||||
@@ -1277,6 +1280,9 @@ post_process_finished(GSubprocess *proc, GAsyncResult *res, GdkTexture *thumb)
|
||||
}
|
||||
--path;
|
||||
} while (path > stdout);
|
||||
} else {
|
||||
path = stdout;
|
||||
}
|
||||
|
||||
mp_main_capture_completed(thumb, path);
|
||||
}
|
||||
|
Reference in New Issue
Block a user