summaryrefslogtreecommitdiff
path: root/libacl
diff options
context:
space:
mode:
authorKamil Dudka <kdudka@redhat.com>2013-10-31 19:24:35 +0100
committerAndreas Gruenbacher <agruen@linbit.com>2013-11-01 12:06:01 +0100
commitfb071c302b8cad8837bc1e57407dc3ffa14d3f99 (patch)
tree66e64bbd453e5f7b7bff5b41cc77517890e1d4f1 /libacl
parent3f079d4e0512c9a241fb23c56a0421441c83621e (diff)
downloadacl-fb071c302b8cad8837bc1e57407dc3ffa14d3f99.tar.gz
libacl: fix SIGSEGV of getfacl -e on overly long group name
We simply make sure that at least one tab is used for indentation.
Diffstat (limited to 'libacl')
-rw-r--r--libacl/__acl_to_any_text.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/libacl/__acl_to_any_text.c b/libacl/__acl_to_any_text.c
index a4f9c34..1d10e81 100644
--- a/libacl/__acl_to_any_text.c
+++ b/libacl/__acl_to_any_text.c
@@ -247,6 +247,11 @@ acl_entry_to_any_str(const acl_entry_t entry_d, char *text_p, ssize_t size,
options & TEXT_ALL_EFFECTIVE) {
x = (options & TEXT_SMART_INDENT) ?
((text_p - orig_text_p)/8) : TABS-1;
+
+ /* use at least one tab for indentation */
+ if (x > (TABS-1))
+ x = (TABS-1);
+
strncpy(text_p, tabs+x, size);
ADVANCE(TABS-x);