chiark / gitweb /
resolved: accept UTF-8 hostnames from bus clients
[elogind.git] / src / resolve / resolved-dns-domain.c
index f3e7df7a1e819c36d8f068eb8886f6cec8bedba6..1bb011d9e72297197c2886d1ccb493644d0d29b2 100644 (file)
@@ -88,7 +88,7 @@ int dns_label_unescape(const char **name, char *dest, size_t sz) {
                         } else
                                 return -EINVAL;
 
-                } else if (*n >= ' ' && *n != 127) {
+                } else if ((uint8_t) *n >= (uint8_t) ' ' && *n != 127) {
 
                         /* Normal character */
                         *(d++) = *(n++);
@@ -141,13 +141,13 @@ int dns_label_escape(const char *p, size_t l, char **ret) {
 
                         /* Proper character */
                         *(q++) = *p;
-                } else if (*p >= ' ' && *p != 127) {
+                } else if ((uint8_t) *p >= (uint8_t) ' ' && *p != 127) {
 
                         /* Everything else */
                         *(q++) = '\\';
-                        *(q++) = '0' + (char) ((unsigned) *p / 100);
-                        *(q++) = '0' + (char) (((unsigned) *p / 10) % 10);
-                        *(q++) = '0' + (char) ((unsigned) *p % 10);
+                        *(q++) = '0' + (char) ((uint8_t) *p / 100);
+                        *(q++) = '0' + (char) (((uint8_t) *p / 10) % 10);
+                        *(q++) = '0' + (char) ((uint8_t) *p % 10);
 
                 } else
                         return -EINVAL;
@@ -172,7 +172,6 @@ int dns_name_normalize(const char *s, char **_ret) {
         int r;
 
         assert(s);
-        assert(_ret);
 
         for (;;) {
                 _cleanup_free_ char *t = NULL;
@@ -210,8 +209,11 @@ int dns_name_normalize(const char *s, char **_ret) {
                 return -ENOMEM;
 
         ret[n] = 0;
-        *_ret = ret;
-        ret = NULL;
+
+        if (_ret) {
+                *_ret = ret;
+                ret = NULL;
+        }
 
         return 0;
 }