Skip to content

Commit 4151ed9

Browse files
committed
cdirect: finite check before allocation
1 parent ac9592b commit 4151ed9

1 file changed

Lines changed: 6 additions & 8 deletions

File tree

src/algs/cdirect/cdirect.c

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -194,16 +194,14 @@ static nlopt_result divide_rect(double *rdiv, params *p)
194194
rdiv[2] = p->age++;
195195
node = nlopt_rb_tree_resort(&p->rtree, node);
196196
for (k = 0; k <= 1; ++k) {
197+
if (!isfinite(fv[2*isort[i]+k]))
198+
return NLOPT_FAILURE;
197199
double *rnew;
198200
ALLOC_RECT(rnew, L);
199201
memcpy(rnew, rdiv, sizeof(double) * L);
200202
rnew[3 + isort[i]] += w[isort[i]] * (2*k-1);
201203
rnew[1] = fv[2*isort[i]+k];
202204
rnew[2] = p->age++;
203-
if (!isfinite(rnew[1])) {
204-
free(rnew);
205-
return NLOPT_FAILURE;
206-
}
207205
if (!nlopt_rb_tree_insert(&p->rtree, rnew)) {
208206
free(rnew);
209207
return NLOPT_OUT_OF_MEMORY;
@@ -237,10 +235,10 @@ static nlopt_result divide_rect(double *rdiv, params *p)
237235
rnew[3 + i] += w[i] * (2*k-1);
238236
FUNCTION_EVAL(rnew[1], rnew + 3, p, rnew);
239237
rnew[2] = p->age++;
240-
if (!isfinite(rnew[1])) {
241-
free(rnew);
242-
return NLOPT_FAILURE;
243-
}
238+
if (!isfinite(rnew[1])) {
239+
free(rnew);
240+
return NLOPT_FAILURE;
241+
}
244242
if (!nlopt_rb_tree_insert(&p->rtree, rnew)) {
245243
free(rnew);
246244
return NLOPT_OUT_OF_MEMORY;

0 commit comments

Comments
 (0)