diff options
author | asomers <asomers@FreeBSD.org> | 2016-05-04 21:07:30 +0000 |
---|---|---|
committer | asomers <asomers@FreeBSD.org> | 2016-05-04 21:07:30 +0000 |
commit | 9741b20fcf6dbf8e5703d7b4d238780715619bf6 (patch) | |
tree | d15fa04efb0076c9f17e4f112bcd6ccf77c553e6 | |
parent | bc2317c309a290eb24afcc282c590225fc35048d (diff) | |
download | FreeBSD-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.c | 3 | ||||
-rwxr-xr-x | usr.sbin/extattr/tests/extattr_test.sh | 19 |
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 |