diff options
author | Thomas Haller <thaller@redhat.com> | 2018-09-08 14:45:52 +0200 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2018-10-23 16:55:04 +0200 |
commit | 2cc937bb913ec6980061a2c38bd1b90f9286cf2b (patch) | |
tree | eaad0044229e67847d0f6724f1109380025b276b | |
parent | a22a116d4bcd30ae398a0a7522c46221da4852ee (diff) | |
download | NetworkManager-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.c | 8 | ||||
-rw-r--r-- | libnm/tests/test-general.c | 11 |
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" }, |