# --- ROCK-COPYRIGHT-NOTE-BEGIN ---
|
|
#
|
|
# This copyright note is auto-generated by ./scripts/Create-CopyPatch.
|
|
# Please add additional copyright information _after_ the line containing
|
|
# the ROCK-COPYRIGHT-NOTE-END tag. Otherwise it might get removed by
|
|
# the ./scripts/Create-CopyPatch script. Do not edit this copyright text!
|
|
#
|
|
# ROCK Linux: rock-src/package/tsa/slrn/mem_leak.patch
|
|
# ROCK Linux is Copyright (C) 1998 - 2003 Clifford Wolf
|
|
#
|
|
# This program is free software; you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation; either version 2 of the License, or
|
|
# (at your option) any later version. A copy of the GNU General Public
|
|
# License can be found at Documentation/COPYING.
|
|
#
|
|
# Many people helped and are helping developing ROCK Linux. Please
|
|
# have a look at http://www.rocklinux.org/ and the Documentation/TEAM
|
|
# file for details.
|
|
#
|
|
# --- ROCK-COPYRIGHT-NOTE-END ---
|
|
|
|
--- ./src/score.c Wed Mar 13 13:52:00 2002
|
|
+++ ./src/score.c Fri Apr 5 23:20:20 2002
|
|
@@ -550,6 +550,19 @@
|
|
|
|
char *Slrn_Scorefile_Open = NULL;
|
|
|
|
+static void free_srt (Score_Regexp_Type *srt)
|
|
+{
|
|
+ while (srt != NULL)
|
|
+ {
|
|
+ Score_Regexp_Type *srt_next = srt->next;
|
|
+ if ((srt->header_type == SCORE_SUB_AND) ||
|
|
+ (srt->header_type == SCORE_SUB_OR))
|
|
+ free_srt (srt->search.srt);
|
|
+ SLFREE (srt);
|
|
+ srt = srt_next;
|
|
+ }
|
|
+}
|
|
+
|
|
static void free_group_chain (void)
|
|
{
|
|
Score_Regexp_Type *srt;
|
|
@@ -558,13 +571,11 @@
|
|
{
|
|
Score_Type *next = Score_Root->next;
|
|
srt = &Score_Root->regexp_list;
|
|
- srt = srt->next; /* first not malloced */
|
|
- while (srt != NULL)
|
|
- {
|
|
- Score_Regexp_Type *srt_next = srt->next;
|
|
- SLFREE (srt);
|
|
- srt = srt_next;
|
|
- }
|
|
+ /* first not malloced; free subscores only: */
|
|
+ if ((srt->header_type == SCORE_SUB_AND) ||
|
|
+ (srt->header_type == SCORE_SUB_OR))
|
|
+ free_srt (srt->search.srt);
|
|
+ free_srt (srt->next);
|
|
SLFREE (Score_Root);
|
|
Score_Root = next;
|
|
}
|
|
@@ -837,6 +848,21 @@
|
|
}
|
|
|
|
|
|
+static void free_psrt (PScore_Regexp_Type *r)
|
|
+{
|
|
+ while (r != NULL)
|
|
+ {
|
|
+ PScore_Regexp_Type *rnext = r->next;
|
|
+
|
|
+ if ((r->header_type == SCORE_SUB_AND) ||
|
|
+ (r->header_type == SCORE_SUB_OR))
|
|
+ free_psrt (r->ireg.psrt);
|
|
+ else if ((r->flags & USE_INTEGER) == 0)
|
|
+ slrn_free ((char *) r->ireg.regexp_str);
|
|
+ SLFREE (r);
|
|
+ r = rnext;
|
|
+ }
|
|
+}
|
|
|
|
static void free_group_scores (void)
|
|
{
|
|
@@ -857,30 +883,14 @@
|
|
while (pst != NULL)
|
|
{
|
|
PScore_Type *pnext = pst->next;
|
|
- PScore_Regexp_Type *r = pst->pregexp_list;
|
|
|
|
- while (r != NULL)
|
|
- {
|
|
- PScore_Regexp_Type *rnext = r->next;
|
|
-
|
|
- if ((r->flags & USE_INTEGER) == 0)
|
|
- slrn_free ((char *) r->ireg.regexp_str);
|
|
- SLFREE (r);
|
|
- r = rnext;
|
|
- }
|
|
+ free_psrt (pst->pregexp_list);
|
|
slrn_free ((char *) pst->description);
|
|
SLFREE (pst);
|
|
+
|
|
pst = pnext;
|
|
}
|
|
|
|
- while (Scorefile_Names != NULL)
|
|
- {
|
|
- Scorefile_Name_Type *next = Scorefile_Names->next;
|
|
- slrn_free ((char *) Scorefile_Names->filename);
|
|
- slrn_free ((char *) Scorefile_Names);
|
|
- Scorefile_Names = next;
|
|
- }
|
|
-
|
|
SLFREE (Group_Score_Root);
|
|
Group_Score_Root = gnext;
|
|
}
|
|
@@ -1177,7 +1187,7 @@
|
|
ret = add_group_regexp (psrt, lp + 5, lp, SCORE_BYTES, not_flag);
|
|
else if (!slrn_case_strncmp (lp, (unsigned char *)"Message-Id:", 11))
|
|
ret = add_group_regexp (psrt, lp + 10, lp, SCORE_MESSAGE_ID, not_flag);
|
|
- else if (!slrn_case_strncmp (lp, (unsigned char *)"{:", 1))
|
|
+ else if (!slrn_case_strncmp (lp, (unsigned char *)"{:", 2))
|
|
{
|
|
if (lp[2] ==':')
|
|
{
|
|
@@ -1191,6 +1201,7 @@
|
|
}
|
|
else if (!slrn_case_strncmp (lp, (unsigned char *)"}", 1))
|
|
{
|
|
+ SLFREE (psrt);
|
|
if (sub_psrt != NULL)
|
|
return 0;
|
|
else
|
|
@@ -1205,6 +1216,7 @@
|
|
while (*lpp && (*lpp != ':')) lpp++;
|
|
if (*lpp != ':')
|
|
{
|
|
+ SLFREE (psrt);
|
|
score_error (_("Missing COLON."), line, *linenum, file);
|
|
return -1;
|
|
}
|
|
@@ -1298,6 +1310,13 @@
|
|
free_group_scores ();
|
|
}
|
|
free_group_chain ();
|
|
+ while (Scorefile_Names != NULL)
|
|
+ {
|
|
+ Scorefile_Name_Type *next = Scorefile_Names->next;
|
|
+ slrn_free ((char *) Scorefile_Names->filename);
|
|
+ slrn_free ((char *) Scorefile_Names);
|
|
+ Scorefile_Names = next;
|
|
+ }
|
|
|
|
sc.today = get_today ();
|
|
sc.score = 0;
|