summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2018-09-08 14:45:52 +0200
committerThomas Haller <thaller@redhat.com>2018-10-23 16:55:04 +0200
commit2cc937bb913ec6980061a2c38bd1b90f9286cf2b (patch)
treeeaad0044229e67847d0f6724f1109380025b276b
parenta22a116d4bcd30ae398a0a7522c46221da4852ee (diff)
downloadNetworkManager-th/read-vpn-plugins-tests.tar.gz
libnm: fix endless loop in nm_vpn_service_plugin_read_vpn_details()th/read-vpn-plugins-tests
Previously, a "DONE\n" was required to break the loop.
-rw-r--r--libnm/nm-vpn-service-plugin.c8
-rw-r--r--libnm/tests/test-general.c11
2 files changed, 10 insertions, 9 deletions
diff --git a/libnm/nm-vpn-service-plugin.c b/libnm/nm-vpn-service-plugin.c
index 8d6c43a260..ed9da7f787 100644
--- a/libnm/nm-vpn-service-plugin.c
+++ b/libnm/nm-vpn-service-plugin.c
@@ -810,15 +810,14 @@ nm_vpn_service_plugin_read_vpn_details (int fd,
errno = 0;
nr = read (fd, &c, 1);
- if (nr == -1) {
+ if (nr < 0) {
if (errno == EAGAIN) {
g_usleep (100);
continue;
}
break;
}
-
- if (c != '\n') {
+ if (nr > 0 && c != '\n') {
g_string_append_c (line, c);
continue;
}
@@ -879,6 +878,9 @@ nm_vpn_service_plugin_read_vpn_details (int fd,
}
g_string_truncate (line, 0);
+
+ if (nr == 0)
+ break;
}
if (success) {
diff --git a/libnm/tests/test-general.c b/libnm/tests/test-general.c
index 459416d3d8..410087af64 100644
--- a/libnm/tests/test-general.c
+++ b/libnm/tests/test-general.c
@@ -2295,12 +2295,12 @@ _do_read_vpn_details_impl1 (const char *file,
static void
test_nm_vpn_service_plugin_read_vpn_details (void)
{
- //_do_read_vpn_details_empty ("");
- //_do_read_vpn_details_empty ("hallo");
- //_do_read_vpn_details_empty ("DONE");
+ _do_read_vpn_details_empty ("");
+ _do_read_vpn_details_empty ("hallo");
+ _do_read_vpn_details_empty ("DONE");
_do_read_vpn_details_empty ("DONE\n");
- //_do_read_vpn_details_empty ("DONE\0");
- //_do_read_vpn_details_empty ("\0DONE\0");
+ _do_read_vpn_details_empty ("DONE\0");
+ _do_read_vpn_details_empty ("\0DONE\0");
_do_read_vpn_details (""
"DATA_KEY=some-key\n"
@@ -2375,7 +2375,6 @@ test_nm_vpn_service_plugin_read_vpn_details (void)
"=can have\n"
"=continuations too\n"
"SECRET_VAL=value\n"
- "DONE\n"
"",
READ_VPN_DETAIL_DATA (
{ "some-key", "string\ncontinued after a line break" },