diff options
author | woglinde <woglinde@ffa7fe5e-494d-0410-b361-a75ebd5db220> | 2011-05-26 08:40:18 +0000 |
---|---|---|
committer | woglinde <woglinde@ffa7fe5e-494d-0410-b361-a75ebd5db220> | 2011-05-26 08:40:18 +0000 |
commit | 74a482a9824d78524c499b81ac0ceab92d64b695 (patch) | |
tree | 8ae76f705c16193ee52a018e3db04db442ddb9f5 /navit/command.c | |
parent | aadd9dd8935a254d6db4452ea54e9d0793181cb2 (diff) | |
download | navit-74a482a9824d78524c499b81ac0ceab92d64b695.tar.gz |
Fix:core:Add a patch to to satisfy "invalid reads" found with valgrind in command.c, patch was provided by pini, closes ticket #864
git-svn-id: http://svn.code.sf.net/p/navit/code/trunk/navit@4500 ffa7fe5e-494d-0410-b361-a75ebd5db220
Diffstat (limited to 'navit/command.c')
-rw-r--r-- | navit/command.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/navit/command.c b/navit/command.c index 1c957b2da..2d68c5744 100644 --- a/navit/command.c +++ b/navit/command.c @@ -851,22 +851,29 @@ command_evaluate_to_boolean(struct attr *attr, const char *expr, int *error) void command_evaluate(struct attr *attr, const char *expr) { + /* Once the eval has started we can't rely anymore on the content of + * expr which may be freed when the calling widget is destroyed by a + * subsequent command call. Hence the g_strdup. */ + + const char *expr_dup; struct result res; struct context ctx; memset(&res, 0, sizeof(res)); memset(&ctx, 0, sizeof(ctx)); ctx.attr=attr; ctx.error=0; - ctx.expr=expr; + ctx.expr=expr_dup=g_strdup(expr); for (;;) { eval_comma(&ctx,&res); if (ctx.error) - return; + break; resolve(&ctx, &res, NULL); if (ctx.error) - return; - if (!get_op(&ctx,0,";",NULL)) return; + break; + if (!get_op(&ctx,0,";",NULL)) + break; } + g_free(expr_dup); } #if 0 |