summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorasomers <asomers@FreeBSD.org>2016-05-04 21:07:30 +0000
committerasomers <asomers@FreeBSD.org>2016-05-04 21:07:30 +0000
commit9741b20fcf6dbf8e5703d7b4d238780715619bf6 (patch)
treed15fa04efb0076c9f17e4f112bcd6ccf77c553e6
parentbc2317c309a290eb24afcc282c590225fc35048d (diff)
downloadFreeBSD-src-9741b20fcf6dbf8e5703d7b4d238780715619bf6.zip
FreeBSD-src-9741b20fcf6dbf8e5703d7b4d238780715619bf6.tar.gz
Fix "getextattr -x" with non-ascii attribute values
extattr/rmextattr.c When printing hex output, treat all attribute values as unsigned char arrays instead of sign extending them to 32 bit values. extattr/tests/extattr_test.sh Add a regression test PR: 209039 MFC after: 4 weeks Sponsored by: Spectra Logic Corp
-rw-r--r--usr.sbin/extattr/rmextattr.c3
-rwxr-xr-xusr.sbin/extattr/tests/extattr_test.sh19
2 files changed, 18 insertions, 4 deletions
diff --git a/usr.sbin/extattr/rmextattr.c b/usr.sbin/extattr/rmextattr.c
index 7f6fdc2f..4373fd6 100644
--- a/usr.sbin/extattr/rmextattr.c
+++ b/usr.sbin/extattr/rmextattr.c
@@ -294,7 +294,8 @@ main(int argc, char *argv[])
printf("\"%s\"", visbuf);
} else if (flag_hex) {
for (i = 0; i < ret; i++)
- printf("%s%02x", i ? " " : "", buf[i]);
+ printf("%s%02x", i ? " " : "",
+ (unsigned char)buf[i]);
} else {
fwrite(buf, ret, 1, stdout);
}
diff --git a/usr.sbin/extattr/tests/extattr_test.sh b/usr.sbin/extattr/tests/extattr_test.sh
index ac0f113..d9c0c71 100755
--- a/usr.sbin/extattr/tests/extattr_test.sh
+++ b/usr.sbin/extattr/tests/extattr_test.sh
@@ -43,9 +43,22 @@ hex_head() {
}
hex_body() {
touch foo
- atf_check -s exit:0 -o empty setextattr user myattr1 XYZ foo
+ atf_check -s exit:0 -o empty setextattr user myattr XYZ foo
atf_check -s exit:0 -o inline:"58 59 5a\n" \
- getextattr -qx user myattr1 foo
+ getextattr -qx user myattr foo
+}
+
+atf_test_case hex_nonascii
+hex_nonascii_head() {
+ atf_set "descr" "Get binary attribute values in hexadecimal"
+}
+hex_nonascii_body() {
+ touch foo
+ BINSTUFF=`echo $'\x20\x30\x40\x55\x66\x70\x81\xa2\xb3\xee\xff'`
+ atf_check -s exit:0 -o empty setextattr user myattr "$BINSTUFF" foo
+ getextattr user myattr foo
+ atf_check -s exit:0 -o inline:"20 30 40 55 66 70 81 a2 b3 ee ff\n" \
+ getextattr -qx user myattr foo
}
atf_test_case long_name
@@ -299,9 +312,9 @@ unprivileged_user_cannot_set_system_attr_body() {
atf_init_test_cases() {
- # TODO: add test cases for verbose output (without -q)
atf_add_test_case bad_namespace
atf_add_test_case hex
+ atf_add_test_case hex_nonascii
atf_add_test_case long_name
atf_add_test_case loud
atf_add_test_case noattrs
OpenPOWER on IntegriCloud