era eriksson @ Fri, Feb 25, 2005 at 11:21:03AM +0200:
> Version: 4.1.2-1
> Severity: minor
> Tags: upstream
>
> Not actually sure if this is valid syntax or not (I guess not), but
> the error message is absurd:
>
> $ sed 'c\' /etc/motd
> sed: couldn't write -1 items to stdout: Success
>
> /* era */
[EMAIL PROTECTED] echo | sed 'c\'
sed: couldn't write -1 items to stdout: Success
[EMAIL PROTECTED] echo | sed 'i\'
sed: couldn't write -1 items to stdout: Success
[EMAIL PROTECTED] echo | sed 'a\'
[EMAIL PROTECTED]
[EMAIL PROTECTED] echo | /tmp/sed 'a\'
/tmp/sed: -e expression #1, char 2: missing command
[EMAIL PROTECTED] echo | /tmp/sed 'i\'
/tmp/sed: -e expression #1, char 2: missing command
[EMAIL PROTECTED] echo | /tmp/sed 'c\'
/tmp/sed: -e expression #1, char 2: missing command
[EMAIL PROTECTED]
[EMAIL PROTECTED] echo | /tmp/sed 'i\
> olecom
> '
olecom
[EMAIL PROTECTED] echo | /tmp/sed 'a\
> olecom
> '
olecom
[EMAIL PROTECTED] echo | /tmp/sed 'c\
olecom
'
olecom
[EMAIL PROTECTED]
Patch is with emacs's tabify && strip-trailing-whitespace
(for C it's nothing)
Actual change:
@@ -1160,9 +1160,13 @@ compile_program(vector)
read_text_to_slash:
if (ch == EOF)
bad_prog(_(EXPECTED_SLASH));
-
+
if (ch == '\\')
- ch = inchar();
+ {
+ ch = inchar();
+ if (ch == EOF)
+ bad_prog(_(NO_COMMAND));
+ }
WTFPL-ed-by: olecom
Please, see: http://sam.zoy.org/wtfpl/
diff -uprN /mnt/work/pc/src-build/debian/sed/sed-4.1.5/sed/compile.c\~
/mnt/work/pc/src-build/debian/sed/sed-4.1.5/sed/compile.c
--- /mnt/work/pc/src-build/debian/sed/sed-4.1.5/sed/compile.c~ 2006-02-03
10:06:26.000000000 +0100
+++ /mnt/work/pc/src-build/debian/sed/sed-4.1.5/sed/compile.c 2008-04-10
23:28:16.885183500 +0200
@@ -396,17 +396,17 @@ get_openfile(file_ptrs, mode, fail)
{
/* Check whether it is a special file (stdin, stdout or stderr) */
struct special_files *special = special_files;
-
+
/* std* sometimes are not constants, so they
- cannot be used in the initializer for special_files */
+ cannot be used in the initializer for special_files */
my_stdin = stdin; my_stdout = stdout; my_stderr = stderr;
for (special = special_files; special->outf.name; special++)
- if (strcmp(special->outf.name, file_name) == 0)
- {
+ if (strcmp(special->outf.name, file_name) == 0)
+ {
special->outf.fp = *special->pfp;
free_buffer (b);
return &special->outf;
- }
+ }
}
if (!p)
@@ -459,13 +459,13 @@ snarf_char_class(b, cur_stat)
int state = 0;
int delim;
bool pending_mb = 0;
-
+
ch = inchar();
if (ch == '^')
ch = add_then_next(b, ch);
if (ch == CLOSE_BRACKET)
ch = add_then_next(b, ch);
-
+
/* States are:
0 outside a collation element, character class or collation class
1 after the bracket
@@ -523,8 +523,8 @@ snarf_char_class(b, cur_stat)
}
/* Getting a character different from .=: whilst in state 1
- goes back to state 0, getting a character different from ]
- whilst in state 3 goes back to state 2. */
+ goes back to state 0, getting a character different from ]
+ whilst in state 3 goes back to state 2. */
state &= ~1;
}
}
@@ -562,20 +562,20 @@ match_slash(slash, regex)
{
ch = inchar();
if (ch == EOF)
- break;
+ break;
#ifndef REG_PERL
else if (ch == 'n' && regex)
- ch = '\n';
+ ch = '\n';
#endif
else if (ch != '\n' && ch != slash)
- add1_buffer(b, '\\');
+ add1_buffer(b, '\\');
}
- else if (ch == OPEN_BRACKET && regex)
+ else if (ch == OPEN_BRACKET && regex)
{
add1_buffer(b, ch);
ch = snarf_char_class(b, &cur_stat);
if (ch != CLOSE_BRACKET)
- break;
+ break;
}
}
@@ -800,8 +800,8 @@ setup_replacement(sub, text, length)
if (p < text_end && (posixicity != POSIXLY_BASIC || ISDIGIT (*p)))
switch (*p)
{
- case '0': case '1': case '2': case '3': case '4':
- case '5': case '6': case '7': case '8': case '9':
+ case '0': case '1': case '2': case '3': case '4':
+ case '5': case '6': case '7': case '8': case '9':
tail->subst_id = *p - '0';
if (sub->max_id < tail->subst_id)
sub->max_id = tail->subst_id;
@@ -816,7 +816,7 @@ setup_replacement(sub, text, length)
repl_type = REPL_UPPERCASE;
save_type = REPL_UPPERCASE;
break;
-
+
case 'E':
repl_type = REPL_ASIS;
save_type = REPL_ASIS;
@@ -831,7 +831,7 @@ setup_replacement(sub, text, length)
save_type = repl_type;
repl_type |= REPL_UPPERCASE_FIRST;
break;
-
+
default:
p[-1] = *p;
++tail->prefix_length;
@@ -943,7 +943,7 @@ compile_address(addr, ch)
for(;;)
{
ch = in_nonblank();
- switch(ch)
+ switch(ch)
{
case 'I': /* GNU extension */
flags |= REG_ICASE;
@@ -1087,7 +1087,7 @@ compile_program(vector)
case 'a': case 'i': case 'l':
case '=': case 'r':
if (cur_cmd->a2)
- bad_prog(_(ONE_ADDR));
+ bad_prog(_(ONE_ADDR));
}
cur_cmd->cmd = ch;
@@ -1160,9 +1160,13 @@ compile_program(vector)
read_text_to_slash:
if (ch == EOF)
bad_prog(_(EXPECTED_SLASH));
-
+
if (ch == '\\')
- ch = inchar();
+ {
+ ch = inchar();
+ if (ch == EOF)
+ bad_prog(_(NO_COMMAND));
+ }
else
{
savchar(ch);
@@ -1177,7 +1181,7 @@ compile_program(vector)
bad_prog(_(NO_COLON_ADDR));
labels = setup_label(labels, vector->v_length, read_label(), NULL);
break;
-
+
case 'T':
case 'b':
case 't':
@@ -1193,7 +1197,7 @@ compile_program(vector)
case 'L':
case 'l':
ch = in_nonblank();
- if (ISDIGIT(ch))
+ if (ISDIGIT(ch))
{
cur_cmd->x.int_arg = in_integer(ch);
ch = in_nonblank();
@@ -1233,11 +1237,11 @@ compile_program(vector)
free_buffer(b);
break;
- case 'R':
+ case 'R':
cur_cmd->x.fp = get_openfile(&file_read, "r", false)->fp;
break;
- case 'W':
+ case 'W':
case 'w':
cur_cmd->x.outf = get_openfile(&file_write, "w", true);
break;
@@ -1271,102 +1275,102 @@ compile_program(vector)
size_t len, dest_len;
int slash;
struct buffer *b2;
- char *src_buf, *dest_buf;
-
+ char *src_buf, *dest_buf;
+
slash = inchar();
if ( !(b = match_slash(slash, false)) )
bad_prog(_(UNTERM_Y_CMD));
- src_buf = get_buffer(b);
+ src_buf = get_buffer(b);
len = normalize_text(src_buf, size_buffer (b), TEXT_BUFFER);
- if ( !(b2 = match_slash(slash, false)) )
- bad_prog(_(UNTERM_Y_CMD));
- dest_buf = get_buffer(b2);
+ if ( !(b2 = match_slash(slash, false)) )
+ bad_prog(_(UNTERM_Y_CMD));
+ dest_buf = get_buffer(b2);
dest_len = normalize_text(dest_buf, size_buffer (b2), TEXT_BUFFER);
- if (mb_cur_max > 1)
+ if (mb_cur_max > 1)
+ {
+ int i, j, idx, src_char_num;
+ size_t *src_lens = MALLOC(len, size_t);
+ char **trans_pairs;
+ size_t mbclen;
+ mbstate_t cur_stat;
+
+ /* Enumerate how many character the source buffer has. */
+ memset(&cur_stat, 0, sizeof(mbstate_t));
+ for (i = 0, j = 0; i < len;)
+ {
+ mbclen = MBRLEN (src_buf + i, len - i, &cur_stat);
+ /* An invalid sequence, or a truncated multibyte character.
+ We treat it as a singlebyte character. */
+ if (mbclen == (size_t) -1 || mbclen == (size_t) -2
+ || mbclen == 0)
+ mbclen = 1;
+ src_lens[j++] = mbclen;
+ i += mbclen;
+ }
+ src_char_num = j;
+
+ memset(&cur_stat, 0, sizeof(mbstate_t));
+ idx = 0;
+
+ /* trans_pairs = {src(0), dest(0), src(1), dest(1), ..., NULL}
+ src(i) : pointer to i-th source character.
+ dest(i) : pointer to i-th destination character.
+ NULL : terminator */
+ trans_pairs = MALLOC(2 * src_char_num + 1, char*);
+ cur_cmd->x.translatemb = trans_pairs;
+ for (i = 0; i < src_char_num; i++)
+ {
+ if (idx >= dest_len)
+ bad_prog(_(Y_CMD_LEN));
+
+ /* Set the i-th source character. */
+ trans_pairs[2 * i] = MALLOC(src_lens[i] + 1, char);
+ strncpy(trans_pairs[2 * i], src_buf, src_lens[i]);
+ trans_pairs[2 * i][src_lens[i]] = '\0';
+ src_buf += src_lens[i]; /* Forward to next character. */
+
+ /* Fetch the i-th destination character. */
+ mbclen = MBRLEN (dest_buf + idx, dest_len - idx, &cur_stat);
+ /* An invalid sequence, or a truncated multibyte character.
+ We treat it as a singlebyte character. */
+ if (mbclen == (size_t) -1 || mbclen == (size_t) -2
+ || mbclen == 0)
+ mbclen = 1;
+
+ /* Set the i-th destination character. */
+ trans_pairs[2 * i + 1] = MALLOC(mbclen + 1, char);
+ strncpy(trans_pairs[2 * i + 1], dest_buf + idx, mbclen);
+ trans_pairs[2 * i + 1][mbclen] = '\0';
+ idx += mbclen; /* Forward to next character. */
+ }
+ trans_pairs[2 * i] = NULL;
+ if (idx != dest_len)
+ bad_prog(_(Y_CMD_LEN));
+ }
+ else
{
- int i, j, idx, src_char_num;
- size_t *src_lens = MALLOC(len, size_t);
- char **trans_pairs;
- size_t mbclen;
- mbstate_t cur_stat;
-
- /* Enumerate how many character the source buffer has. */
- memset(&cur_stat, 0, sizeof(mbstate_t));
- for (i = 0, j = 0; i < len;)
- {
- mbclen = MBRLEN (src_buf + i, len - i, &cur_stat);
- /* An invalid sequence, or a truncated multibyte character.
- We treat it as a singlebyte character. */
- if (mbclen == (size_t) -1 || mbclen == (size_t) -2
- || mbclen == 0)
- mbclen = 1;
- src_lens[j++] = mbclen;
- i += mbclen;
- }
- src_char_num = j;
-
- memset(&cur_stat, 0, sizeof(mbstate_t));
- idx = 0;
-
- /* trans_pairs = {src(0), dest(0), src(1), dest(1), ..., NULL}
- src(i) : pointer to i-th source character.
- dest(i) : pointer to i-th destination character.
- NULL : terminator */
- trans_pairs = MALLOC(2 * src_char_num + 1, char*);
- cur_cmd->x.translatemb = trans_pairs;
- for (i = 0; i < src_char_num; i++)
- {
- if (idx >= dest_len)
- bad_prog(_(Y_CMD_LEN));
-
- /* Set the i-th source character. */
- trans_pairs[2 * i] = MALLOC(src_lens[i] + 1, char);
- strncpy(trans_pairs[2 * i], src_buf, src_lens[i]);
- trans_pairs[2 * i][src_lens[i]] = '\0';
- src_buf += src_lens[i]; /* Forward to next character. */
-
- /* Fetch the i-th destination character. */
- mbclen = MBRLEN (dest_buf + idx, dest_len - idx,
&cur_stat);
- /* An invalid sequence, or a truncated multibyte character.
- We treat it as a singlebyte character. */
- if (mbclen == (size_t) -1 || mbclen == (size_t) -2
- || mbclen == 0)
- mbclen = 1;
-
- /* Set the i-th destination character. */
- trans_pairs[2 * i + 1] = MALLOC(mbclen + 1, char);
- strncpy(trans_pairs[2 * i + 1], dest_buf + idx, mbclen);
- trans_pairs[2 * i + 1][mbclen] = '\0';
- idx += mbclen; /* Forward to next character. */
- }
- trans_pairs[2 * i] = NULL;
- if (idx != dest_len)
- bad_prog(_(Y_CMD_LEN));
- }
- else
- {
- char *translate = OB_MALLOC(&obs, YMAP_LENGTH, char);
- unsigned char *ustring = CAST(unsigned char *)src_buf;
+ char *translate = OB_MALLOC(&obs, YMAP_LENGTH, char);
+ unsigned char *ustring = CAST(unsigned char *)src_buf;
if (len != dest_len)
- bad_prog(_(Y_CMD_LEN));
+ bad_prog(_(Y_CMD_LEN));
- for (len = 0; len < YMAP_LENGTH; len++)
- translate[len] = len;
+ for (len = 0; len < YMAP_LENGTH; len++)
+ translate[len] = len;
- while (dest_len--)
- translate[(unsigned char)*ustring++] = *dest_buf++;
+ while (dest_len--)
+ translate[(unsigned char)*ustring++] = *dest_buf++;
- cur_cmd->x.translate = translate;
+ cur_cmd->x.translate = translate;
}
- if ((ch = in_nonblank()) != EOF && ch != '\n' && ch != ';')
- bad_prog(_(EXCESS_JUNK));
+ if ((ch = in_nonblank()) != EOF && ch != '\n' && ch != ';')
+ bad_prog(_(EXCESS_JUNK));
- free_buffer(b);
- free_buffer(b2);
+ free_buffer(b);
+ free_buffer(b2);
}
break;
@@ -1415,14 +1419,14 @@ normalize_text(buf, len, buftype)
mbclen = MBRLEN (p, bufend - p, &cur_stat);
if (mbclen != 1)
{
- /* An invalid sequence, or a truncated multibyte character.
- We treat it as a singlebyte character. */
- if (mbclen == (size_t) -1 || mbclen == (size_t) -2 || mbclen == 0)
- mbclen = 1;
-
- memmove (q, p, mbclen);
- q += mbclen;
- p += mbclen;
+ /* An invalid sequence, or a truncated multibyte character.
+ We treat it as a singlebyte character. */
+ if (mbclen == (size_t) -1 || mbclen == (size_t) -2 || mbclen == 0)
+ mbclen = 1;
+
+ memmove (q, p, mbclen);
+ q += mbclen;
+ p += mbclen;
continue;
}
@@ -1465,7 +1469,7 @@ normalize_text(buf, len, buftype)
else
{
/* we just pass the \ up one level for interpretation */
- if (buftype != TEXT_BUFFER)
+ if (buftype != TEXT_BUFFER)
*q++ = '\\';
}
@@ -1474,16 +1478,16 @@ normalize_text(buf, len, buftype)
case 'o': /* octal byte */
if (!(extended_regexp_flags & REG_PERL))
{
- p = convert_number(q, p+1, bufend, 8, 3, 'o');
+ p = convert_number(q, p+1, bufend, 8, 3, 'o');
q++;
}
else
{
- /* we just pass the \ up one level for interpretation */
- if (buftype != TEXT_BUFFER)
+ /* we just pass the \ up one level for interpretation */
+ if (buftype != TEXT_BUFFER)
*q++ = '\\';
}
-
+
continue;
#else
case 'o': /* octal byte */
@@ -1501,10 +1505,10 @@ normalize_text(buf, len, buftype)
}
else
{
- /* we just pass the \ up one level for interpretation */
- if (buftype != TEXT_BUFFER)
+ /* we just pass the \ up one level for interpretation */
+ if (buftype != TEXT_BUFFER)
*q++ = '\\';
- continue;
+ continue;
}
default:
@@ -1514,29 +1518,29 @@ normalize_text(buf, len, buftype)
break;
}
else if (buftype == TEXT_REGEX && posixicity != POSIXLY_EXTENDED)
- switch (*p)
- {
- case '[':
- if (!bracket_state)
- bracket_state = -1;
- break;
-
+ switch (*p)
+ {
+ case '[':
+ if (!bracket_state)
+ bracket_state = -1;
+ break;
+
case ':':
case '.':
case '=':
- if (bracket_state == -1 && p[-1] == '[')
- bracket_state = *p;
- break;
+ if (bracket_state == -1 && p[-1] == '[')
+ bracket_state = *p;
+ break;
- case ']':
- if (bracket_state == 0)
+ case ']':
+ if (bracket_state == 0)
;
- else if (bracket_state == -1)
- bracket_state = 0;
- else if (p[-2] != bracket_state && p[-1] == bracket_state)
- bracket_state = -1;
- break;
- }
+ else if (bracket_state == -1)
+ bracket_state = 0;
+ else if (p[-2] != bracket_state && p[-1] == bracket_state)
+ bracket_state = -1;
+ break;
+ }
*q++ = *p++;
}
Diff finished at Thu Apr 10 23:43:43
--
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]