diff --git a/src/syncterm/bbslist.c b/src/syncterm/bbslist.c
index 484ee9d1f7aadfbc65a80cfcbaba478ca07efd1d..2712374dcdc5fbb61b7287ec35ce5134c5288e8d 100644
--- a/src/syncterm/bbslist.c
+++ b/src/syncterm/bbslist.c
@@ -2268,7 +2268,7 @@ change_settings(int connected)
 		for (j = 0; audio_output_types[j].name != NULL; j++) {
 			if (xpbeep_sound_devices_enabled & audio_output_types[j].bit) {
 				if (audio_opts[0])
-					strcat(audio_opts, ", ");
+					strlcat(audio_opts, ", ", sizeof(audio_opts));
 				strcat(audio_opts, audio_output_types[j].name);
 			}
 		}
@@ -2789,10 +2789,7 @@ load_bbslist(struct bbslist **list,
 	/* Web lists */
 	if (settings.webgets) {
 		char cache_path[MAX_PATH + 1];
-		if (get_syncterm_filename(cache_path, sizeof(cache_path), SYNCTERM_PATH_CACHE, false)) {
-			backslash(cache_path);
-			strlcat(cache_path, "syncterm-system-cache", sizeof(cache_path));
-			mkpath(cache_path);
+		if (get_syncterm_filename(cache_path, sizeof(cache_path), SYNCTERM_PATH_SYSTEM_CACHE, false)) {
 			backslash(cache_path);
 			for (size_t i = 0; settings.webgets[i]; i++) {
 				char *lpath;
diff --git a/src/syncterm/syncterm.c b/src/syncterm/syncterm.c
index 035332998b44cd0956bbf496bf574b28f36f3d7e..a1e1091686221680fb314ff7361220f53545216e 100644
--- a/src/syncterm/syncterm.c
+++ b/src/syncterm/syncterm.c
@@ -1453,7 +1453,8 @@ get_syncterm_filename(char *fn, int fnlen, int type, bool shared)
 			return NULL;
 		backslash(fn);
 		strlcat(fn, "syncterm-system-cache", fnlen);
-		mkpath(fn);
+		if (mkpath(fn) != 0)
+			return NULL;
 		return fn;
 	}
 	memset(fn, 0, fnlen);
@@ -1600,7 +1601,7 @@ update_webget_progress(struct webget_request *reqs, size_t items, bool leaveup)
 	bool errors = false;
 
 	for (size_t i = 0; i < items; i++) {
-		if (sz < pos)
+		if (sz <= pos)
 			break;
 		assert_pthread_mutex_lock(&reqs[i].mtx);
 		if (reqs[i].msg) {
@@ -1608,7 +1609,7 @@ update_webget_progress(struct webget_request *reqs, size_t items, bool leaveup)
 			helpbuf[pos] = 0;
 			errors = true;
 		}
-		if (reqs[i].cb_data & UINT64_C(0x8000000000000000)) {
+		else if (reqs[i].cb_data & UINT64_C(0x8000000000000000)) {
 			helpbuf[pos++] = '`';
 			helpbuf[pos] = 0;
 			errors = true;
diff --git a/src/syncterm/term.c b/src/syncterm/term.c
index 25d6b4e89c1b76f909a411dc29dda5e24cdc9901..06456eeabe27bbf4670c53ed3a0a9162efb8d443 100644
--- a/src/syncterm/term.c
+++ b/src/syncterm/term.c
@@ -3730,6 +3730,7 @@ apc_handler(char *strbuf, size_t slen, char *retbuf, size_t retsize, void *apcd)
 			return;
 		off = flength(fn);
 		switch (off) {
+			case 10240:
 			case 4096:
 			case 3584:
 			case 2048:
diff --git a/src/syncterm/webget.c b/src/syncterm/webget.c
index 6d7012693264ff97ec2288c53329cb4d804383a6..54fad953509ad2cc18cd29b1fa5cf6f165e4f2ed 100644
--- a/src/syncterm/webget.c
+++ b/src/syncterm/webget.c
@@ -97,7 +97,7 @@ set_msgf(struct webget_request *req, const char *newmsgf, ...)
 }
 
 static ssize_t
-recv_nbytes(struct http_session *sess, uint8_t *buf, size_t chunk_size, bool *eof)
+recv_nbytes(struct http_session *sess, uint8_t *buf, const size_t chunk_size, bool *eof)
 {
 	ssize_t received = 0;
 
@@ -324,11 +324,15 @@ recv_line(struct http_session *sess, int timeout, size_t *len)
 			ret = newret;
 		}
 	}
-	ret[retpos--] = 0;
-	if (crcount) {
-		if (ret[retpos] != '\r') {
-			set_msg(sess->req, "CR not last character in line.");
-			goto error_return;
+	if (retpos == 0)
+		ret[retpos] = 0;
+	else {
+		ret[retpos--] = 0;
+		if (crcount) {
+			if (ret[retpos] != '\r') {
+				set_msg(sess->req, "CR not last character in line.");
+				goto error_return;
+			}
 		}
 	}
 	if (len)
@@ -526,7 +530,8 @@ parse_cache_control(struct http_session *sess, const char *val)
 			sz = end - val;
 		else
 			sz = sep - val;
-		if (sz == 7 && strnicmp(val, "max-age=", 8) == 0) {
+		// The sep check is for Coverity...
+		if (sz == 7 && strnicmp(val, "max-age=", 8) == 0 && sep) {
 			errno = 0;
 			long long ll = strtoll(&sep[0], NULL, 10);
 			if (ll != 0 || errno == 0) {
@@ -973,7 +978,10 @@ tls_setup(struct http_session *sess)
 		goto error_return;
 	}
 	int off = 1;
-	setsockopt(sess->sock, IPPROTO_TCP, TCP_NODELAY, (char *)&off, sizeof(off));
+	if (setsockopt(sess->sock, IPPROTO_TCP, TCP_NODELAY, (char *)&off, sizeof(off)) == -1) {
+		set_msgf(sess->req, "setsockopt() failed (%d)", SOCKET_ERRNO);
+		goto error_return;
+	}
 	status = cryptSetAttribute(sess->tls, CRYPT_SESSINFO_NETWORKSOCKET, sess->sock);
 	if (cryptStatusError(status)) {
 		set_msgf(sess->req, "Unable To Set Socket (%d)", status);
@@ -1115,6 +1123,7 @@ is_fresh(struct http_session *sess)
 		int len = asprintf(&path, "%s/%s.lst", sess->req->cache_root, sess->req->name);
 		if (len > 0)
 			remove(path);
+		free(path);
 	}
 	return false;
 }
diff --git a/src/xpdev/named_str_list.c b/src/xpdev/named_str_list.c
index 0d676f3c4a1be4eb2ccededfefaf76321565925c..1067215628da9c576db8b3e6a3fcd02e93ffba43 100644
--- a/src/xpdev/named_str_list.c
+++ b/src/xpdev/named_str_list.c
@@ -49,6 +49,8 @@ namedStrListDelete(named_string_t ***list, size_t index)
 	named_string_t **newlist;
 
 	COUNT_LIST_ITEMS(*list, count);
+	if (count == 0)
+		return false;
 	if (index == NAMED_STR_LIST_LAST_INDEX)
 		index = count - 1;
 	if (index >= count)