** Bug fixes
+ gzip -d -S SUFFIX file.SUFFIX would fail for any upper-case byte in SUFFIX.
+ E.g., before, this command would fail:
+ $ :|gzip > kT && gzip -d -S T kT
+ gzip: kT: unknown suffix -- ignored
+ [bug present since the beginning]
+
When decompressing data in 'pack' format, gzip no longer mishandles
leading zeros in the end-of-block code. [bug introduced in gzip-1.6]
#include "ignore-value.h"
#include "stat-time.h"
#include "version.h"
+#include "xalloc.h"
#include "yesno.h"
/* configuration */
break;
}
}
+
+ char *z_lower = xstrdup(z_suffix);
+ strlwr(z_lower);
known_suffixes[suffix_of_builtin
? sizeof known_suffixes / sizeof *known_suffixes - 2
- : 0] = z_suffix;
+ : 0] = z_lower;
suf = known_suffixes + suffix_of_builtin;
nlen = strlen(name);
}
strlwr(suffix);
slen = strlen(suffix);
+ char *match = NULL;
do {
int s = strlen(*suf);
if (slen > s && ! ISSLASH (suffix[slen - s - 1])
&& strequ(suffix + slen - s, *suf)) {
- return name+nlen-s;
+ match = name+nlen-s;
+ break;
}
} while (*++suf != NULL);
+ free(z_lower);
- return NULL;
+ return match;
}
--- /dev/null
+#!/bin/sh
+# Ensure an upper-case user-specified suffix works as expected.
+# This test would have failed in gzip-1.18
+
+# Copyright 2017 Free Software Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+# limit so don't run it by default.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ..
+
+# Use a suffix of "T":
+:|gzip > kT || framework_failure_
+
+fail=0
+gzip -d -S T kT > out 2> err || fail=1
+
+test -f k || fail=1
+compare /dev/null out || fail=1
+compare /dev/null err || fail=1
+
+Exit $fail