On Wed, Dec 10, 2014 at 10:39:37AM +0100, Sébastien Marie wrote:
> 
> Hi,
> 
> Fuzzing sed with afl, I found a crash due to use of uninitialized
> variable.
> 
> In process.c oldpsl variable need to be initialized:
> 
> $ echo | sed -e 'g;P'
> Segmentation fault (core dumped)
> 
> The following patch correct this.
> 
> I also include the initialization of p, as it is reported by compiler
> warning too (with -Wall -O2).

Perhaps the following instead to rework the code to seperate out
the path that needs the pointer swap?

Index: process.c
===================================================================
RCS file: /cvs/src/usr.bin/sed/process.c,v
retrieving revision 1.20
diff -u -p -r1.20 process.c
--- process.c   1 Dec 2014 06:37:25 -0000       1.20
+++ process.c   10 Dec 2014 11:01:23 -0000
@@ -184,10 +184,11 @@ redirect:
                                    (p = memchr(ps, '\n', psl - 1)) != NULL) {
                                        oldpsl = psl;
                                        psl = (p + 1) - ps;
-                               }
-                               OUT(ps);
-                               if (p != NULL)
+                                       OUT(ps);
                                        psl = oldpsl;
+                               } else {
+                                       OUT(ps);
+                               }
                                break;
                        case 'q':
                                if (!nflag && !pd)

Reply via email to