From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Dan Nicolaescu Newsgroups: gmane.emacs.devel Subject: Problem report #47 Date: Sun, 30 Apr 2006 09:46:08 -0700 Message-ID: <200604301646.k3UGk8hY029053@scanner2.ics.uci.edu> NNTP-Posting-Host: main.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Trace: sea.gmane.org 1146417096 29280 80.91.229.2 (30 Apr 2006 17:11:36 GMT) X-Complaints-To: usenet@sea.gmane.org NNTP-Posting-Date: Sun, 30 Apr 2006 17:11:36 +0000 (UTC) Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Sun Apr 30 19:11:35 2006 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by ciao.gmane.org with esmtp (Exim 4.43) id 1FaFSG-0000cj-V6 for ged-emacs-devel@m.gmane.org; Sun, 30 Apr 2006 19:11:33 +0200 Original-Received: from localhost ([127.0.0.1] helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1FaFSG-0004uu-BD for ged-emacs-devel@m.gmane.org; Sun, 30 Apr 2006 13:11:32 -0400 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1FaFQb-0003if-UK for emacs-devel@gnu.org; Sun, 30 Apr 2006 13:09:50 -0400 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1FaFQb-0003hx-3s for emacs-devel@gnu.org; Sun, 30 Apr 2006 13:09:49 -0400 Original-Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1FaFQa-0003hp-P5 for emacs-devel@gnu.org; Sun, 30 Apr 2006 13:09:48 -0400 Original-Received: from [128.195.1.36] (helo=scanner2.ics.uci.edu) by monty-python.gnu.org with esmtp (Exim 4.52) id 1FaFUD-0007x0-Ky for emacs-devel@gnu.org; Sun, 30 Apr 2006 13:13:33 -0400 Original-Received: from vino.ics.uci.edu (vino.ics.uci.edu [128.195.11.198]) by scanner2.ics.uci.edu (8.13.6/8.13.5) with ESMTP id k3UGk8hY029053 for ; Sun, 30 Apr 2006 09:46:08 -0700 (PDT) Original-To: emacs-devel@gnu.org Mail-Followup-To: emacs-devel@gnu.org Original-Lines: 93 X-ICS-MailScanner: Found to be clean X-ICS-MailScanner-SpamCheck: not spam (whitelisted), SpamAssassin (score=-0.84, required 5, autolearn=disabled, ALL_TRUSTED -1.44, J_CHICKENPOX_26 0.60) X-ICS-MailScanner-From: dann@vino.ics.uci.edu X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:53677 Archived-At: CID: 47 Checker: RESOURCE_LEAK (help) File: emacs/lib-src/etags.c Function: Perl_functions Description: Returned without freeing storage "package" 4473 static void 4474 Perl_functions (inf) 4475 FILE *inf; 4476 { Event alloc_fn: Called allocation function "savestr" [model] Event var_assign: Assigned variable "package" to storage returned from "savestr" Also see events: [var_assign][leaked_storage] 4477 char *package = savestr ("main"); /* current package name */ 4478 register char *cp; 4479 At conditional (1): "feof == 0" taking false path 4480 LOOP_ON_INPUT_LINES (inf, lb, cp) 4481 { 4482 skip_spaces(cp); 4483 4484 if (LOOKING_AT (cp, "package")) 4485 { 4486 free (package); 4487 get_tag (cp, &package); 4488 } 4489 else if (LOOKING_AT (cp, "sub")) 4490 { 4491 char *pos; 4492 char *sp = cp; 4493 4494 while (!notinname (*cp)) 4495 cp++; 4496 if (cp == sp) 4497 continue; /* nothing found */ 4498 if ((pos = etags_strchr (sp, ':')) != NULL 4499 && pos < cp && pos[1] == ':') 4500 /* The name is already qualified. */ 4501 make_tag (sp, cp - sp, TRUE, 4502 lb.buffer, cp - lb.buffer + 1, lineno, linecharno); 4503 else 4504 /* Qualify it. */ 4505 { 4506 char savechar, *name; 4507 4508 savechar = *cp; 4509 *cp = '\0'; 4510 name = concat (package, "::", sp); 4511 *cp = savechar; 4512 make_tag (name, strlen(name), TRUE, 4513 lb.buffer, cp - lb.buffer + 1, lineno, linecharno); 4514 free (name); 4515 } 4516 } 4517 else if (globals) /* only if we are tagging global vars */ 4518 { 4519 /* Skip a qualifier, if any. */ 4520 bool qual = LOOKING_AT (cp, "my") || LOOKING_AT (cp, "local"); 4521 /* After "my" or "local", but before any following paren or space. */ 4522 char *varstart = cp; 4523 4524 if (qual /* should this be removed? If yes, how? */ 4525 && (*cp == '$' || *cp == '@' || *cp == '%')) 4526 { 4527 varstart += 1; 4528 do 4529 cp++; 4530 while (ISALNUM (*cp) || *cp == '_'); 4531 } 4532 else if (qual) 4533 { 4534 /* Should be examining a variable list at this point; 4535 could insist on seeing an open parenthesis. */ 4536 while (*cp != '\0' && *cp != ';' && *cp != '=' && *cp != ')') 4537 cp++; 4538 } 4539 else 4540 continue; 4541 4542 make_tag (varstart, cp - varstart, FALSE, 4543 lb.buffer, cp - lb.buffer + 1, lineno, linecharno); 4544 } 4545 } Event leaked_storage: Returned without freeing storage "package" Also see events: [alloc_fn][var_assign] 4546 }