summaryrefslogtreecommitdiff
path: root/Build/source/texk/chktex/chktex-src/Utility.c
diff options
context:
space:
mode:
authorAkira Kakuto <kakuto@fuk.kindai.ac.jp>2016-09-15 23:02:10 +0000
committerAkira Kakuto <kakuto@fuk.kindai.ac.jp>2016-09-15 23:02:10 +0000
commita281920f9c8353be9c15bbbe556e3417a83c56fb (patch)
tree02926ba0b82b7cd90e2de84537be0b91c30d3c72 /Build/source/texk/chktex/chktex-src/Utility.c
parent1f21fda4113ec399917b4848eb29e32e89db9659 (diff)
ChkTeX 1.7.6
git-svn-id: svn://tug.org/texlive/trunk@42080 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/texk/chktex/chktex-src/Utility.c')
-rw-r--r--Build/source/texk/chktex/chktex-src/Utility.c43
1 files changed, 32 insertions, 11 deletions
diff --git a/Build/source/texk/chktex/chktex-src/Utility.c b/Build/source/texk/chktex/chktex-src/Utility.c
index 0f7c6c073df..6f05e98f617 100644
--- a/Build/source/texk/chktex/chktex-src/Utility.c
+++ b/Build/source/texk/chktex/chktex-src/Utility.c
@@ -727,6 +727,7 @@ char *FGetsStk(char *Dest, unsigned long len, struct Stack *stack)
static short HasSeenLong = 0;
struct FileNode *fn;
char *Retval = NULL;
+ size_t Retlen = 0;
if ((fn = StkTop(stack)))
{
@@ -734,12 +735,14 @@ char *FGetsStk(char *Dest, unsigned long len, struct Stack *stack)
{
Retval = fgets(Dest, (int)len, fn->fh);
if (Retval) {
- if (Retval[strlen(Retval)-1] == '\n')
+ Retlen = strlen(Retval);
+
+ if (Retval[Retlen-1] == '\n' || Retlen < len-1)
fn->Line++;
/* We only want the long lines warning once per file */
else if (!HasSeenLong)
{
- PrintPrgErr(pmLongLines, BUFSIZ);
+ PrintPrgErr(pmLongLines, len-2);
HasSeenLong = 1;
}
break;
@@ -833,15 +836,29 @@ struct ErrInfo *PushErr(const char *Data, const unsigned long Line,
{
if ((ci->Data = strdup(Data)))
{
- ci->File = CurStkName(&InputStack);
- ci->Line = Line;
- ci->ErrLen = ErrLen;
- ci->Column = Column;
- ci->LineBuf = LineCpy;
- ci->Flags = efNone;
-
- if (StkPush(ci, Stk))
- return (ci);
+ if ((ci->File = strdup(CurStkName(&InputStack))))
+ {
+ if ((ci->LineBuf = strdup(LineCpy)))
+ {
+ ci->Line = Line;
+ ci->ErrLen = ErrLen;
+ ci->Column = Column;
+ ci->Flags = efNone;
+
+ if (StkPush(ci, Stk))
+ return (ci);
+
+ free(ci->LineBuf);
+ }
+ else
+ PrintPrgErr(pmStrDupErr);
+
+ free(ci->File);
+ }
+ else
+ PrintPrgErr(pmStrDupErr);
+
+ free(ci->Data);
}
else
PrintPrgErr(pmStrDupErr);
@@ -906,6 +923,10 @@ void FreeErrInfo(struct ErrInfo *ei)
{
if (ei->Data)
free(ei->Data);
+ if (ei->File)
+ free(ei->File);
+ if (ei->LineBuf)
+ free(ei->LineBuf);
free(ei);
}