safeguard against crash if instance lines are incomplete
This commit is contained in:
parent
60a3298c2e
commit
b7b4e3badb
|
|
@ -7466,10 +7466,13 @@ static struct card *pspice_compat(struct card *oldcard)
|
||||||
char *ntok = nexttok(cut_line);
|
char *ntok = nexttok(cut_line);
|
||||||
ntok = nexttok(ntok);
|
ntok = nexttok(ntok);
|
||||||
ntok = nexttok(ntok);
|
ntok = nexttok(ntok);
|
||||||
if (!ntok){
|
if (!ntok || *ntok == '\0'){
|
||||||
fprintf(stderr, "Error: Missing token in line %d:\n%s\n", card->linenum, cut_line);
|
fprintf(stderr, "Error: Missing token in line %d:\n%s\n", card->linenum, cut_line);
|
||||||
fprintf(stderr, " Please correct the input file\n");
|
fprintf(stderr, " Please correct the input file\n");
|
||||||
controlled_exit(1);
|
if (ft_stricterror)
|
||||||
|
controlled_exit(1);
|
||||||
|
else
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
char *tctok = search_plain_identifier(ntok, "tc");
|
char *tctok = search_plain_identifier(ntok, "tc");
|
||||||
if (tctok) {
|
if (tctok) {
|
||||||
|
|
@ -7607,14 +7610,19 @@ static struct card *pspice_compat(struct card *oldcard)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (*cut_line == 'q') {
|
if (*cut_line == 'q') {
|
||||||
|
/* According to PSPICE Reference Guide the fourth (substrate) node
|
||||||
|
has to be put into [] if it is not just a number */
|
||||||
cut_line = nexttok(cut_line); //.model
|
cut_line = nexttok(cut_line); //.model
|
||||||
cut_line = nexttok(cut_line); // node1
|
cut_line = nexttok(cut_line); // node1
|
||||||
cut_line = nexttok(cut_line); // node2
|
cut_line = nexttok(cut_line); // node2
|
||||||
cut_line = nexttok(cut_line); // node3
|
cut_line = nexttok(cut_line); // node3
|
||||||
if (!cut_line) {
|
if (!cut_line || *cut_line == '\0') {
|
||||||
fprintf(stderr, "Line no. %d, %s missing tokens\n",
|
fprintf(stderr, "Line no. %d, %s, missing tokens\n",
|
||||||
card->linenum_orig, card->line);
|
card->linenum_orig, card->line);
|
||||||
continue;
|
if (ft_stricterror)
|
||||||
|
controlled_exit(1);
|
||||||
|
else
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
if (*cut_line == '[') { // node4 not a number
|
if (*cut_line == '[') { // node4 not a number
|
||||||
*cut_line = ' ';
|
*cut_line = ' ';
|
||||||
|
|
@ -7631,7 +7639,7 @@ static struct card *pspice_compat(struct card *oldcard)
|
||||||
if (is_node4)
|
if (is_node4)
|
||||||
cut_line = nexttok(cut_line); // model name
|
cut_line = nexttok(cut_line); // model name
|
||||||
}
|
}
|
||||||
if (*cut_line &&
|
if (cut_line && *cut_line &&
|
||||||
atof(cut_line) > 0.0) { // size of area is a real number
|
atof(cut_line) > 0.0) { // size of area is a real number
|
||||||
char *tmpstr1 = copy_substring(card->line, cut_line);
|
char *tmpstr1 = copy_substring(card->line, cut_line);
|
||||||
char *tmpstr2 = tprintf("%s area=%s", tmpstr1, cut_line);
|
char *tmpstr2 = tprintf("%s area=%s", tmpstr1, cut_line);
|
||||||
|
|
@ -7639,7 +7647,7 @@ static struct card *pspice_compat(struct card *oldcard)
|
||||||
tfree(card->line);
|
tfree(card->line);
|
||||||
card->line = tmpstr2;
|
card->line = tmpstr2;
|
||||||
}
|
}
|
||||||
else if (*cut_line &&
|
else if (cut_line && *cut_line &&
|
||||||
*(skip_ws(cut_line)) ==
|
*(skip_ws(cut_line)) ==
|
||||||
'{') { // size of area is parametrized inside {}
|
'{') { // size of area is parametrized inside {}
|
||||||
char *tmpstr1 = copy_substring(card->line, cut_line);
|
char *tmpstr1 = copy_substring(card->line, cut_line);
|
||||||
|
|
@ -7656,13 +7664,16 @@ static struct card *pspice_compat(struct card *oldcard)
|
||||||
cut_line = nexttok(cut_line); //.model
|
cut_line = nexttok(cut_line); //.model
|
||||||
cut_line = nexttok(cut_line); // node1
|
cut_line = nexttok(cut_line); // node1
|
||||||
cut_line = nexttok(cut_line); // node2
|
cut_line = nexttok(cut_line); // node2
|
||||||
if (!cut_line) {
|
if (!cut_line || *cut_line == '\0') {
|
||||||
fprintf(stderr, "Line no. %d, %s missing tokens\n",
|
fprintf(stderr, "Line no. %d, %s, missing tokens\n",
|
||||||
card->linenum_orig, card->line);
|
card->linenum_orig, card->line);
|
||||||
continue;
|
if (ft_stricterror)
|
||||||
|
controlled_exit(1);
|
||||||
|
else
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
cut_line = nexttok(cut_line); // model name
|
cut_line = nexttok(cut_line); // model name
|
||||||
if (*cut_line && atof(cut_line) > 0.0) { // size of area
|
if (cut_line && *cut_line && atof(cut_line) > 0.0) { // size of area
|
||||||
char *tmpstr1 = copy_substring(card->line, cut_line);
|
char *tmpstr1 = copy_substring(card->line, cut_line);
|
||||||
char *tmpstr2 = tprintf("%s area=%s", tmpstr1, cut_line);
|
char *tmpstr2 = tprintf("%s area=%s", tmpstr1, cut_line);
|
||||||
tfree(tmpstr1);
|
tfree(tmpstr1);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue