From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from [87.239.111.99] (localhost [127.0.0.1]) by dev.tarantool.org (Postfix) with ESMTP id 938EB6EC57; Fri, 15 Oct 2021 01:47:35 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org 938EB6EC57 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=tarantool.org; s=dev; t=1634251655; bh=oSN4pATIFJWrdD5fVGKBegIcfJV88EY9t/FvMMk0lsM=; h=Date:To:Cc:References:In-Reply-To:Subject:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=ep1MvyCbcONesxVXN9l+vJc/+6X3gTaewv7KLhCjP2ChKx1WB9lZE2fFi9v2xs5ih Yhgweggii0KSk0qmoVfN7iiOeEVh/qw53AT8KlzHxEBKcajqCKaO3YWD2IKhJ2Dp+8 Z6lwsL2ypiZMH5Tuna9M9qeGkQpKgEwrSxknLYfE= Received: from smtpng1.i.mail.ru (smtpng1.i.mail.ru [94.100.181.251]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dev.tarantool.org (Postfix) with ESMTPS id 8A6D46EC57 for ; Fri, 15 Oct 2021 01:47:34 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org 8A6D46EC57 Received: by smtpng1.m.smailru.net with esmtpa (envelope-from ) id 1mb9Vd-0001PL-Ur; Fri, 15 Oct 2021 01:47:34 +0300 Message-ID: <51eb0bb4-b620-257e-5af3-10c8b23e7b2b@tarantool.org> Date: Fri, 15 Oct 2021 00:47:33 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:91.0) Gecko/20100101 Thunderbird/91.2.0 To: imeevma@tarantool.org Cc: tarantool-patches@dev.tarantool.org References: <278cf14adddc65006253100ce12604626e748062.1633713433.git.imeevma@gmail.com> Content-Language: en-US In-Reply-To: <278cf14adddc65006253100ce12604626e748062.1633713433.git.imeevma@gmail.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-4EC0790: 10 X-7564579A: 646B95376F6C166E X-77F55803: 4F1203BC0FB41BD9AE9EF867AE584ADA48FDA6574F0672B771BC8658FAF4FA0B182A05F538085040B30144E9A325DF63F04F409938558E21E6360C74777F0FBA7745FDFC148275C6 X-7FA49CB5: FF5795518A3D127A4AD6D5ED66289B5278DA827A17800CE77FAFB841CE9024F9EA1F7E6F0F101C67BD4B6F7A4D31EC0BCC500DACC3FED6E28638F802B75D45FF8AA50765F7900637BD378188104BC8BE8638F802B75D45FF36EB9D2243A4F8B5A6FCA7DBDB1FC311F39EFFDF887939037866D6147AF826D8EADB150A339591AE1A804CF2976F88CD117882F4460429724CE54428C33FAD305F5C1EE8F4F765FCF1175FABE1C0F9B6A471835C12D1D9774AD6D5ED66289B52BA9C0B312567BB23117882F446042972877693876707352033AC447995A7AD18C26CFBAC0749D213D2E47CDBA5A96583BA9C0B312567BB231DD303D21008E29813377AFFFEAFD269A417C69337E82CC2E827F84554CEF50127C277FBC8AE2E8BA83251EDC214901ED5E8D9A59859A8B66F6A3E018CF4DC80089D37D7C0E48F6C5571747095F342E88FB05168BE4CE3AF X-B7AD71C0: AC4F5C86D027EB782CDD5689AFBDA7A213B5FB47DCBC3458834459D11680B50580647984BABFFB52DFB2704DA012D010 X-C1DE0DAB: 0D63561A33F958A512C5C34EDBCBEF40CE367EA36BF21FFF27CE7C291EA8AB1AD59269BC5F550898D99A6476B3ADF6B47008B74DF8BB9EF7333BD3B22AA88B938A852937E12ACA7557E988E9157162368E8E86DC7131B365E7726E8460B7C23C X-C8649E89: 4E36BF7865823D7055A7F0CF078B5EC49A30900B95165D34682FD2D2951524C51A225115E74115BFD6A3948151C0B29BB3805B8D23506793D80EB0044199E8BE1D7E09C32AA3244C36AAAF8F8B4854D3A82B0D3FB3832D253A76366E8A9DE7CA729B2BEF169E0186 X-D57D3AED: 3ZO7eAau8CL7WIMRKs4sN3D3tLDjz0dLbV79QFUyzQ2Ujvy7cMT6pYYqY16iZVKkSc3dCLJ7zSJH7+u4VD18S7Vl4ZUrpaVfd2+vE6kuoey4m4VkSEu530nj6fImhcD4MUrOEAnl0W826KZ9Q+tr5ycPtXkTV4k65bRjmOUUP8cvGozZ33TWg5HZplvhhXbhDGzqmQDTd6OAevLeAnq3Ra9uf7zvY2zzsIhlcp/Y7m53TZgf2aB4JOg4gkr2biojZCle+NCKLXEko62mQjhlyA== X-Mailru-Sender: 689FA8AB762F7393C37E3C1AEC41BA5DAE96C11B4457F3A8D83C8DF5EBFC8C6F3841015FED1DE5223CC9A89AB576DD93FB559BB5D741EB963CF37A108A312F5C27E8A8C3839CE0E267EA787935ED9F1B X-Mras: Ok Subject: Re: [Tarantool-patches] [PATCH v1 20/21] sql: remove MEM_Term flag X-BeenThere: tarantool-patches@dev.tarantool.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Tarantool development patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: Vladislav Shpilevoy via Tarantool-patches Reply-To: Vladislav Shpilevoy Errors-To: tarantool-patches-bounces@dev.tarantool.org Sender: "Tarantool-patches" Thanks for the patch! > diff --git a/src/box/sql/printf.c b/src/box/sql/printf.c > index b4ab0d0f9..f261a731c 100644 > --- a/src/box/sql/printf.c > +++ b/src/box/sql/printf.c > @@ -160,8 +160,22 @@ getTextArg(PrintfArguments * p) > { > if (p->nArg <= p->nUsed) > return 0; > - struct Mem *mem = p->apArg[p->nUsed++]; > - return (char *)mem_as_str0(mem); > + struct Mem mem; > + mem_create(&mem); > + mem_copy(&mem, p->apArg[p->nUsed++]); 1. mem_copy_as_ephemeral() would be enough. But would be even better to have mem_snprintf() which would work like snprintf - save string representation of mem into a provided buffer and return how many bytes written / need to be written. This though could be postponed indefinitely, I don't mind. > + if (mem_to_str(&mem) != 0) { > + mem_destroy(&mem); > + return NULL; > + } > + char *str = region_alloc(&fiber()->gc, mem.n + 1); 2. printf is called for each row. Which means it will leak the region. You can either do the snprintf-thing described above to write directly into the needed buffer, or at least cleanup the region using a save point in the end of sqlVXPrintf(). > diff --git a/src/box/sql/whereexpr.c b/src/box/sql/whereexpr.c > index 6849f13ec..ad064d500 100644 > --- a/src/box/sql/whereexpr.c > +++ b/src/box/sql/whereexpr.c > @@ -307,12 +307,18 @@ like_optimization_is_valid(Parse *pParse, Expr *pExpr, Expr **ppPrefix, > > op = pRight->op; > if (op == TK_VARIABLE) { > - Vdbe *pReprepare = pParse->pReprepare; > - int iCol = pRight->iColumn; > - pVal = sqlVdbeGetBoundValue(pReprepare, iCol); > - if (pVal != NULL && mem_is_str(pVal)) { > - if (mem_as_str0(pVal) == NULL) > + var = vdbe_get_bound_value(pParse->pReprepare, > + pRight->iColumn - 1); > + if (var != NULL && mem_is_str(var)) { > + uint32_t size = var->n + 1; > + char *str = region_alloc(&fiber()->gc, size); 3. You leak the fiber's region. AFAIR, it is not cleaned up in the end of parsing. Try to use pParse->region. > + if (str == NULL) { > + diag_set(OutOfMemory, size, "region", "str"); > return -1; > + } > + memcpy(str, var->z, var->n); > + str[var->n] = '\0'; > + z = str; > }