=== modified file 'libgksu/gksu-run-helper.c' --- libgksu/gksu-run-helper.c 2008-06-10 14:14:50 +0000 +++ libgksu/gksu-run-helper.c 2008-06-10 15:11:25 +0000 @@ -63,6 +63,19 @@ dirname, strerror (errno)); } +gboolean read_gstring_from_stdin(GString *s) +{ + gchar buffer[255]; + char *readp; + do + { + readp = fgets(buffer, sizeof(buffer), stdin); + strip (buffer); + g_string_append(s, buffer); + } while (sizeof(buffer)-1 == strlen(readp)); + return TRUE; +} + int main (int argc, char **argv) { @@ -79,8 +92,6 @@ gchar *xauth_token = NULL; gchar *sn_id = NULL; - gchar buffer[255]; - gint return_code; if (argc < 2) @@ -101,24 +112,22 @@ xauth_file = g_strdup_printf ("%s/.Xauthority", xauth_dir); - fgets (buffer, 255, stdin); - strip (buffer); + GString *s = g_string_sized_new(255); + read_gstring_from_stdin(s); /* strlen ("gksu-run: ") == 10, see su.c */ - xauth_display = g_strdup_printf ("%s", buffer + 10); - - bzero (buffer, 255); - fgets (buffer, 255, stdin); - strip (buffer); - - sn_id = g_strdup_printf ("%s", buffer + 10); + xauth_display = g_strdup_printf ("%s", s->str + 10); + + s = g_string_truncate(s,0); + read_gstring_from_stdin(s); + + sn_id = g_strdup_printf ("%s", s->str + 10); setenv("DESKTOP_STARTUP_ID", sn_id, TRUE); - bzero (buffer, 255); - fgets (buffer, 255, stdin); - strip (buffer); + s = g_string_truncate(s,0); + read_gstring_from_stdin(s); - xauth_token = g_strdup_printf ("%s", buffer + 10); + xauth_token = g_strdup_printf ("%s", s->str + 10); /* a bit more security is always fine */ { @@ -161,6 +170,7 @@ return_code = system (argv[1]); clean_dir (xauth_dir); + g_string_free(s, TRUE); return return_code; } }