[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[hurd,commited 4/4] hurd: Fix getxattr/listxattr returning ERANGE
From: |
Samuel Thibault |
Subject: |
[hurd,commited 4/4] hurd: Fix getxattr/listxattr returning ERANGE |
Date: |
Mon, 10 Jun 2024 22:09:30 +0200 |
The manpage says that when the passed size is zero, they should set the
expected size and return 0. ERANGE shall be returned only when the non-zero
passed size is not large enough.
---
hurd/xattr.c | 25 +++++++++++++++++++++----
1 file changed, 21 insertions(+), 4 deletions(-)
diff --git a/hurd/xattr.c b/hurd/xattr.c
index 1a84c90db8..2d83edf2fe 100644
--- a/hurd/xattr.c
+++ b/hurd/xattr.c
@@ -50,7 +50,15 @@ _hurd_xattr_get (io_t port, const char *name, void *value,
size_t *size)
else if (value)
{
if (*size < sizeof st.st_author)
- return ERANGE;
+ {
+ if (*size > 0)
+ return ERANGE;
+ else
+ {
+ *size = sizeof st.st_author;
+ return 0;
+ }
+ }
memcpy (value, &st.st_author, sizeof st.st_author);
}
*size = sizeof st.st_author;
@@ -73,12 +81,21 @@ _hurd_xattr_get (io_t port, const char *name, void *value,
size_t *size)
err = __file_get_translator (port, &buf, &bufsz);
if (err)
return err;
- if (value != NULL && *size < bufsz)
+
+ if (*size < bufsz)
{
if (buf != value)
__munmap (buf, bufsz);
- return ERANGE;
+
+ if (*size > 0)
+ return ERANGE;
+ else
+ {
+ *size = bufsz;
+ return 0;
+ }
}
+
if (buf != value && bufsz > 0)
{
if (value != NULL)
@@ -201,7 +218,7 @@ _hurd_xattr_list (io_t port, void *buffer, size_t *size)
if (st.st_mode & S_IPTRANS)
add ("gnu.translator");
- if (buffer != NULL && total > *size)
+ if (*size > 0 && total > *size)
return ERANGE;
*size = total;
return 0;
--
2.43.0
- [hurd,commited 0/4] hurd xattr fixes, Samuel Thibault, 2024/06/10
- [hurd,commited 1/4] hurd: Fix lsetxattr return value, Samuel Thibault, 2024/06/10
- [hurd,commited 3/4] hurd: Fix setxattr return value on replacing, Samuel Thibault, 2024/06/10
- [hurd, commited 2/4] hurd: Fix getxattr("gnu.translator") returning ENODATA, Samuel Thibault, 2024/06/10
- [hurd,commited 4/4] hurd: Fix getxattr/listxattr returning ERANGE,
Samuel Thibault <=