0030899: Data Exchange, RWObj_Reader - reading multiline file with more than one...
authorkgv <kgv@opencascade.com>
Wed, 14 Aug 2019 12:06:55 +0000 (15:06 +0300)
committerbugmaster <bugmaster@opencascade.com>
Fri, 16 Aug 2019 09:16:43 +0000 (12:16 +0300)
Fix misprint in condition.

src/RWObj/RWObj_Reader.cxx
tests/de_mesh/obj_read/multiline [new file with mode: 0644]

index 0d9b74a..9471491 100644 (file)
@@ -110,7 +110,7 @@ namespace
               // multi-line syntax
               aLine[aTailIter] = ' ';
               const ptrdiff_t aFullLen = aLine + aTailIter + 1 - &this->Line.First();
-              if (LineBuffLen < aNbRead + MaxLineLen)
+              if (LineBuffLen < aFullLen + MaxLineLen)
               {
                 LineBuffLen += MaxLineLen;
                 this->Line.Resize (0, LineBuffLen - 1, true);
diff --git a/tests/de_mesh/obj_read/multiline b/tests/de_mesh/obj_read/multiline
new file mode 100644 (file)
index 0000000..d08d5cb
--- /dev/null
@@ -0,0 +1,42 @@
+puts "========"
+puts "0030899: Data Exchange, RWObj_Reader - reading multiline file with more than one line separator leads to memory corruption"
+puts "========"
+
+# define a long line
+set aDummy "dummy"
+for {set i 0} {$i < 49} {incr i} { set aDummy "${aDummy}dummy" }
+
+set ml_obj {
+v 0 0 0
+v 2 0 0
+v 2 1 0
+v 1 2 0
+v 0 1 0
+v 0 0 2
+v 2 0 2
+v 2 1 2
+v 1 2 2
+v 0 1 2\
+__DUMMY__\
+__DUMMY__
+f 5 4 3 2 1
+f 7 8 \
+__SPLIT__ 9 10 6
+f 10 9 4 5
+f 9 8 3 4
+f 6 10 5 1
+f 2 3 8 7
+f 1 2 7 6}
+
+regsub -all {__DUMMY__} $ml_obj "\\\n${aDummy}" ml_obj
+regsub -all {__SPLIT__} $ml_obj "\\\n" ml_obj
+
+set fd [open ${imagedir}/${casename}.obj w]
+fconfigure $fd -translation lf
+puts $fd $ml_obj
+close $fd
+
+ReadObj D ${imagedir}/${casename}.obj
+XGetOneShape s D
+checknbshapes s -face 1 -compound 1
+checktrinfo s -tri 16 -nod 10