From patchwork Sun May 11 21:28:56 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chuck Lever X-Patchwork-Id: 347837 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from aserp1040.oracle.com (aserp1040.oracle.com [141.146.126.69]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 595C9140083 for ; Mon, 12 May 2014 07:32:13 +1000 (EST) Received: from acsinet21.oracle.com (acsinet21.oracle.com [141.146.126.237]) by aserp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with ESMTP id s4BLWAjv009528 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Sun, 11 May 2014 21:32:11 GMT Received: from oss.oracle.com (oss-external.oracle.com [137.254.96.51]) by acsinet21.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id s4BLWA8b006086 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Sun, 11 May 2014 21:32:10 GMT Received: from localhost ([127.0.0.1] helo=oss.oracle.com) by oss.oracle.com with esmtp (Exim 4.63) (envelope-from ) id 1WjbIr-00049z-2t; Sun, 11 May 2014 14:29:01 -0700 Received: from acsinet22.oracle.com ([141.146.126.238]) by oss.oracle.com with esmtp (Exim 4.63) (envelope-from ) id 1WjbIp-00049m-6o for fedfs-utils-devel@oss.oracle.com; Sun, 11 May 2014 14:28:59 -0700 Received: from aserp1030.oracle.com (aserp1030.oracle.com [141.146.126.68]) by acsinet22.oracle.com (8.14.4+Sun/8.14.4) with ESMTP id s4BLSwGn014882 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Sun, 11 May 2014 21:28:59 GMT Received: from mail-ig0-f182.google.com (mail-ig0-f182.google.com [209.85.213.182]) by aserp1030.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with ESMTP id s4BLSvPC025944 (version=TLSv1/SSLv3 cipher=RC4-SHA bits=128 verify=OK) for ; Sun, 11 May 2014 21:28:58 GMT Authentication-Results: aserp1030.oracle.com; dkim=pass reason="2048-bit key" header.d=gmail.com header.i=@gmail.com header.b=JRuviPhw Received: by mail-ig0-f182.google.com with SMTP id uy17so3094709igb.15 for ; Sun, 11 May 2014 14:28:57 -0700 (PDT) X-Received: by 10.50.109.230 with SMTP id hv6mr36591486igb.9.1399843737864; Sun, 11 May 2014 14:28:57 -0700 (PDT) Received: from seurat.1015granger.net ([2604:8800:100:81fc:20c:29ff:fe44:ec31]) by mx.google.com with ESMTPSA id kq1sm16877287igb.16.2014.05.11.14.28.56 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 11 May 2014 14:28:57 -0700 (PDT) To: fedfs-utils-devel@oss.oracle.com From: Chuck Lever Date: Sun, 11 May 2014 17:28:56 -0400 Message-ID: <20140511212856.13852.38227.stgit@seurat.1015granger.net> In-Reply-To: <20140511212416.13852.92639.stgit@seurat.1015granger.net> References: <20140511212416.13852.92639.stgit@seurat.1015granger.net> User-Agent: StGit/0.16 MIME-Version: 1.0 X-Flow-Control-Info: class=Pass-to-MM reputation=ipRisk-All ip=209.85.213.182 ct-class=R5 ct-vol1=-97 ct-vol2=8 ct-vol3=7 ct-risk=50 ct-spam1=79 ct-spam2=7 ct-bulk=6 rcpts=1 size=2136 X-Sendmail-CM-Score: 0.00% X-Sendmail-CM-Analysis: v=2.1 cv=IYq+Bwaa c=1 sm=1 tr=0 a=5XyxPnPcVxl2z+jysL/WtQ==:117 a=dzsqy3y4QnMA:10 a=omjgfGcLobYA:10 a=dPGociXpb70A:10 a=IkcTkHD0fZMA:10 a=xqWC_Br6kY4A:10 a=yPCof4ZbAAAA:8 a=Lb1rMZzfAAAA:8 a=1XWaLZrsAAAA:8 a=S_Len-FjGSCAR2l9lIEA:9 a=SwIGGO uJ1ufd8Fcp:21 a=QsDf0YdLUzq-4Kbb:21 a=QEXdDO2ut3YA:10 a=7DSvI1NPTFQA:10 X-Sendmail-CT-RefID: str=0001.0A090205.536FEB9A.006A, ss=1, re=0.000, recu=0.000, reip=0.000, cl=1, cld=1, fgs=0 X-Sendmail-CT-Classification: not spam Subject: [fedfs-utils] [PATCH 06/17] libnsdb: Fix memory leaks in nsdb_path_array_to_uri_pathname() X-BeenThere: fedfs-utils-devel@oss.oracle.com X-Mailman-Version: 2.1.9 Precedence: list Reply-To: fedfs-utils Developers List-Id: fedfs-utils Developers List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: fedfs-utils-devel-bounces@oss.oracle.com Errors-To: fedfs-utils-devel-bounces@oss.oracle.com X-Source-IP: acsinet21.oracle.com [141.146.126.237] Ensure that "result" is properly freed before exiting with an error. Fixes: 750fdf4bba4f5d4880ce7ad5b56451bd771cc3e2 Signed-off-by: Chuck Lever --- src/libnsdb/path.c | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/src/libnsdb/path.c b/src/libnsdb/path.c index f08560f..c58dc89 100644 --- a/src/libnsdb/path.c +++ b/src/libnsdb/path.c @@ -625,6 +625,7 @@ FedFsStatus nsdb_path_array_to_uri_pathname(char * const *path_array, UriUriA *uri) { UriPathSegmentA *pos, *result; + FedFsStatus status; size_t length, len; char *component; unsigned int i; @@ -641,40 +642,49 @@ nsdb_path_array_to_uri_pathname(char * const *path_array, UriUriA *uri) if (len == 0) { xlog(D_GENERAL, "%s: Zero-length component", __func__); - return FEDFS_ERR_BADNAME; + status = FEDFS_ERR_BADNAME; + goto out_err; } if (len > NAME_MAX) { xlog(D_GENERAL, "%s: Component length too long", __func__); - return FEDFS_ERR_NAMETOOLONG; + status = FEDFS_ERR_NAMETOOLONG; + goto out_err; } if (strchr(component, '/') != NULL) { xlog(D_GENERAL, "%s: Local separator character " "found in component", __func__); - return FEDFS_ERR_BADNAME; + status = FEDFS_ERR_BADNAME; + goto out_err; } if (!nsdb_pathname_is_utf8(component)) { xlog(D_GENERAL, "%s: Bad character in component", __func__); - return FEDFS_ERR_BADCHAR; + status = FEDFS_ERR_BADCHAR; + goto out_err; } length += STRLEN_SLASH + len; if (length > PATH_MAX) { xlog(D_GENERAL, "%s: Pathname too long", __func__); - return FEDFS_ERR_NAMETOOLONG; + status = FEDFS_ERR_NAMETOOLONG; + goto out_err; } pos->next = nsdb_new_uri_path_segment(component); if (pos->next == NULL) { - nsdb_free_path_segments(result); - return FEDFS_ERR_SVRFAULT; + status = FEDFS_ERR_SVRFAULT; + goto out_err; } pos = pos->next; } uri->pathHead = result; return FEDFS_OK; + +out_err: + nsdb_free_path_segments(result); + return status; } /**