chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
dns-domain: enforce maximum DNS domain name length
[elogind.git]
/
src
/
resolve
/
resolved-dns-domain.c
diff --git
a/src/resolve/resolved-dns-domain.c
b/src/resolve/resolved-dns-domain.c
index 33ae2610e117460c2a59ac4b313234448f942229..a41052dde39eee8407436ca0fe64f0df85339b3c 100644
(file)
--- a/
src/resolve/resolved-dns-domain.c
+++ b/
src/resolve/resolved-dns-domain.c
@@
-45,6
+45,9
@@
int dns_label_unescape(const char **name, char *dest, size_t sz) {
if (sz <= 0)
return -ENOSPC;
if (sz <= 0)
return -ENOSPC;
+ if (r >= DNS_LABEL_MAX)
+ return -EINVAL;
+
if (*n == '\\') {
/* Escaped character */
if (*n == '\\') {
/* Escaped character */
@@
-114,6
+117,9
@@
int dns_label_escape(const char *p, size_t l, char **ret) {
assert(p);
assert(ret);
assert(p);
assert(ret);
+ if (l > DNS_LABEL_MAX)
+ return -EINVAL;
+
s = malloc(l * 4 + 1);
if (!s)
return -ENOMEM;
s = malloc(l * 4 + 1);
if (!s)
return -ENOMEM;
@@
-197,6
+203,9
@@
int dns_name_normalize(const char *s, char **_ret) {
n += r;
}
n += r;
}
+ if (n > DNS_NAME_MAX)
+ return -EINVAL;
+
if (!GREEDY_REALLOC(ret, allocated, n + 1))
return -ENOMEM;
if (!GREEDY_REALLOC(ret, allocated, n + 1))
return -ENOMEM;