Standard_Real& theFVal) {
try {
const Standard_Real aPar = theX(1);
+ if (!CheckParameter(aPar))
+ return Standard_False;
gp_Pnt aP1, aP2;
gp_Pnt2d aP2d;
my3DCurve->D0(aPar, aP1);
math_Vector& theGrad) {
try {
const Standard_Real aPar = theX(1);
-
+ if (!CheckParameter(aPar))
+ return Standard_False;
gp_Pnt aP1, aP2;
gp_Vec aDC3D, aDSU, aDSV;
gp_Pnt2d aP2d;
}
//
private:
+
+ Standard_Boolean CheckParameter(const Standard_Real theParam)
+ {
+ if (theParam < my3DCurve->FirstParameter() ||
+ theParam > my3DCurve->LastParameter() ||
+ theParam < my2DCurve->FirstParameter() ||
+ theParam > my2DCurve->LastParameter() )
+ {
+ return Standard_False;
+ }
+ return Standard_True;
+ }
+
Handle(Geom_Curve) my3DCurve;
Handle(Geom2d_Curve) my2DCurve;
Handle(Geom_Surface) mySurf;
for(k = 1; k < j; k++)
sum -= a(i,k) * a(k,j);
a(i,j) = sum;
- if((dum = vv(i) * fabs(sum)) >= big) {
- big = dum;
- imax = i;
+ // Note that comparison is made so as to have imax updated even if argument is NAN, Inf or IND, see #25559
+ if((dum = vv(i) * fabs(sum)) < big)
+ {
+ continue;
}
+ big = dum;
+ imax = i;
}
if(j != imax) {
for(k = 1; k <= n; k++) {
--- /dev/null
+puts "============"
+puts "OCC25559"
+puts "============"
+puts ""
+######################################################
+# SIGSEGV in TKMath when computing max tolerance of curve on surface
+######################################################
+
+restore [locate_data_file bug25559_f.brep] f
+
+checkcurveonsurf f