create: Escape single quotes in project and user name
@fix T6044
This commit is contained in:
parent
efb4793a10
commit
1c14989ccd
|
@ -73,29 +73,61 @@ _edi_create_year_get()
|
|||
return tp->tm_year + 1900;
|
||||
}
|
||||
|
||||
char *
|
||||
edi_create_escape_quotes(const char *in)
|
||||
{
|
||||
char buf[1024], *out_ptr;
|
||||
const char *pos, *in_ptr;
|
||||
int replace_len;
|
||||
|
||||
pos = strstr(in, "'");
|
||||
if (!pos)
|
||||
return strdup(in);
|
||||
|
||||
in_ptr = in;
|
||||
out_ptr = buf;
|
||||
while (pos)
|
||||
{
|
||||
replace_len = pos - in_ptr;
|
||||
snprintf(out_ptr, replace_len + 1, "%s", in_ptr);
|
||||
snprintf(out_ptr + replace_len, 8, "'\\\"'\\\"'");
|
||||
|
||||
in_ptr += replace_len + 1;
|
||||
out_ptr += replace_len + 7;
|
||||
pos = strstr(in_ptr, "'");
|
||||
}
|
||||
snprintf(out_ptr, strlen(in) - (in_ptr - in) + 1, "%s", in_ptr);
|
||||
|
||||
return strdup(buf);
|
||||
}
|
||||
|
||||
static void
|
||||
_edi_create_filter_file(Edi_Create *create, const char *path)
|
||||
{
|
||||
char *cmd, *lowername, *uppername;
|
||||
char *cmd, *name, *lowername, *uppername, *user;
|
||||
const char *template;
|
||||
int length;
|
||||
|
||||
name = edi_create_escape_quotes(create->name);
|
||||
user = edi_create_escape_quotes(create->user);
|
||||
create->filters++;
|
||||
// TODO speed this up - pre-cache this filter!
|
||||
template = "sh -c \"sed -i.bak 's|\\${edi_name}|%s|g;s|\\${Edi_Name}|%s|g;s|\\${EDI_NAME}|%s|g;s|\\${Edi_User}|%s|g;s|\\${Edi_Email}|%s|g;s|\\${Edi_Url}|%s|g;s|\\${Edi_Year}|%d|g' %s\"; rm %s.bak";
|
||||
length = strlen(template) + (strlen(create->name) * 3) + strlen(create->user) + strlen(create->email) + strlen(create->url) + (strlen(path) * 2) + 4 - 16 + 1;
|
||||
length = strlen(template) + (strlen(name) * 3) + strlen(user) + strlen(create->email) + strlen(create->url) + (strlen(path) * 2) + 4 - 16 + 1;
|
||||
|
||||
lowername = strdup(create->name);
|
||||
lowername = strdup(name);
|
||||
eina_str_tolower(&lowername);
|
||||
uppername = strdup(create->name);
|
||||
uppername = strdup(name);
|
||||
eina_str_toupper(&uppername);
|
||||
|
||||
cmd = malloc(sizeof(char) * length);
|
||||
snprintf(cmd, length, template, lowername, create->name, uppername , create->user, create->email, create->url, _edi_create_year_get(), path, path);
|
||||
snprintf(cmd, length, template, lowername, name, uppername , user, create->email, create->url, _edi_create_year_get(), path, path);
|
||||
|
||||
ecore_exe_run(cmd, NULL);
|
||||
free(lowername);
|
||||
free(uppername);
|
||||
free(name);
|
||||
free(user);
|
||||
free(cmd);
|
||||
|
||||
// This matches the filtered path copy created in the copy callback
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
# define EDI_PRIVATE_H
|
||||
|
||||
extern int _edi_lib_log_dom;
|
||||
char *edi_create_escape_quotes(const char *in);
|
||||
|
||||
#ifdef ERR
|
||||
# undef ERR
|
||||
|
|
|
@ -9,6 +9,7 @@ clang_include = '$(CLANG_INCLUDE)'
|
|||
|
||||
edi_suite_SOURCES = \
|
||||
edi_test_path.c \
|
||||
edi_test_create.c \
|
||||
edi_test_exe.c \
|
||||
edi_test_content_provider.c \
|
||||
edi_test_language_provider.c \
|
||||
|
|
|
@ -15,6 +15,7 @@ static const struct {
|
|||
} tests[] = {
|
||||
{ "basic", edi_test_basic },
|
||||
{ "path", edi_test_path },
|
||||
{ "create", edi_test_create },
|
||||
{ "exe", edi_test_exe },
|
||||
{ "content_provider", edi_test_content_provider },
|
||||
{ "language_provider", edi_test_language_provider },
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
void edi_test_basic(TCase *tc);
|
||||
void edi_test_console(TCase *tc);
|
||||
void edi_test_path(TCase *tc);
|
||||
void edi_test_create(TCase *tc);
|
||||
void edi_test_exe(TCase *tc);
|
||||
void edi_test_content_provider(TCase *tc);
|
||||
void edi_test_language_provider(TCase *tc);
|
||||
|
|
|
@ -0,0 +1,38 @@
|
|||
#ifdef HAVE_CONFIG_H
|
||||
# include "config.h"
|
||||
#endif
|
||||
|
||||
#include "edi_suite.h"
|
||||
|
||||
#include "edi_create.c"
|
||||
|
||||
START_TEST (edi_test_create_escape_quotes)
|
||||
{
|
||||
const char *in = "hallowe'en";
|
||||
|
||||
char *out = edi_create_escape_quotes(in);
|
||||
|
||||
ck_assert_str_eq(out, "hallowe'\\\"'\\\"'en");
|
||||
|
||||
free(out);
|
||||
}
|
||||
END_TEST
|
||||
|
||||
START_TEST (edi_test_create_escape_multiple_quotes)
|
||||
{
|
||||
const char *in = "we'ven't";
|
||||
|
||||
char *out = edi_create_escape_quotes(in);
|
||||
|
||||
ck_assert_str_eq(out, "we'\\\"'\\\"'ven'\\\"'\\\"'t");
|
||||
|
||||
free(out);
|
||||
}
|
||||
END_TEST
|
||||
|
||||
void edi_test_create(TCase *tc)
|
||||
{
|
||||
tcase_add_test(tc, edi_test_create_escape_quotes);
|
||||
tcase_add_test(tc, edi_test_create_escape_multiple_quotes);
|
||||
}
|
||||
|
Loading…
Reference in New Issue