On 18.02.26 23:28, Vladimir Sementsov-Ogievskiy wrote:
+
+int net_parse_fds(const char *fds_param, int **fds, int expected_nfds,
+ Error **errp)
+{
+ g_auto(GStrv) fdnames = g_strsplit(fds_param, ":", -1);
+ unsigned nfds = g_strv_length(fdnames);
+ int i;
+
+ if (nfds > INT_MAX) {
+ error_setg(errp, "fds parameter exceeds maximum of %d", INT_MAX);
+ return -1;
+ }
+
+ if (expected_nfds && nfds != expected_nfds) {
+ error_setg(errp, "expected %u socket fds, got %u", expected_nfds,
nfds);
+ return -1;
+ }
+
+ *fds = g_new(int, nfds);
+
+ for (i = 0; i < nfds; i++) {
+ (*fds)[i] = monitor_fd_param(monitor_cur(), fdnames[i], errp);
+ if ((*fds)[i] == -1) {
+ net_free_fds(*fds, i);
+ *fds = NULL;
+ return -1;
+ }
+ }
+
+ return nfds;
Note that I tried to use "int" for queues/nfds consistently, but here
implicit cast unsigned -> int is kept. It seems worse use "int" for
nfds, calling g_strv_length() which returns guint. And we do check
that nfds <= INT_MAX.
+}
--
Best regards,
Vladimir