diff --git a/src/adb_comp.c b/src/adb_comp.c
index d4f55952bf0cfaa07fe4b71db9a8a3f820297f36..2f92924f6cc5226ef043f6e6acdffb6c61df7160 100644
--- a/src/adb_comp.c
+++ b/src/adb_comp.c
@@ -57,14 +57,14 @@ static const struct compression_info *compression_info_by_alg(uint8_t alg)
 int adb_parse_compression(const char *spec_string, struct adb_compression_spec *spec)
 {
 	const struct compression_info *ci;
-	const char *delim = strchr(spec_string, ':');
+	const char *delim = strchrnul(spec_string, ':');
 	char *end;
 	long level = 0;
 
 	ci = compression_info_by_name(spec_string, delim - spec_string, &spec->alg);
 	if (!ci) goto err;
 	if (*delim != 0) {
-		if (delim[0] != ':' || delim[1] == 0) goto err;
+		if (delim[1] == 0) goto err;
 		if (ci->max_level == 0) goto err;
 
 		level = strtol(delim+1, &end, 0);
@@ -142,7 +142,7 @@ struct apk_ostream *adb_compress(struct apk_ostream *os, struct adb_compression_
 	}
 
 	if (apk_ostream_write(os, "ADBc", 4) < 0) goto err;
-	if (apk_ostream_write(os, &spec, sizeof spec) < 0) goto err;
+	if (apk_ostream_write(os, spec, sizeof *spec) < 0) goto err;
 	return ci->compress(os, spec->level);
 
 err:
diff --git a/src/io_zstd.c b/src/io_zstd.c
index 5215b62cf16659df23adef6ee55514c60d02543b..c25b4a4c0b46e84196587d8f08aa89e69dfe0577 100644
--- a/src/io_zstd.c
+++ b/src/io_zstd.c
@@ -221,7 +221,8 @@ struct apk_ostream *apk_ostream_zstd(struct apk_ostream *output, uint8_t level)
 	if (threads < bounds.lowerBound) threads = bounds.lowerBound;
 	if (threads > bounds.upperBound) threads = bounds.upperBound;
 
-	errc = ZSTD_CCtx_setParameter(os->ctx, ZSTD_c_compressionLevel, level);
+	/* default level is 3 and that's not that useful here */
+	errc = ZSTD_CCtx_setParameter(os->ctx, ZSTD_c_compressionLevel, level ?: 9);
 	if (ZSTD_isError(errc)) {
 		free(os);
 		goto err;