diff --git a/lib/dpkg/compress.c b/lib/dpkg/compress.c
index 3822a5520390f6f097d00f60b4a851602c514cb2..e052d0bd86e2a5fc793390bfa252b5b83300b275 100644
--- a/lib/dpkg/compress.c
+++ b/lib/dpkg/compress.c
@@ -1028,6 +1028,12 @@ compressor_check_params(struct compress_params *params, struct dpkg_error *err)
 {
 	compressor_fixup_params(params);
 
+	if (params->level > 9) {
+		dpkg_put_error(err, _("invalid compression level %d"),
+		               params->level);
+		return false;
+	}
+
 	if (params->strategy == COMPRESSOR_STRATEGY_NONE)
 		return true;
 
diff --git a/src/deb/main.c b/src/deb/main.c
index 80886f6511baf8405275f01fb1c77e494c5f8fe8..416eba30fc78b08eac99371b047b81b5de1e9dc8 100644
--- a/src/deb/main.c
+++ b/src/deb/main.c
@@ -187,13 +187,7 @@ parse_compress_level(const char *str)
 static void
 set_compress_level(const struct cmdinfo *cip, const char *value)
 {
-  long level;
-
-  level = dpkg_options_parse_arg_int(cip, value);
-  if (level < 0 || level > 9)
-    badusage(_("invalid compression level for -%c: %ld"), cip->oshort, level);
-
-  compress_params.level = level;
+  compress_params.level = dpkg_options_parse_arg_int(cip, value);
 }
 
 static void