Tomas Hozza 0cd5a0
diff --git a/bin/nsupdate/nsupdate.c b/bin/nsupdate/nsupdate.c
Tomas Hozza 0cd5a0
index 486c102..dc12a85 100644
Tomas Hozza 0cd5a0
--- a/bin/nsupdate/nsupdate.c
Tomas Hozza 0cd5a0
+++ b/bin/nsupdate/nsupdate.c
Tomas Hozza 0cd5a0
@@ -1566,16 +1566,20 @@ evaluate_realm(char *cmdline) {
Tomas Hozza 0cd5a0
 #ifdef GSSAPI
Tomas Hozza 0cd5a0
 	char *word;
Tomas Hozza 0cd5a0
 	char buf[1024];
Tomas Hozza 0cd5a0
+	int n;
Tomas Hozza 0cd5a0
 
Tomas Hozza 0cd5a0
-	word = nsu_strsep(&cmdline, " \t\r\n");
Tomas Hozza 0cd5a0
-	if (word == NULL || *word == 0) {
Tomas Hozza 0cd5a0
-		if (realm != NULL)
Tomas Hozza 0cd5a0
-			isc_mem_free(mctx, realm);
Tomas Hozza 0cd5a0
+	if (realm != NULL) {
Tomas Hozza 0cd5a0
+		isc_mem_free(mctx, realm);
Tomas Hozza 0cd5a0
 		realm = NULL;
Tomas Hozza 0cd5a0
-		return (STATUS_MORE);
Tomas Hozza 0cd5a0
 	}
Tomas Hozza 0cd5a0
 
Tomas Hozza 0cd5a0
-	snprintf(buf, sizeof(buf), "@%s", word);
Tomas Hozza 0cd5a0
+	word = nsu_strsep(&cmdline, " \t\r\n");
Tomas Hozza 0cd5a0
+	if (word == NULL || *word == 0)
Tomas Hozza 0cd5a0
+		return (STATUS_MORE);
Tomas Hozza 0cd5a0
+
Tomas Hozza 0cd5a0
+	n = snprintf(buf, sizeof(buf), "@%s", word);
Tomas Hozza 0cd5a0
+	if (n < 0 || (size_t)n >= sizeof(buf))
Tomas Hozza 0cd5a0
+		fatal("realm is too long");
Tomas Hozza 0cd5a0
 	realm = isc_mem_strdup(mctx, buf);
Tomas Hozza 0cd5a0
 	if (realm == NULL)
Tomas Hozza 0cd5a0
 		fatal("out of memory");