GNU sed version 4.1, bug report
Jerry Lundström
prox at lunar-linux.org
Fri Jun 18 10:21:50 GMT 2004
Here is a patch for this.
/Jerry
Terry Chan wrote:
> sed-4.1 does NOT correctly perform chmod/chown when
> using the "sed -i" (edit in-place) feature.
>
> sed-4.0.9 does work.
>
> Simple test case:
>
> 1. touch this_is_an_empty_testfile
> 2. chmod 755 this_is_an_empty_testfile
> 3. chown 1000:1000 this_is_an_empty_testfile
> 4. sed -i "s/XX/x/" this_is_an_empty_testfile
> 5. ls -al this_is_an_empty_testfile
>
> And this will now show uid:gid of 0:0 and permissions of 600 for
> this_is_an_empty_testfile
>
> The problem is located in execute.c and the rewrite/changes in
> 4.1 vs 4.0.9.
>
> Specifically 4.1 execute.c line 675 still uses:
> fchmod (output_fd, st.st_mode);
>
> which is how sed-4.0.9 invokes the chmod as well. The problem is
> sed-4.1 does NOT use output_fd and now uses output_file.fp !!!!
> Similarly fchown usage is incorrect too as it still uses output_fd,
> but should be using output_file.fp.
>
> This bug in sed-4.1 clearly breaks the chmod and chown functionality that
> was working in sed-4.0.9.
-------------- next part --------------
--- sed-4.1.orig/sed/execute.c 2004-03-13 10:30:39.000000000 +0100
+++ sed-4.1/sed/execute.c 2004-06-18 12:15:32.000000000 +0200
@@ -672,11 +672,11 @@
fstat (fileno (input->fp), &st);
#ifdef HAVE_FCHMOD
- fchmod (output_fd, st.st_mode);
+ fchmod (fileno(output_file.fp), st.st_mode);
#endif
#ifdef HAVE_FCHOWN
- if (fchown (output_fd, st.st_uid, st.st_gid) == -1)
- fchown (output_fd, -1, st.st_gid);
+ if (fchown (fileno(output_file.fp), st.st_uid, st.st_gid) == -1)
+ fchown (fileno(output_file.fp), -1, st.st_gid);
#endif
output_file.missing_newline = false;
More information about the Lunar
mailing list