Reject invalid definitions of _POSIX_CHOWN_RESTRICTED, _POSIX_NO_TRUNC, _POSIX_VDISABLE
Commit Message
POSIX requires that the constants _POSIX_CHOWN_RESTRICTED,
_POSIX_NO_TRUNC, and _POSIX_VDISABLE are always defined to a value other
than -1.
* sysdeps/posix/fpathconf.c (__fpathconf): Verify the values of
_POSIX_CHOWN_RESTRICTED, _POSIX_NO_TRUNC, _POSIX_VDISABLE.
* sysdeps/posix/pathconf.c (__pathconf): Likewise.
---
sysdeps/posix/fpathconf.c | 21 +++++++++------------
sysdeps/posix/pathconf.c | 21 +++++++++------------
2 files changed, 18 insertions(+), 24 deletions(-)
Comments
On Sun, Jan 28, 2018 at 06:58:00PM +0100, Andreas Schwab wrote:
> POSIX requires that the constants _POSIX_CHOWN_RESTRICTED,
> _POSIX_NO_TRUNC, and _POSIX_VDISABLE are always defined to a value other
> than -1.
>
> * sysdeps/posix/fpathconf.c (__fpathconf): Verify the values of
> _POSIX_CHOWN_RESTRICTED, _POSIX_NO_TRUNC, _POSIX_VDISABLE.
> * sysdeps/posix/pathconf.c (__pathconf): Likewise.
> ---
> sysdeps/posix/fpathconf.c | 21 +++++++++------------
> sysdeps/posix/pathconf.c | 21 +++++++++------------
> 2 files changed, 18 insertions(+), 24 deletions(-)
>
> diff --git a/sysdeps/posix/fpathconf.c b/sysdeps/posix/fpathconf.c
> index 80af77e148..a9d164564e 100644
> --- a/sysdeps/posix/fpathconf.c
> +++ b/sysdeps/posix/fpathconf.c
> @@ -103,25 +103,22 @@ __fpathconf (int fd, int name)
> #endif
>
> case _PC_CHOWN_RESTRICTED:
> -#ifdef _POSIX_CHOWN_RESTRICTED
> - return _POSIX_CHOWN_RESTRICTED;
> -#else
> - return -1;
> +#if _POSIX_CHOWN_RESTRICTED == -1
> +# error "Invalid value for _POSIX_CHOWN_RESTRICTED"
> #endif
> + return _POSIX_CHOWN_RESTRICTED;
>
> case _PC_NO_TRUNC:
> -#ifdef _POSIX_NO_TRUNC
> - return _POSIX_NO_TRUNC;
> -#else
> - return -1;
> +#if _POSIX_NO_TRUNC == -1
> +# error "Invalid value for _POSIX_NO_TRUNC"
> #endif
> + return _POSIX_NO_TRUNC;
>
> case _PC_VDISABLE:
> -#ifdef _POSIX_VDISABLE
> - return _POSIX_VDISABLE;
> -#else
> - return -1;
> +#if _POSIX_VDISABLE == -1
> +# error "Invalid value for _POSIX_VDISABLE"
> #endif
> + return _POSIX_VDISABLE;
sysdeps/mach/hurd/bits/posix_opt.h defines _POSIX_VDISABLE
to ((unsigned char) -1), should it be fixed, too?
Dmitry V. Levin, on lun. 29 janv. 2018 01:50:51 +0300, wrote:
> > case _PC_VDISABLE:
> > -#ifdef _POSIX_VDISABLE
> > - return _POSIX_VDISABLE;
> > -#else
> > - return -1;
> > +#if _POSIX_VDISABLE == -1
> > +# error "Invalid value for _POSIX_VDISABLE"
> > #endif
> > + return _POSIX_VDISABLE;
>
> sysdeps/mach/hurd/bits/posix_opt.h defines _POSIX_VDISABLE
> to ((unsigned char) -1), should it be fixed, too?
Posix says that using -1 is invalid, indeed.
Samuel
On Mon, Jan 29, 2018 at 12:02:13AM +0100, Samuel Thibault wrote:
> Dmitry V. Levin, on lun. 29 janv. 2018 01:50:51 +0300, wrote:
> > > case _PC_VDISABLE:
> > > -#ifdef _POSIX_VDISABLE
> > > - return _POSIX_VDISABLE;
> > > -#else
> > > - return -1;
> > > +#if _POSIX_VDISABLE == -1
> > > +# error "Invalid value for _POSIX_VDISABLE"
> > > #endif
> > > + return _POSIX_VDISABLE;
> >
> > sysdeps/mach/hurd/bits/posix_opt.h defines _POSIX_VDISABLE
> > to ((unsigned char) -1), should it be fixed, too?
>
> Posix says that using -1 is invalid, indeed.
As it's fixed now, the patch should be safe to commit.
@@ -103,25 +103,22 @@ __fpathconf (int fd, int name)
#endif
case _PC_CHOWN_RESTRICTED:
-#ifdef _POSIX_CHOWN_RESTRICTED
- return _POSIX_CHOWN_RESTRICTED;
-#else
- return -1;
+#if _POSIX_CHOWN_RESTRICTED == -1
+# error "Invalid value for _POSIX_CHOWN_RESTRICTED"
#endif
+ return _POSIX_CHOWN_RESTRICTED;
case _PC_NO_TRUNC:
-#ifdef _POSIX_NO_TRUNC
- return _POSIX_NO_TRUNC;
-#else
- return -1;
+#if _POSIX_NO_TRUNC == -1
+# error "Invalid value for _POSIX_NO_TRUNC"
#endif
+ return _POSIX_NO_TRUNC;
case _PC_VDISABLE:
-#ifdef _POSIX_VDISABLE
- return _POSIX_VDISABLE;
-#else
- return -1;
+#if _POSIX_VDISABLE == -1
+# error "Invalid value for _POSIX_VDISABLE"
#endif
+ return _POSIX_VDISABLE;
case _PC_SYNC_IO:
#ifdef _POSIX_SYNC_IO
@@ -101,25 +101,22 @@ __pathconf (const char *path, int name)
#endif
case _PC_CHOWN_RESTRICTED:
-#ifdef _POSIX_CHOWN_RESTRICTED
- return _POSIX_CHOWN_RESTRICTED;
-#else
- return -1;
+#if _POSIX_CHOWN_RESTRICTED == -1
+# error "Invalid value for _POSIX_CHOWN_RESTRICTED"
#endif
+ return _POSIX_CHOWN_RESTRICTED;
case _PC_NO_TRUNC:
-#ifdef _POSIX_NO_TRUNC
- return _POSIX_NO_TRUNC;
-#else
- return -1;
+#if _POSIX_NO_TRUNC == -1
+# error "Invalid value for _POSIX_NO_TRUNC"
#endif
+ return _POSIX_NO_TRUNC;
case _PC_VDISABLE:
-#ifdef _POSIX_VDISABLE
- return _POSIX_VDISABLE;
-#else
- return -1;
+#if _POSIX_VDISABLE == -1
+# error "Invalid value for _POSIX_VDISABLE"
#endif
+ return _POSIX_VDISABLE;
case _PC_SYNC_IO:
#ifdef _POSIX_SYNC_IO