Skip to content

Commit 3cd6b6c

Browse files
committed
Fix an issue with the previous commit.
1 parent bbb4643 commit 3cd6b6c

File tree

2 files changed

+15
-8
lines changed

2 files changed

+15
-8
lines changed

changes.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,7 @@ Coverity Scan defects targeted deliberately:
248248
- CID 1373651: Logically dead code
249249
- CID 1373652: Dereference before null check
250250
- CID 1373653: Write to pointer after free
251+
- CID 1373654: Use after free
251252

252253
Coverity Scan defects eliminated in passing:
253254

source/parser/parser_expressions.cpp

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3620,6 +3620,7 @@ GenericSpline *Parser::Parse_Spline()
36203620
{
36213621
GenericSpline * Old = NULL;
36223622
GenericSpline * New = NULL;
3623+
bool keepOld = false;
36233624
int i = 0;
36243625
EXPRESS Express;
36253626
int Terms, MaxTerms;
@@ -3635,6 +3636,7 @@ GenericSpline *Parser::Parse_Spline()
36353636
Old = reinterpret_cast<GenericSpline *>(Token.Data);
36363637
i = Old->SplineEntries.size();
36373638
MaxTerms = Old->Terms;
3639+
keepOld = true;
36383640
EXIT
36393641
END_CASE
36403642

@@ -3647,43 +3649,47 @@ GenericSpline *Parser::Parse_Spline()
36473649
/* Determine kind of spline */
36483650
EXPECT
36493651
CASE(LINEAR_SPLINE_TOKEN)
3650-
if (New)
3651-
delete New;
36523652
if (Old)
36533653
New = new LinearSpline(*Old);
36543654
else
36553655
New = new LinearSpline();
3656+
if (Old && !keepOld)
3657+
delete Old;
36563658
Old = New;
3659+
keepOld = false;
36573660
END_CASE
36583661

36593662
CASE(QUADRATIC_SPLINE_TOKEN)
3660-
if (New)
3661-
delete New;
36623663
if (Old)
36633664
New = new QuadraticSpline(*Old);
36643665
else
36653666
New = new QuadraticSpline();
3667+
if (Old && !keepOld)
3668+
delete Old;
36663669
Old = New;
3670+
keepOld = false;
36673671
END_CASE
36683672

36693673
CASE(CUBIC_SPLINE_TOKEN)
3670-
if (New)
3671-
delete New;
36723674
if (Old)
36733675
New = new CatmullRomSpline(*Old);
36743676
else
36753677
New = new CatmullRomSpline();
3678+
if (Old && !keepOld)
3679+
delete Old;
36763680
Old = New;
3681+
keepOld = false;
36773682
END_CASE
36783683

36793684
CASE(NATURAL_SPLINE_TOKEN)
3680-
if (New)
3681-
delete New;
36823685
if (Old)
36833686
New = new NaturalSpline(*Old);
36843687
else
36853688
New = new NaturalSpline();
3689+
if (Old && !keepOld)
3690+
delete Old;
36863691
Old = New;
3692+
keepOld = false;
36873693
END_CASE
36883694

36893695
OTHERWISE

0 commit comments

Comments
 (0)