[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[FDclone-users:00287] Escaped linefeed bug in FD-2.05e
- Subject: [FDclone-users:00287] Escaped linefeed bug in FD-2.05e
- From: Takashi SHIRAI <shirai@unixusers.net>
- Date: Sun, 13 Jun 2004 02:08:08 +0900
しらいです。
FDclone 2.05e に以下のような bug が見つかりました。
「\」で終わるコマンド行を正しく処理出来ない点を修正。
EXECUTE_SH や .fd2rc など、command line 入力行の末尾に「\」
を置くと、その入力行の改行が抑制され、継続行と連結した行とし
て扱われる筈なんですが、これが単なる「\」として扱われていま
した。
下記の patch で修正される筈ですので各自お試し下さい。今週
中にも次期 release をします。
---- Cut Here ----
diff -u ../old/FD-2.05e/pathname.c ./pathname.c
--- ../old/FD-2.05e/pathname.c Wed Jun 9 00:00:00 2004
+++ ./pathname.c Sun Jun 13 01:48:43 2004
@@ -141,7 +141,7 @@
static char *NEAR getenvvar __P_((char *, int));
static int NEAR setvar __P_((char *, char *, int));
-static int NEAR ismeta __P_((char *s, int, int, int));
+static int NEAR ismeta __P_((char *s, int, int, int, int));
#ifdef _NOORIGGLOB
static char *NEAR cnvregexp __P_((char *, int));
#else
@@ -820,9 +820,9 @@
return(s);
}
-static int NEAR ismeta(s, ptr, quote, len)
+static int NEAR ismeta(s, ptr, quote, len, flags)
char *s;
-int ptr, quote, len;
+int ptr, quote, len, flags;
{
#ifdef FAKEMETA
return(0);
@@ -830,7 +830,7 @@
if (s[ptr] != PMETA || quote == '\'') return(0);
if (len >= 0) {
- if (ptr + 1 >= len) return(0);
+ if (!(flags & EA_EOLMETA) && ptr + 1 >= len) return(0);
# ifndef BASHSTYLE
/* bash does not treat "\" as \ */
if (quote == '"' && s[ptr + 1] == quote && ptr + 2 >= len)
@@ -838,7 +838,7 @@
# endif
}
else {
- if (!s[ptr + 1]) return(0);
+ if (!(flags & EA_EOLMETA) && !s[ptr + 1]) return(0);
# ifndef BASHSTYLE
/* bash does not treat "\" as \ */
if (quote == '"' && s[ptr + 1] == quote && !s[ptr + 2])
@@ -884,7 +884,7 @@
re[j++] = s[i];
continue;
}
- else if (ismeta(s, i, '\0', len)) {
+ else if (ismeta(s, i, '\0', len, 0)) {
re[j++] = s[i++];
re[j++] = s[i];
}
@@ -2183,7 +2183,7 @@
#endif
else if (*qp == '\'') return(PC_SQUOTE);
else if (spc && *s == spc) return(*s);
- else if (ismeta(s, 0, *qp, len)) return(PC_META);
+ else if (ismeta(s, 0, *qp, len, flags)) return(PC_META);
#ifdef BASHSTYLE
/* bash can include `...` in "..." */
else if ((flags & EA_BACKQ) && *s == '`') {
diff -u ../old/FD-2.05e/pathname.h ./pathname.h
--- ../old/FD-2.05e/pathname.h Wed Jun 9 00:00:00 2004
+++ ./pathname.h Sun Jun 13 01:47:14 2004
@@ -129,6 +129,7 @@
#define EA_NOEVALQ 0010
#define EA_STRIPQLATER 0020
#define EA_NOUNIQDELIM 0040
+#define EA_EOLMETA 0100
#ifdef NOUID_T
typedef u_short uid_t;
diff -u ../old/FD-2.05e/system.c ./system.c
--- ../old/FD-2.05e/system.c Wed Jun 9 00:00:00 2004
+++ ./system.c Sun Jun 13 01:55:23 2004
@@ -5795,11 +5795,12 @@
}
}
- pc = parsechar(&(s[i]), -1,
+ pc = parsechar(&(s[i]), -1, '$', EA_BACKQ | EA_EOLMETA,
#ifdef BASHSTYLE
- '$', EA_BACKQ, &(rp -> new), &(rp -> old));
+ /* bash can include `...` in "..." */
+ &(rp -> new), &(rp -> old));
#else
- '$', EA_BACKQ, &(rp -> new), NULL);
+ &(rp -> new), NULL);
#endif
if (pc == PC_OPQUOTE || pc == PC_CLQUOTE || pc == PC_SQUOTE)
---- Cut Here ----
しらい たかし