From: Robert Manea Date: Tue, 28 Jul 2009 18:19:28 +0000 (+0200) Subject: applied helmut's expand() patch X-Git-Url: https://vcs.maemo.org/git/?p=uzbl-mobile;a=commitdiff_plain;h=3698971d9ba8fc4778ecee96b69192358575225a applied helmut's expand() patch --- diff --git a/uzbl.c b/uzbl.c index c578960..afa9a45 100644 --- a/uzbl.c +++ b/uzbl.c @@ -54,6 +54,7 @@ #include #include #include +#include #include #include #include @@ -249,10 +250,8 @@ gchar * expand(char *s, guint recurse) { uzbl_cmdprop *c; guint etype; - char upto = ' '; char *end_simple_var = "^°!\"§$%&/()=?'`'+~*'#-.:,;@<>| \\{}[]¹²³¼½"; - char str_end[3]; - char ret[4096]; + char *ret = NULL; char *vend = NULL; GError *err = NULL; gchar *cmd_stdout = NULL; @@ -277,37 +276,31 @@ expand(char *s, guint recurse) { if(!vend) vend = strchr(s, '\0'); break; case EXP_BRACED_VAR: - s++; upto = '}'; - vend = strchr(s, upto); + s++; + vend = strchr(s, '}'); if(!vend) vend = strchr(s, '\0'); break; case EXP_EXPR: s++; - strcpy(str_end, ")@"); - str_end[2] = '\0'; - vend = strstr(s, str_end); + vend = strstr(s, ")@"); if(!vend) vend = strchr(s, '\0'); break; case EXP_JS: s++; - strcpy(str_end, ">@"); - str_end[2] = '\0'; - vend = strstr(s, str_end); + vend = strstr(s, ">@"); if(!vend) vend = strchr(s, '\0'); break; case EXP_ESCAPE: s++; - strcpy(str_end, "]@"); - str_end[2] = '\0'; - vend = strstr(s, str_end); + vend = strstr(s, "]@"); if(!vend) vend = strchr(s, '\0'); break; } + assert(vend); - if(vend) { - strncpy(ret, s, vend-s); - ret[vend-s] = '\0'; - } + ret = g_strndup(s, vend-s); + if(!ret) + abort(); if(etype == EXP_SIMPLE_VAR || etype == EXP_BRACED_VAR) { @@ -338,10 +331,10 @@ expand(char *s, guint recurse) { g_error_free (err); } else if (*cmd_stdout) { - int len = strlen(cmd_stdout); + size_t len = strlen(cmd_stdout); - if(cmd_stdout[len-1] == '\n') - cmd_stdout[--len] = 0; /* strip trailing newline */ + if(len > 0 && cmd_stdout[len-1] == '\n') + cmd_stdout[--len] = '\0'; /* strip trailing newline */ g_string_append(buf, cmd_stdout); g_free(cmd_stdout); @@ -371,6 +364,9 @@ expand(char *s, guint recurse) { g_free(mycmd); s = vend+2; } + + free(ret); + ret = NULL; break; default: