BUG/MINOR: log: fix minor resource leaks on logformat error path

As reported by Ilya in issue #392, Coverity found that we're leaking
allocated strings on error paths in parse_logformat(). Let's use a
proper exit label for failures instead of seeding return 0 everywhere.

This should be backported to all supported versions.
diff --git a/src/log.c b/src/log.c
index c4e0082..23e6c47 100644
--- a/src/log.c
+++ b/src/log.c
@@ -618,7 +618,7 @@
 				sp = str - 1; /* send both the '%' and the current char */
 				memprintf(err, "unexpected variable name near '%c' at position %d line : '%s'. Maybe you want to write a single '%%', use the syntax '%%%%'",
 				          *str, (int)(str - backfmt), fmt);
-				return 0;
+				goto fail;
 
 			}
 			else
@@ -645,7 +645,7 @@
 				break;
 			}
 			memprintf(err, "parse argument modifier without variable name near '%%{%s}'", arg);
-			return 0;
+			goto fail;
 
 		case LF_STEXPR:                        // text immediately following '%['
 			if (*str == ']') {             // end of arg
@@ -678,16 +678,16 @@
 			switch (pformat) {
 			case LF_VAR:
 				if (!parse_logformat_var(arg, arg_len, var, var_len, curproxy, list_format, &options, err))
-					return 0;
+					goto fail;
 				break;
 			case LF_STEXPR:
 				if (!add_sample_to_logformat_list(var, arg, arg_len, curproxy, list_format, options, cap, err))
-					return 0;
+					goto fail;
 				break;
 			case LF_TEXT:
 			case LF_SEPARATOR:
 				if (!add_to_logformat_list(sp, str, pformat, list_format, err))
-					return 0;
+					goto fail;
 				break;
 			}
 			sp = str; /* new start of text at every state switch and at every separator */
@@ -696,11 +696,14 @@
 
 	if (pformat == LF_STARTVAR || pformat == LF_STARG || pformat == LF_STEXPR) {
 		memprintf(err, "truncated line after '%s'", var ? var : arg ? arg : "%");
-		return 0;
+		goto fail;
 	}
 	free(backfmt);
 
 	return 1;
+ fail:
+	free(backfmt);
+	return 0;
 }
 
 /*