0023561: stepwrite and brepiges dont work with big path (over 150 simbols) of writing...
authorabv <abv@opencascade.com>
Fri, 7 Dec 2012 09:50:06 +0000 (13:50 +0400)
committerabv <abv@opencascade.com>
Fri, 7 Dec 2012 09:50:06 +0000 (13:50 +0400)
DRAW commands stepwrite and brepiges modified to never ask for interactive input of file name or write mode; the behavior is completely defined by input arguments. String buffers causing access violation due to overflow are eliminated.

Test case bugs xde bug23561 added for this issue; TODO 23651 in related test cases removed.

Compiler warning (unrelated) is fixed in QABugs_11.cxx

15 files changed:
src/QABugs/QABugs_11.cxx
src/XSDRAWIGES/XSDRAWIGES.cxx
src/XSDRAWSTEP/XSDRAWSTEP.cxx
tests/bugs/iges/buc60591_1
tests/bugs/iges/buc60591_2
tests/bugs/iges/buc60591_3
tests/bugs/iges/buc60591_4
tests/bugs/step/buc60948
tests/bugs/step/bug23379
tests/bugs/step/bug46
tests/bugs/step/bug51
tests/bugs/xde/bug184
tests/bugs/xde/bug23561 [new file with mode: 0755]
tests/bugs/xde/bug314
tests/bugs/xde/bug321

index 947ef99..abfd74b 100755 (executable)
@@ -5181,10 +5181,10 @@ Standard_Integer OCC22744 (Draw_Interpretor& di, Standard_Integer argc, const ch
   
   TCollection_ExtendedString anExtString;
   
-  Standard_ExtCharacter aNonAsciiChar = 0xff00;
+  Standard_ExtCharacter aNonAsciiChar = 0x0f00;
   anExtString.Insert(1, aNonAsciiChar);
 
-  di << "Is ASCII: " << ( anExtString.IsAscii() ? "true" : "false" ) << "\n";
+  di << "Is ASCII: " << ( anExtString.IsAscii() ? "true : Error" : "false : OK" ) << "\n";
   NCollection_DataMap<TCollection_ExtendedString, Standard_Integer> aMap;
   aMap.Bind(anExtString, 0);
   
index 4da5a13..56a29a8 100755 (executable)
@@ -431,7 +431,7 @@ static Standard_Integer brepiges (Draw_Interpretor& di, Standard_Integer n, cons
 
 //  Mode d emploi (K4B ->) : brepiges shape [+shape][ +shape] nomfic
 //   c a d tant qu il y a des + on ajoute ce qui suit
-  const char* ficnom = NULL;
+  const char* nomfic;
   Standard_Integer npris = 0;
 
   Handle(Draw_ProgressIndicator) progress = new Draw_ProgressIndicator ( di, 1 );
@@ -442,7 +442,7 @@ static Standard_Integer brepiges (Draw_Interpretor& di, Standard_Integer n, cons
   for ( Standard_Integer i = 1; i < n; i++) {
     const char* nomvar = a[i];
     if (a[i][0] == '+') nomvar = &(a[i])[1];
-    else if (i > 1)  {  ficnom = a[i];  break;  }
+    else if (i > 1)  {  nomfic = a[i];  break;  }
     TopoDS_Shape Shape = DBRep::Get(nomvar);
     if      (ICW.AddShape (Shape)) npris ++;
     else if (ICW.AddGeom (DrawTrSurf::GetCurve   (nomvar)) ) npris ++;
@@ -459,40 +459,16 @@ static Standard_Integer brepiges (Draw_Interpretor& di, Standard_Integer n, cons
   progress->Show();
 
   di<<npris<<" Shapes written, giving "<<XSDRAW::Model()->NbEntities()<<" Entities"<<"\n";
-  di<<" Now, to write a file, command : writeall filename"<<"\n";
 
-  // creation du fichier de sortie
-
-  char nomfic[100] ;
-  Standard_Integer modepri = 0;
-  if (ficnom) {
-    modepri = 2;
-    strcpy (nomfic,ficnom);
-  }
-
-  if (!modepri) {
-    cout<<" Mode (0 End, 1 ->screen, 2 file) :"<<flush;
-    modepri = -1;
-    cin >> modepri; di << "Output mode " << modepri << "\n";
-  }
-
-  if (modepri == 0) return 0;
-  // Ecran
-  else if (modepri == 1) {
-    di << " Screen Output" << "\n";
-    //ICW.Write (cout);
-    Standard_SStream aSStream;
-    ICW.Write (aSStream);
-    di << aSStream;
+  if ( ! nomfic ) // delayed write
+  {
+    di<<" Now, to write a file, command : writeall filename"<<"\n";
+    return 0;
   }
 
-  //  ....                      WRITE (Fichier)                        ....
-  else if (modepri == 2) {
-    if (!ficnom)  { cout << " Output file name :" << flush;  cin  >> nomfic; }
-    di << " Output on file : " << nomfic << "\n";
-    if (ICW.Write(nomfic)) di<<" Write OK"<<"\n";
-    else                   di<<" Write KO"<<"\n";
-  }
+  // write file
+  if (! ICW.Write(nomfic)) di<<" Error: could not write file " << nomfic;
+  else                     di<<" File " << nomfic << " written";
 
   progress->EndScope();
   progress->Show();
index 682a973..7999b98 100755 (executable)
@@ -435,7 +435,14 @@ static Standard_Integer stepwrite (Draw_Interpretor& di, Standard_Integer argc,
   sw.WS()->TransferWriter()->FinderProcess()->SetProgress(progress);
 
   Standard_Integer stat = sw.Transfer (shape,mode);
-  di<<"execution status : "<<stat<<"\n";
+  if (stat == IFSelect_RetDone)
+  {
+    di << "Translation: OK\n";
+  } 
+  else 
+  {
+    di << "Error: translation failed, status = " << stat << "\n";
+  }
 
   sw.WS()->TransferWriter()->FinderProcess()->SetProgress(0);
   progress->EndScope();
@@ -450,28 +457,18 @@ static Standard_Integer stepwrite (Draw_Interpretor& di, Standard_Integer argc,
   if (nbapres <= nbavant) di<<"Beware : No data produced by this transfer"<<"\n";
   if (nbapres == 0) { di<<"No data to write"<<"\n"; return 0; }
 
-  char nomfic[150] ;
-  Standard_Integer modepri = 1;
-
   if (argc <= 3) {
-    cout<<" Mode (0 end, 1 file) :"<<flush;
-    cin >> modepri; di << "Output mode " << modepri << "\n";
-  }
-  else modepri = 2;
-
-  if      (modepri == 0) return 0;
-  else if (modepri == 1) {
-    cout << " Output file name :" << flush;  cin  >> nomfic;
+    di<<" Now, to write a file, command : writeall filename"<<"\n";
+    return 0;
   }
-  else if (modepri == 2) strcpy (nomfic,argv[3]);
 
-  di << " Output on file : " << nomfic << "\n";
+  const char *nomfic = argv[3];
   stat = sw.Write(nomfic);
   switch (stat) {
-    case IFSelect_RetVoid : di<<"No file written"<<"\n"; break;
+  case IFSelect_RetVoid : di<<"Error: No file written"<<"\n"; break;
     case IFSelect_RetDone : di<<"File "<<nomfic<<" written"<<"\n"; break;
     case IFSelect_RetStop : di<<"Error on writing file: no space on disk or destination is write protected"<<"\n"; break;
-    default : di<<"File "<<nomfic<<" written with fail messages"<<"\n"; break;
+    default : di<<"Error: File "<<nomfic<<" written with fail messages"<<"\n"; break;
   }
 
   progress->EndScope();
index 9fe2524..47f52df 100644 (file)
@@ -1,12 +1,4 @@
 set os $env(os_type)
-if { [string compare $os "windows"] == 0 } {
-#     puts "TODO OCC23561 $os: child process exited abnormally"
-} else {
-    puts "TODO OCC23561 ALL: An exception was caught"
-    puts "TODO OCC23561 ALL: Tcl Exception:"
-    puts "TODO OCC23561 ALL: \\*\\* Exception \\*\\*.*"
-}
-puts "TODO OCC23561 ALL: TEST INCOMPLETE"
 
 puts "=========="
 puts "BUC60591"
index fafb47d..05aedb1 100644 (file)
@@ -1,12 +1,4 @@
 set os $env(os_type)
-if { [string compare $os "windows"] == 0 } {
-#     puts "TODO OCC23561 $os: child process exited abnormally"
-} else {
-    puts "TODO OCC23561 ALL: An exception was caught"
-    puts "TODO OCC23561 ALL: Tcl Exception:"
-    puts "TODO OCC23561 ALL: \\*\\* Exception \\*\\*.*"
-}
-puts "TODO OCC23561 ALL: TEST INCOMPLETE"
 
 puts "=================================="
 puts "BUC60591"
index 3ad6335..5afef3b 100644 (file)
@@ -1,12 +1,4 @@
 set os $env(os_type)
-if { [string compare $os "windows"] == 0 } {
-#     puts "TODO OCC23561 $os: child process exited abnormally"
-} else {
-    puts "TODO OCC23561 ALL: An exception was caught"
-    puts "TODO OCC23561 ALL: Tcl Exception:"
-    puts "TODO OCC23561 ALL: \\*\\* Exception \\*\\*.*"
-}
-puts "TODO OCC23561 ALL: TEST INCOMPLETE"
 
 puts "=================================="
 puts "BUC60591"
index c9f0af8..6860b88 100644 (file)
@@ -1,12 +1,4 @@
 set os $env(os_type)
-if { [string compare $os "windows"] == 0 } {
-#     puts "TODO OCC23561 $os: child process exited abnormally"
-} else {
-    puts "TODO OCC23561 ALL: An exception was caught"
-    puts "TODO OCC23561 ALL: Tcl Exception:"
-    puts "TODO OCC23561 ALL: \\*\\* Exception \\*\\*.*"
-}
-puts "TODO OCC23561 ALL: TEST INCOMPLETE"
 
 puts "BUC60591"
 puts ""
index 3292aa9..cb02f49 100644 (file)
@@ -1,12 +1,4 @@
 set os $env(os_type)
-if { [string compare $os "windows"] == 0 } {
-#     puts "TODO OCC23561 $os: child process exited abnormally"
-} else {
-    puts "TODO OCC23561 ALL: An exception was caught"
-    puts "TODO OCC23561 ALL: Tcl Exception:"
-    puts "TODO OCC23561 ALL: \\*\\* Exception \\*\\*.*"
-}
-puts "TODO OCC23561 ALL: TEST INCOMPLETE"
 
 puts "========================"
 puts "BUC60948"
index 84eb7e8..96ed4c7 100755 (executable)
@@ -1,12 +1,4 @@
 set os $env(os_type)
-if { [string compare $os "windows"] == 0 } {
-#     puts "TODO OCC23561 $os: child process exited abnormally"
-} else {
-    puts "TODO OCC23561 ALL: An exception was caught"
-    puts "TODO OCC23561 ALL: Tcl Exception:"
-    puts "TODO OCC23561 ALL: \\*\\* Exception \\*\\*.*"
-}
-puts "TODO OCC23561 ALL: TEST INCOMPLETE"
 
 puts "================"
 puts "OCC23379"
index 33fbbaa..d1cb81b 100755 (executable)
@@ -1,12 +1,4 @@
 set os $env(os_type)
-if { [string compare $os "windows"] == 0 } {
-#     puts "TODO OCC23561 $os: child process exited abnormally"
-} else {
-    puts "TODO OCC23561 ALL: An exception was caught"
-    puts "TODO OCC23561 ALL: Tcl Exception:"
-    puts "TODO OCC23561 ALL: \\*\\* Exception \\*\\*.*"
-}
-puts "TODO OCC23561 ALL: TEST INCOMPLETE"
 
 puts "================"
 puts "OCC46"
index da76717..00f75ea 100755 (executable)
@@ -1,12 +1,4 @@
 set os $env(os_type)
-if { [string compare $os "windows"] == 0 } {
-#     puts "TODO OCC23561 $os: child process exited abnormally"
-} else {
-    puts "TODO OCC23561 ALL: An exception was caught"
-    puts "TODO OCC23561 ALL: Tcl Exception:"
-    puts "TODO OCC23561 ALL: \\*\\* Exception \\*\\*.*"
-}
-puts "TODO OCC23561 ALL: TEST INCOMPLETE"
 
 puts "================"
 puts "OCC51"
index f4bc056..15e1226 100755 (executable)
@@ -1,12 +1,4 @@
 set os $env(os_type)
-if { [string compare $os "windows"] == 0 } {
-#     puts "TODO OCC23561 $os: child process exited abnormally"
-} else {
-    puts "TODO OCC23561 ALL: An exception was caught"
-    puts "TODO OCC23561 ALL: Tcl Exception:"
-    puts "TODO OCC23561 ALL: \\*\\* Exception \\*\\*.*"
-}
-puts "TODO OCC23561 ALL: TEST INCOMPLETE"
 
 puts "========"
 puts "OCC184"
diff --git a/tests/bugs/xde/bug23561 b/tests/bugs/xde/bug23561
new file mode 100755 (executable)
index 0000000..72af506
--- /dev/null
@@ -0,0 +1,18 @@
+# Test writing IGES or STEP file with long path
+
+puts "bug23561"
+
+pload MODELING
+
+# make path to log directory to be at least 200 symbols, 
+# by adding ../xde/ as many times as needed
+set path [file normalize $imagedir]
+set last [file tail $path]
+while { [string length $path] < 200 } {
+    set path "$path/../$last"
+}
+
+# write simple box
+box b 10 10 10
+brepiges b "$path/${casename}.igs"
+stepwrite a b "$path/${casename}.stp"
index 8c20629..055bd9f 100755 (executable)
@@ -1,12 +1,4 @@
 set os $env(os_type)
-if { [string compare $os "windows"] == 0 } {
-#     puts "TODO OCC23561 $os: child process exited abnormally"
-} else {
-    puts "TODO OCC23561 ALL: An exception was caught"
-    puts "TODO OCC23561 ALL: Tcl Exception:"
-    puts "TODO OCC23561 ALL: \\*\\* Exception \\*\\*.*"
-}
-puts "TODO OCC23561 ALL: TEST INCOMPLETE"
 
 puts "========"
 puts "OCC314"
index d91080a..1c2c204 100755 (executable)
@@ -1,12 +1,4 @@
 set os $env(os_type)
-if { [string compare $os "windows"] == 0 } {
-#     puts "TODO OCC23561 $os: child process exited abnormally"
-} else {
-    puts "TODO OCC23561 ALL: An exception was caught"
-    puts "TODO OCC23561 ALL: Tcl Exception:"
-    puts "TODO OCC23561 ALL: \\*\\* Exception \\*\\*.*"
-}
-puts "TODO OCC23561 ALL: TEST INCOMPLETE"
 
 puts "========"
 puts "OCC321"