1
1

Fixed patterns escaping of wild filenames (such as \1, ${1}, \U, etc).

Signed-off-by: Slava Zanko <slavazanko@gmail.com>
Этот коммит содержится в:
Slava Zanko 2009-06-10 15:30:09 +03:00
родитель a58a14c357
Коммит bbb800530c
2 изменённых файлов: 25 добавлений и 5 удалений

Просмотреть файл

@ -863,7 +863,7 @@ file_mask_dialog (FileOpContext *ctx, FileOperation operation, const char *text,
{
int source_easy_patterns = easy_patterns;
char *source_mask, *orig_mask, *dest_dir, *tmpdest;
char *def_text_secure;
char *def_text_secure, *def_text_secure2;
struct stat buf;
int val;
QuickDialog Quick_input;
@ -881,6 +881,10 @@ file_mask_dialog (FileOpContext *ctx, FileOperation operation, const char *text,
/* filter out a possible password from def_text */
def_text_secure = strip_password (g_strdup (def_text), 1);
if (source_easy_patterns)
def_text_secure2 = strutils_glob_escape (def_text_secure);
else
def_text_secure2 = strutils_regex_escape (def_text_secure);
/* Create the dialog */
@ -895,7 +899,7 @@ file_mask_dialog (FileOpContext *ctx, FileOperation operation, const char *text,
Quick_input.i18n = 1;
Quick_input.widgets = fmd_widgets;
fmd_widgets[FMDI0].text = text;
fmd_widgets[FMDI2].text = def_text_secure;
fmd_widgets[FMDI2].text = def_text_secure2;
fmd_widgets[FMDI2].str_result = &dest_dir;
fmd_widgets[FMDI1].str_result = &source_mask;
@ -927,6 +931,7 @@ file_mask_dialog (FileOpContext *ctx, FileOperation operation, const char *text,
if (!dest_dir || !*dest_dir) {
g_free (source_mask);
g_free(def_text_secure2);
return dest_dir;
}
@ -975,5 +980,7 @@ file_mask_dialog (FileOpContext *ctx, FileOperation operation, const char *text,
}
if (val == B_USER)
*do_background = 1;
g_free(def_text_secure2);
return dest_dir;
}

Просмотреть файл

@ -374,8 +374,10 @@ mc_search_regex__process_replace_str (const GString * replace_str, const gsize c
*skip_len = 0;
if (*curr_str == '$' && *(curr_str + 1) == '{' && (*(curr_str + 2) & (char) 0xf0) == 0x30) {
if (strutils_is_char_escaped (replace_str->str, curr_str))
if (strutils_is_char_escaped (replace_str->str, curr_str)){
*skip_len = 1;
return -1;
}
for (*skip_len = 0;
current_pos + *skip_len + 2 < replace_str->len
@ -396,8 +398,10 @@ mc_search_regex__process_replace_str (const GString * replace_str, const gsize c
}
if (*curr_str == '\\') {
if (strutils_is_char_escaped (replace_str->str, curr_str))
if (strutils_is_char_escaped (replace_str->str, curr_str)){
*skip_len = 1;
return -1;
}
if ((*(curr_str + 1) & (char) 0xf0) == 0x30) {
ret = *(curr_str + 1) - '0';
@ -653,8 +657,17 @@ mc_search_regex_prepare_replace_str (mc_search_t * mc_search, GString * replace_
for (loop = 0; loop < replace_str->len - 1; loop++) {
index = mc_search_regex__process_replace_str (replace_str, loop, &len, &replace_flags);
if (index == -1)
if (index == -1) {
if (len != 0){
mc_search_regex__process_append_str (ret, prev_str, replace_str->str - prev_str + loop,
&replace_flags);
mc_search_regex__process_append_str (ret, replace_str->str + loop + 1, len-1,
&replace_flags);
prev_str = replace_str->str + loop + len;
loop += len - 1;
}
continue;
}
if (index == -2) {
if (loop)