Skip to content

Commit 32248ee

Browse files
authored
Merge pull request #259 from GaneshPatil7517/fix/issue-245-remove-eval-matlab
Security: Replace unsafe eval() with safe numeric parsing in core MATLAB library files (Issue #245)
2 parents 312f745 + 764bc1a commit 32248ee

5 files changed

Lines changed: 54 additions & 8 deletions

File tree

concore_default_maxtime.m

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,17 @@ function concore_default_maxtime(default)
33
try
44
maxfile = fopen(strcat(concore.inpath,'1/concore.maxtime'));
55
instr = fscanf(maxfile,'%c');
6-
concore.maxtime = eval(instr);
6+
% Safe numeric parsing (replaces unsafe eval)
7+
clean_str = strtrim(instr);
8+
clean_str = regexprep(clean_str, '[\[\]]', '');
9+
% Normalize commas to whitespace so sscanf can parse all tokens
10+
clean_str = strrep(clean_str, ',', ' ');
11+
parsed_values = sscanf(clean_str, '%f');
12+
if numel(parsed_values) == 1
13+
concore.maxtime = parsed_values;
14+
else
15+
concore.maxtime = default;
16+
end
717
fclose(maxfile);
818
catch exc
919
concore.maxtime = default;

concore_initval.m

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,20 @@
11
function [result] = concore_initval(simtime_val)
22
global concore;
3-
result = eval(simtime_val);
3+
% Safe numeric parsing (replaces unsafe eval)
4+
clean_str = strtrim(simtime_val);
5+
clean_str = regexprep(clean_str, '[\[\]]', '');
6+
clean_str = strrep(clean_str, ',', ' ');
7+
result = sscanf(clean_str, '%f').';
8+
% Guard against empty or invalid numeric input
9+
if isempty(result)
10+
concore.simtime = 0;
11+
result = [];
12+
return;
13+
end
414
concore.simtime = result(1);
5-
result = result(2:length(result));
15+
if numel(result) >= 2
16+
result = result(2:end);
17+
else
18+
result = [];
19+
end
620
end

concore_iport.m

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,13 @@
77
if isequal(s(i:i+length(target)-1),target)
88
for j = i+length(target):length(s)
99
if isequal(s(j),',')||isequal(s(j),'}')
10-
result = eval(s(i+length(target):j-1));
10+
% Safe numeric parsing (replaces unsafe eval)
11+
port_str = strtrim(s(i+length(target):j-1));
12+
result = sscanf(port_str, '%f');
13+
if isempty(result)
14+
% Keep the initialized default value (0) if parsing fails
15+
result = 0;
16+
end
1117
return
1218
end
1319
end

concore_oport.m

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@
77
if isequal(s(i:i+length(target)-1),target)
88
for j = i+length(target):length(s)
99
if isequal(s(j),',')||isequal(s(j),'}')
10-
result = eval(s(i+length(target):j-1));
10+
% Safe numeric parsing (replaces unsafe eval)
11+
port_str = strtrim(s(i+length(target):j-1));
12+
result = sscanf(port_str, '%f');
1113
return
1214
end
1315
end

concore_read.m

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,21 @@
2525
ins = inistr;
2626
end
2727
concore.s = strcat(concore.s, ins);
28-
result = eval(ins);
29-
concore.simtime = max(concore.simtime,result(1));
30-
result = result(2:length(result));
28+
% Safe numeric parsing (replaces unsafe eval)
29+
clean_str = strtrim(ins);
30+
clean_str = regexprep(clean_str, '[\[\]]', '');
31+
% Normalize comma delimiters to whitespace so sscanf parses all values
32+
clean_str = strrep(clean_str, ',', ' ');
33+
result = sscanf(clean_str, '%f').';
34+
% Guard against empty parse result to avoid indexing errors
35+
if isempty(result)
36+
result = [];
37+
return;
38+
end
39+
concore.simtime = max(concore.simtime, result(1));
40+
if numel(result) > 1
41+
result = result(2:end);
42+
else
43+
result = [];
44+
end
3145
end

0 commit comments

Comments
 (0)