Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 2 Nov 2003 00:46:55 +0700 (KRAT)
From:      Eugene Grosbein <eugen@grosbein.pp.ru>
To:        FreeBSD-gnats-submit@FreeBSD.org
Subject:   bin/58813: Incorrect behavour of sed(1)
Message-ID:  <200311011746.hA1HktIv059840@grosbein.pp.ru>
Resent-Message-ID: <200311011820.hA1IKI4c026438@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

>Number:         58813
>Category:       bin
>Synopsis:       Incorrect behavour of sed(1)
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Sat Nov 01 10:20:17 PST 2003
>Closed-Date:
>Last-Modified:
>Originator:     Eugene Grosbein
>Release:        FreeBSD 4.9-STABLE i386
>Organization:
Svyaz Service JSC
>Environment:
System: FreeBSD grosbein.pp.ru 4.9-STABLE FreeBSD 4.9-STABLE #25: Thu Oct 30 23:34:44 KRAT 2003 eu@grosbein.pp.ru:/usr/local/obj/usr/local/src/sys/DADV i386
	CPUTYPE=i686 and no other optimizations

>Description:
		sed(1) can produce incorrect output while processing
		long lines. It can produce false error messages.
		It can even segfault.

>How-To-Repeat:

Example 1.

perl -e 'print "10: "; print "A" x 2030; print "\n" ' | \
	   sed -E 's/^([^:]+):(.*)$/<a href=\1>\1<\/a>:\2/' 2>&1 |hd 

Writes:

00000000  3c 61 20 68 72 65 66 3d  31 30 3e 31 30 3c 2f 61  |<a href=10>10</a|
00000010  3e 3a 20 41 41 41 41 41  41 41 41 41 41 41 41 41  |>: AAAAAAAAAAAAA|
00000020  41 41 41 41 41 41 41 41  41 41 41 41 41 41 41 41  |AAAAAAAAAAAAAAAA|
*
00000800  00 0a                                             |..|
00000802

Note zero byte in last line.

Replace 2030 with 4000 and see:

00000000  3c 61 20 68 72 65 66 3d  31 30 3e 31 30 3c 2f 61  |<a href=10>10</a|
00000010  3e 3a 20 41 41 41 41 41  41 41 41 41 41 41 41 41  |>: AAAAAAAAAAAAA|
00000020  41 41 41 41 41 41 41 41  41 41 41 41 41 41 41 41  |AAAAAAAAAAAAAAAA|
*
00000800  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00000fb0  00 00 00 0a                                       |....|
00000fb4

Now there are lots of zero characters.

Use 4077 instead of 4000 and get segmentation fault.

Example 2.

perl -e 'print "10: A\n20: "; print "A" x 2542; print "\n\n" ' | \
sed -E 's/^([^:]+)\:(.*)$/<a href=\1>\1<\/a>:\2/' >/dev/null

Writes:
sed: RE error: invalid regular expression

That's not true.
 
>Fix:

	Unknown for me.
>Release-Note:
>Audit-Trail:
>Unformatted:



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200311011746.hA1HktIv059840>