Skip to content

Commit 7db41e4

Browse files
Security: Replace unsafe eval() in MATLAB parsers with safe numeric parsing (Issue #245)
1 parent 7b7086d commit 7db41e4

4 files changed

Lines changed: 15 additions & 4 deletions

File tree

concore_default_maxtime.m

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,10 @@ 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+
concore.maxtime = sscanf(clean_str, '%f');
710
fclose(maxfile);
811
catch exc
912
concore.maxtime = default;

concore_initval.m

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
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+
result = sscanf(clean_str, '%f').';
47
concore.simtime = result(1);
58
result = result(2:length(result));
69
end

concore_iport.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: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,10 @@
2525
ins = inistr;
2626
end
2727
concore.s = strcat(concore.s, ins);
28-
result = eval(ins);
28+
% Safe numeric parsing (replaces unsafe eval)
29+
clean_str = strtrim(ins);
30+
clean_str = regexprep(clean_str, '[\[\]]', '');
31+
result = sscanf(clean_str, '%f').';
2932
concore.simtime = max(concore.simtime,result(1));
3033
result = result(2:length(result));
3134
end

0 commit comments

Comments
 (0)