substart = search_regs.start[sub];
subend = search_regs.end[sub];
}
- else if (c >= '1' && c <= '9' && c <= search_regs.num_regs + '0')
+ else if (c >= '1' && c <= '9')
{
- if (search_regs.start[c - '0'] >= 0)
+ if (search_regs.start[c - '0'] >= 0
+ && c <= search_regs.num_regs + '0')
{
substart = search_regs.start[c - '0'];
subend = search_regs.end[c - '0'];
}
+ else
+ {
+ /* If that subexp did not match,
+ replace \\N with nothing. */
+ substart = 0;
+ subend = 0;
+ }
}
else if (c == '\\')
delbackslash = 1;
}
if (really_changed)
- newtext = make_string (substed, substed_len);
+ {
+ if (buf_multibyte)
+ {
+ int nchars = multibyte_chars_in_text (substed, substed_len);
+ newtext = make_multibyte_string (substed, nchars, substed_len);
+ }
+ else
+ newtext = make_unibyte_string (substed, substed_len);
+ }
xfree (substed);
}