Browse Source

Fix bug #680. Check that src/dest memcpy arguments are non-NULL.

pre-master-46
Brian Taylor 2 years ago
committed by Holger Vogt
parent
commit
3528156d14
  1. 5
      src/maths/ni/niiter.c
  2. 8
      src/spicelib/analysis/dctran.c
  3. 6
      src/spicelib/analysis/dctrcurv.c

5
src/maths/ni/niiter.c

@ -246,8 +246,9 @@ NIiter(CKTcircuit *ckt, int maxIter)
CKTnumStates the first time it is run */ CKTnumStates the first time it is run */
if (!OldCKTstate0) if (!OldCKTstate0)
OldCKTstate0 = TMALLOC(double, ckt->CKTnumStates + 1); OldCKTstate0 = TMALLOC(double, ckt->CKTnumStates + 1);
memcpy(OldCKTstate0, ckt->CKTstate0,
(size_t) ckt->CKTnumStates * sizeof(double));
if (ckt->CKTstate0)
memcpy(OldCKTstate0, ckt->CKTstate0,
(size_t) ckt->CKTnumStates * sizeof(double));
startTime = SPfrontEnd->IFseconds(); startTime = SPfrontEnd->IFseconds();
SMPsolve(ckt->CKTmatrix, ckt->CKTrhs, ckt->CKTrhsSpare); SMPsolve(ckt->CKTmatrix, ckt->CKTrhs, ckt->CKTrhsSpare);

8
src/spicelib/analysis/dctran.c

@ -341,8 +341,10 @@ DCtran(CKTcircuit *ckt,
ckt->CKTmode = (ckt->CKTmode&MODEUIC) | MODETRAN | MODEINITTRAN; ckt->CKTmode = (ckt->CKTmode&MODEUIC) | MODETRAN | MODEINITTRAN;
/* modeinittran set here */ /* modeinittran set here */
ckt->CKTag[0]=ckt->CKTag[1]=0; ckt->CKTag[0]=ckt->CKTag[1]=0;
memcpy(ckt->CKTstate1, ckt->CKTstate0,
(size_t) ckt->CKTnumStates * sizeof(double));
if (ckt->CKTstate1 && ckt->CKTstate0) {
memcpy(ckt->CKTstate1, ckt->CKTstate0,
(size_t) ckt->CKTnumStates * sizeof(double));
}
#ifdef WANT_SENSE2 #ifdef WANT_SENSE2
if(ckt->CKTsenInfo && (ckt->CKTsenInfo->SENmode & TRANSEN)){ if(ckt->CKTsenInfo && (ckt->CKTsenInfo->SENmode & TRANSEN)){
@ -790,7 +792,7 @@ resume:
ckt->CKTstat->STATtimePts ++; ckt->CKTstat->STATtimePts ++;
ckt->CKTmode = (ckt->CKTmode&MODEUIC)|MODETRAN | MODEINITPRED; ckt->CKTmode = (ckt->CKTmode&MODEUIC)|MODETRAN | MODEINITPRED;
if(firsttime) {
if(firsttime && ckt->CKTstate1 && ckt->CKTstate2 && ckt->CKTstate3) {
memcpy(ckt->CKTstate2, ckt->CKTstate1, memcpy(ckt->CKTstate2, ckt->CKTstate1,
(size_t) ckt->CKTnumStates * sizeof(double)); (size_t) ckt->CKTnumStates * sizeof(double));
memcpy(ckt->CKTstate3, ckt->CKTstate1, memcpy(ckt->CKTstate3, ckt->CKTstate1,

6
src/spicelib/analysis/dctrcurv.c

@ -456,8 +456,10 @@ DCtrCurv(CKTcircuit *ckt, int restart)
if (firstTime) { if (firstTime) {
firstTime = 0; firstTime = 0;
memcpy(ckt->CKTstate1, ckt->CKTstate0,
(size_t) ckt->CKTnumStates * sizeof(double));
if (ckt->CKTstate1 && ckt->CKTstate0) {
memcpy(ckt->CKTstate1, ckt->CKTstate0,
(size_t) ckt->CKTnumStates * sizeof(double));
}
} }
i = 0; i = 0;

Loading…
Cancel
Save