Skip to content
This repository was archived by the owner on May 31, 2020. It is now read-only.

Commit fde99b0

Browse files
committed
Fix alignment
Signed-off-by: Lehner Florian <[email protected]>
1 parent b94f46d commit fde99b0

File tree

1 file changed

+8
-8
lines changed

1 file changed

+8
-8
lines changed

matf.go

+8-8
Original file line numberDiff line numberDiff line change
@@ -132,12 +132,14 @@ func extractClass(mat *MatMatrix, r io.Reader, order binary.ByteOrder) (int, err
132132
switch int(mat.Class) {
133133
case MxCellClass:
134134
var content CellPrt
135-
var maxElements = mat.Dim.X
135+
var maxElements = mat.Dim.Y
136136
var noElements int
137137
for {
138138
if noElements >= maxElements {
139139
break
140140
}
141+
// Alignment
142+
readMatfBytes(r, order, 8)
141143
element, step, err := extractMatrix(r, order)
142144
if err != nil {
143145
return 0, err
@@ -189,7 +191,7 @@ func extractClass(mat *MatMatrix, r io.Reader, order binary.ByteOrder) (int, err
189191
if err != nil {
190192
return 0, err
191193
}
192-
index = alignIndex(r, order, index+numberOfBytes)
194+
index = alignIndex(r, order, index+numberOfBytes+8)
193195
if maxElements > 1 {
194196
// Split the elements
195197
elements := make(map[int][]byte)
@@ -252,10 +254,11 @@ func extractMatrix(r io.Reader, order binary.ByteOrder) (MatMatrix, int, error)
252254
var err error
253255

254256
// Array Flags
255-
_, numberOfBytes, _, err = extractTag(r, order)
257+
_, numberOfBytes, offset, err = extractTag(r, order)
256258
if err != nil {
257259
return MatMatrix{}, 0, err
258260
}
261+
index = alignIndex(r, order, index+offset+int(numberOfBytes))
259262
arrayFlags, err := readMatfBytes(r, order, int(numberOfBytes))
260263
if err != nil {
261264
return MatMatrix{}, 0, err
@@ -329,10 +332,8 @@ func decompressData(data []byte) ([]byte, error) {
329332

330333
func readDataElementField(m *Matf, order binary.ByteOrder) (MatMatrix, error) {
331334
var mat MatMatrix
332-
var element interface{}
333335
var data []byte
334336
var dataType, completeBytes uint32
335-
var offset, i int
336337
tag, err := readBytes(m, 8)
337338
if err != nil {
338339
return MatMatrix{}, err
@@ -356,7 +357,6 @@ func readDataElementField(m *Matf, order binary.ByteOrder) (MatMatrix, error) {
356357
return MatMatrix{}, errors.Wrap(err, "extractTag() in readDataElementField() failed")
357358
}
358359
data = plain
359-
_ = offset
360360
}
361361

362362
tmpfile, err := ioutil.TempFile("", "matf")
@@ -375,15 +375,15 @@ func readDataElementField(m *Matf, order binary.ByteOrder) (MatMatrix, error) {
375375
tmpfile.Seek(0, 0)
376376
r := bufio.NewReader(tmpfile)
377377

378-
element, i, err = extractDataElement(r, order, int(dataType), int(completeBytes))
378+
element, i, err := extractDataElement(r, order, int(dataType), int(completeBytes))
379379
if err != nil {
380380
return MatMatrix{}, errors.Wrap(err, "extractDataElement() in readDataElementField() failed")
381381
}
382382
if int(dataType) == MiMatrix {
383383
mat = element.(MatMatrix)
384384
}
385385

386-
for uint32(i)+8 != completeBytes {
386+
for uint32(i) < completeBytes {
387387
return mat, fmt.Errorf("readDataElementField() could not extract all information")
388388
}
389389

0 commit comments

Comments
 (0)