edi: escape paths where necessary.

This commit is contained in:
Al Poole 2017-09-27 19:42:45 +01:00
parent 1daf236275
commit e86760b802
4 changed files with 76 additions and 21 deletions

View File

@ -184,6 +184,7 @@ edi_filepanel_scm_status_update(void)
_file_status_item_add(status->fullpath, status->change); _file_status_item_add(status->fullpath, status->change);
eina_stringshare_del(status->path); eina_stringshare_del(status->path);
eina_stringshare_del(status->fullpath); eina_stringshare_del(status->fullpath);
eina_stringshare_del(status->unescaped);
free(status); free(status);
} }
eina_list_free(e->statuses); eina_list_free(e->statuses);
@ -609,7 +610,7 @@ _content_get(void *data, Evas_Object *obj, const char *source)
Edi_Dir_Data *sd = data; Edi_Dir_Data *sd = data;
Evas_Object *box, *lbox, *mbox, *rbox, *label, *ic; Evas_Object *box, *lbox, *mbox, *rbox, *label, *ic;
Edi_Scm_Status_Code *code; Edi_Scm_Status_Code *code;
char *text; char *text, *escaped;
const char *icon_name, *icon_status; const char *icon_name, *icon_status;
Eina_Bool staged = EINA_FALSE; Eina_Bool staged = EINA_FALSE;
@ -618,10 +619,13 @@ _content_get(void *data, Evas_Object *obj, const char *source)
text = NULL; icon_name = icon_status = NULL; text = NULL; icon_name = icon_status = NULL;
code = _file_status_item_find(sd->path); escaped = ecore_file_escape_name(sd->path);
code = _file_status_item_find(escaped);
if (code) if (code)
icon_status = _icon_status(*code, &staged); icon_status = _icon_status(*code, &staged);
free(escaped);
text = strdup(basename((char *)sd->path)); text = strdup(basename((char *)sd->path));
provider = _get_provider_from_hashset(sd->path); provider = _get_provider_from_hashset(sd->path);

View File

@ -49,6 +49,7 @@ _edi_file_screens_create_file_cb(void *data,
void *event_info EINA_UNUSED) void *event_info EINA_UNUSED)
{ {
const char *name; const char *name;
char *text;
char *path; char *path;
const char *directory = _directory_path; const char *directory = _directory_path;
FILE *f; FILE *f;
@ -63,7 +64,9 @@ _edi_file_screens_create_file_cb(void *data,
return; return;
} }
path = edi_path_append(directory, name); text = elm_entry_markup_to_utf8(name);
path = edi_path_append(directory, text);
if ((ecore_file_exists(path) && ecore_file_is_dir(path)) || if ((ecore_file_exists(path) && ecore_file_is_dir(path)) ||
!ecore_file_exists(path)) !ecore_file_exists(path))
{ {
@ -82,6 +85,7 @@ _edi_file_screens_create_file_cb(void *data,
evas_object_del(_popup); evas_object_del(_popup);
free(path); free(path);
free(text);
} }
static void static void
@ -90,7 +94,7 @@ _edi_file_screens_create_dir_cb(void *data,
void *event_info EINA_UNUSED) void *event_info EINA_UNUSED)
{ {
const char *name; const char *name;
char *path; char *path, *text;
const char *directory = _directory_path; const char *directory = _directory_path;
if (!ecore_file_is_dir(directory)) return; if (!ecore_file_is_dir(directory)) return;
@ -102,7 +106,9 @@ _edi_file_screens_create_dir_cb(void *data,
return; return;
} }
path = edi_path_append(directory, name); text = elm_entry_markup_to_utf8(name);
path = edi_path_append(directory, text);
mkdir(path, 0755); mkdir(path, 0755);
@ -111,6 +117,7 @@ _edi_file_screens_create_dir_cb(void *data,
evas_object_del(_popup_dir); evas_object_del(_popup_dir);
free(path); free(path);
free(text);
} }
static void static void
@ -120,7 +127,7 @@ _edi_file_screens_rename_cb(void *data,
{ {
Evas_Object *entry; Evas_Object *entry;
const char *name, *existing_path, *directory; const char *name, *existing_path, *directory;
char *path; char *path, *text;
directory = _directory_path; directory = _directory_path;
existing_path = (char *) data; existing_path = (char *) data;
@ -134,7 +141,9 @@ _edi_file_screens_rename_cb(void *data,
return; return;
} }
path = edi_path_append(directory, name); text = elm_entry_markup_to_utf8(name);
path = edi_path_append(directory, text);
if (ecore_file_exists(path)) if (ecore_file_exists(path))
{ {
@ -161,6 +170,7 @@ _edi_file_screens_rename_cb(void *data,
evas_object_del(_popup); evas_object_del(_popup);
free(path); free(path);
free(text);
} }
void void

View File

@ -91,7 +91,7 @@ _edi_scm_git_file_add(const char *path)
int code; int code;
Eina_Strbuf *command = eina_strbuf_new(); Eina_Strbuf *command = eina_strbuf_new();
eina_strbuf_append_printf(command, "git add '%s'", path); eina_strbuf_append_printf(command, "git add %s", path);
code = _edi_scm_exec(eina_strbuf_string_get(command)); code = _edi_scm_exec(eina_strbuf_string_get(command));
@ -106,7 +106,7 @@ _edi_scm_git_file_mod(const char *path)
int code; int code;
Eina_Strbuf *command = eina_strbuf_new(); Eina_Strbuf *command = eina_strbuf_new();
eina_strbuf_append_printf(command, "git mod '%s'", path); eina_strbuf_append_printf(command, "git mod %s", path);
code = _edi_scm_exec(eina_strbuf_string_get(command)); code = _edi_scm_exec(eina_strbuf_string_get(command));
@ -136,7 +136,7 @@ _edi_scm_git_file_del(const char *path)
int code; int code;
Eina_Strbuf *command = eina_strbuf_new(); Eina_Strbuf *command = eina_strbuf_new();
eina_strbuf_append_printf(command, "git rm '%s'", path); eina_strbuf_append_printf(command, "git rm %s", path);
code = _edi_scm_exec(eina_strbuf_string_get(command)); code = _edi_scm_exec(eina_strbuf_string_get(command));
@ -163,7 +163,7 @@ _edi_scm_git_status(void)
static Edi_Scm_Status * static Edi_Scm_Status *
_parse_line(char *line) _parse_line(char *line)
{ {
char *path, *fullpath, *change; char *esc_path, *path, *fullpath, *change;
Edi_Scm_Status *status; Edi_Scm_Status *status;
change = line; change = line;
@ -215,10 +215,14 @@ _parse_line(char *line)
else else
status->change = EDI_SCM_STATUS_UNKNOWN; status->change = EDI_SCM_STATUS_UNKNOWN;
status->path = eina_stringshare_add(path); esc_path = ecore_file_escape_name(path);
fullpath = edi_path_append(edi_project_get(), path); status->path = eina_stringshare_add(esc_path);
fullpath = edi_path_append(edi_project_get(), esc_path);
status->fullpath = eina_stringshare_add(fullpath); status->fullpath = eina_stringshare_add(fullpath);
status->unescaped = eina_stringshare_add(path);
free(fullpath); free(fullpath);
free(esc_path);
return status; return status;
} }
@ -228,11 +232,12 @@ _edi_scm_git_file_status(const char *path)
{ {
Edi_Scm_Status *status; Edi_Scm_Status *status;
char command[4096]; char command[4096];
char *line; char *line, *escaped;
Edi_Scm_Status_Code result; Edi_Scm_Status_Code result;
snprintf(command, sizeof(command), "git status --porcelain '%s'", path); escaped = ecore_file_escape_name(path);
snprintf(command, sizeof(command), "git status --porcelain %s", escaped);
free(escaped);
line = _edi_scm_exec_response(command); line = _edi_scm_exec_response(command);
if (!line[0] || !line[1]) if (!line[0] || !line[1])
{ {
@ -244,6 +249,7 @@ _edi_scm_git_file_status(const char *path)
result = status->change; result = status->change;
eina_stringshare_del(status->path); eina_stringshare_del(status->path);
eina_stringshare_del(status->fullpath); eina_stringshare_del(status->fullpath);
eina_stringshare_del(status->unescaped);
free(status); free(status);
} }
@ -342,7 +348,7 @@ _edi_scm_git_commit(const char *message)
int code; int code;
Eina_Strbuf *command = eina_strbuf_new(); Eina_Strbuf *command = eina_strbuf_new();
eina_strbuf_append_printf(command, "git commit -m '%s'", message); eina_strbuf_append_printf(command, "git commit -m \"%s\"", message);
code = _edi_scm_exec(eina_strbuf_string_get(command)); code = _edi_scm_exec(eina_strbuf_string_get(command));
@ -534,25 +540,51 @@ edi_scm_shutdown()
EAPI int EAPI int
edi_scm_add(const char *path) edi_scm_add(const char *path)
{ {
char *escaped;
int result;
Edi_Scm_Engine *e = edi_scm_engine_get(); Edi_Scm_Engine *e = edi_scm_engine_get();
return e->file_add(path); escaped = ecore_file_escape_name(path);
result = e->file_add(escaped);
free(escaped);
return result;
} }
EAPI int EAPI int
edi_scm_del(const char *path) edi_scm_del(const char *path)
{ {
char *escaped;
int result;
Edi_Scm_Engine *e = edi_scm_engine_get(); Edi_Scm_Engine *e = edi_scm_engine_get();
return e->file_del(path); escaped = ecore_file_escape_name(path);
result = e->file_del(escaped);
free(escaped);
return result;
} }
EAPI int EAPI int
edi_scm_move(const char *src, const char *dest) edi_scm_move(const char *src, const char *dest)
{ {
char *esc_src, *esc_dst;
int result;
Edi_Scm_Engine *e = edi_scm_engine_get(); Edi_Scm_Engine *e = edi_scm_engine_get();
return e->move(src, dest); esc_src = ecore_file_escape_name(src);
esc_dst = ecore_file_escape_name(dest);
result = e->move(esc_src, esc_dst);
free(esc_src);
free(esc_dst);
return result;
} }
EAPI Eina_Bool EAPI Eina_Bool
@ -571,9 +603,17 @@ edi_scm_status_get(void)
EAPI Edi_Scm_Status_Code EAPI Edi_Scm_Status_Code
edi_scm_file_status(const char *path) edi_scm_file_status(const char *path)
{ {
char *escaped;
int result;
Edi_Scm_Engine *e = edi_scm_engine_get(); Edi_Scm_Engine *e = edi_scm_engine_get();
return e->file_status(path); escaped = ecore_file_escape_name(path);
result = e->file_status(escaped);
free(escaped);
return result;
} }
EAPI void EAPI void

View File

@ -28,6 +28,7 @@ typedef struct _Edi_Scm_Status
{ {
Eina_Stringshare *path; Eina_Stringshare *path;
Eina_Stringshare *fullpath; Eina_Stringshare *fullpath;
Eina_Stringshare *unescaped;
Edi_Scm_Status_Code change; Edi_Scm_Status_Code change;
Eina_Bool staged; Eina_Bool staged;
} Edi_Scm_Status; } Edi_Scm_Status;