[tarantool-patches] Re: [PATCH v2 03/11] sql: fix leak on CREATE TABLE and resolve self ref
Kirill Shcherbatov
kshcherbatov at tarantool.org
Thu Jun 14 19:12:34 MSK 2018
> Why do you need snprintf("%s", str)? It is the same as just 'str'.
> is enough to set an error. If zErrMsg was not terminated by zero, snprintf("%s")
> would not work as well. But zErrMsg is terminated.
I wasn't sure that this diag_set build print string object. It doesn't matter. I've fixed this.
> And why do you destroy zErrMsg here? Why not in sql_parser_destroy()?
> zErrMsg is struct Parse member.
Ok, done.
--- a/src/box/sql/prepare.c
+++ b/src/box/sql/prepare.c
@@ -453,5 +453,6 @@ sql_parser_destroy(Parse *parser)
db->lookaside.bDisable -= parser->disableLookaside;
}
parser->disableLookaside = 0;
+ sqlite3DbFree(db, parser->zErrMsg);
region_destroy(&parser->region);
}
--- a/src/box/sql/trigger.c
+++ b/src/box/sql/trigger.c
@@ -815,6 +815,7 @@ transferParseError(Parse * pTo, Parse * pFrom)
} else {
sqlite3DbFree(pFrom->db, pFrom->zErrMsg);
}
+ pFrom->zErrMsg = NULL;
}
--- a/src/box/sql.c
+++ b/src/box/sql.c
@@ -1856,13 +1856,13 @@ sql_checks_resolve_space_def_reference(ExprList *expr_list,
sql_resolve_self_reference(&parser, &dummy_table, NC_IsCheck, NULL,
expr_list);
-
- sql_parser_destroy(&parser);
+ int rc = 0;
if (parser.rc != SQLITE_OK) {
/* Tarantool error may be already set with diag. */
if (parser.rc != SQL_TARANTOOL_ERROR)
diag_set(ClientError, ER_SQL, parser.zErrMsg);
- return -1;
+ rc = -1;
}
- return 0;
+ sql_parser_destroy(&parser);
+ return rc;
}
More information about the Tarantool-patches
mailing list