]> source.dussan.org Git - rspamd.git/commitdiff
[Minor] Rdns: Fix parsing of nameserver lines
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Fri, 22 Feb 2019 17:03:16 +0000 (17:03 +0000)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Fri, 22 Feb 2019 17:03:16 +0000 (17:03 +0000)
Issue: #2762
Closes: #2762
contrib/librdns/util.c

index b793b9077312b6d941b1810209a6870c64fc04ab..9f1bc60182275e22048d37c65fcbe71b4edaf9cb 100644 (file)
@@ -537,8 +537,9 @@ rdns_resolver_conf_process_line (struct rdns_resolver *resolver,
                const char *line, rdns_resolv_conf_cb cb, void *ud)
 {
        const char *p, *c, *end;
-       bool has_obrace = false;
+       bool has_obrace = false, ret;
        unsigned int port = dns_port;
+       char *cpy_buf;
 
        end = line + strlen (line);
 
@@ -546,7 +547,7 @@ rdns_resolver_conf_process_line (struct rdns_resolver *resolver,
                        strncmp (line, "nameserver", sizeof ("nameserver") - 1) == 0) {
                p = line + sizeof ("nameserver") - 1;
                /* Skip spaces */
-               while (*p == ' ' || *p == '\t') {
+               while (isspace (*p)) {
                        p ++;
                }
 
@@ -578,14 +579,23 @@ rdns_resolver_conf_process_line (struct rdns_resolver *resolver,
                                }
                        }
 
+                       cpy_buf = malloc (p - c + 1);
+                       assert (cpy_buf != NULL);
+                       memcpy (cpy_buf, c, p - c);
+                       cpy_buf[p - c] = '\0';
+
                        if (cb == NULL) {
-                               return rdns_resolver_add_server (resolver, c, port, 0,
+                               ret = rdns_resolver_add_server (resolver, cpy_buf, port, 0,
                                                default_io_cnt) != NULL;
                        }
                        else {
-                               return cb (resolver, c, port, 0,
+                               ret = cb (resolver, cpy_buf, port, 0,
                                                default_io_cnt, ud);
                        }
+
+                       free (cpy_buf);
+
+                       return ret;
                }
                else {
                        return false;