@@ -132,12 +132,14 @@ func extractClass(mat *MatMatrix, r io.Reader, order binary.ByteOrder) (int, err
132
132
switch int (mat .Class ) {
133
133
case MxCellClass :
134
134
var content CellPrt
135
- var maxElements = mat .Dim .X
135
+ var maxElements = mat .Dim .Y
136
136
var noElements int
137
137
for {
138
138
if noElements >= maxElements {
139
139
break
140
140
}
141
+ // Alignment
142
+ readMatfBytes (r , order , 8 )
141
143
element , step , err := extractMatrix (r , order )
142
144
if err != nil {
143
145
return 0 , err
@@ -189,7 +191,7 @@ func extractClass(mat *MatMatrix, r io.Reader, order binary.ByteOrder) (int, err
189
191
if err != nil {
190
192
return 0 , err
191
193
}
192
- index = alignIndex (r , order , index + numberOfBytes )
194
+ index = alignIndex (r , order , index + numberOfBytes + 8 )
193
195
if maxElements > 1 {
194
196
// Split the elements
195
197
elements := make (map [int ][]byte )
@@ -252,10 +254,11 @@ func extractMatrix(r io.Reader, order binary.ByteOrder) (MatMatrix, int, error)
252
254
var err error
253
255
254
256
// Array Flags
255
- _ , numberOfBytes , _ , err = extractTag (r , order )
257
+ _ , numberOfBytes , offset , err = extractTag (r , order )
256
258
if err != nil {
257
259
return MatMatrix {}, 0 , err
258
260
}
261
+ index = alignIndex (r , order , index + offset + int (numberOfBytes ))
259
262
arrayFlags , err := readMatfBytes (r , order , int (numberOfBytes ))
260
263
if err != nil {
261
264
return MatMatrix {}, 0 , err
@@ -329,10 +332,8 @@ func decompressData(data []byte) ([]byte, error) {
329
332
330
333
func readDataElementField (m * Matf , order binary.ByteOrder ) (MatMatrix , error ) {
331
334
var mat MatMatrix
332
- var element interface {}
333
335
var data []byte
334
336
var dataType , completeBytes uint32
335
- var offset , i int
336
337
tag , err := readBytes (m , 8 )
337
338
if err != nil {
338
339
return MatMatrix {}, err
@@ -356,7 +357,6 @@ func readDataElementField(m *Matf, order binary.ByteOrder) (MatMatrix, error) {
356
357
return MatMatrix {}, errors .Wrap (err , "extractTag() in readDataElementField() failed" )
357
358
}
358
359
data = plain
359
- _ = offset
360
360
}
361
361
362
362
tmpfile , err := ioutil .TempFile ("" , "matf" )
@@ -375,15 +375,15 @@ func readDataElementField(m *Matf, order binary.ByteOrder) (MatMatrix, error) {
375
375
tmpfile .Seek (0 , 0 )
376
376
r := bufio .NewReader (tmpfile )
377
377
378
- element , i , err = extractDataElement (r , order , int (dataType ), int (completeBytes ))
378
+ element , i , err : = extractDataElement (r , order , int (dataType ), int (completeBytes ))
379
379
if err != nil {
380
380
return MatMatrix {}, errors .Wrap (err , "extractDataElement() in readDataElementField() failed" )
381
381
}
382
382
if int (dataType ) == MiMatrix {
383
383
mat = element .(MatMatrix )
384
384
}
385
385
386
- for uint32 (i )+ 8 != completeBytes {
386
+ for uint32 (i ) < completeBytes {
387
387
return mat , fmt .Errorf ("readDataElementField() could not extract all information" )
388
388
}
389
389
0 commit comments