File tree Expand file tree Collapse file tree 1 file changed +7
-2
lines changed Expand file tree Collapse file tree 1 file changed +7
-2
lines changed Original file line number Diff line number Diff line change @@ -462,8 +462,12 @@ func convertFromDirents11(buf []byte, old []byte) int {
462
462
dstPos := 0
463
463
srcPos := 0
464
464
for dstPos + fixedSize < len (buf ) && srcPos + oldFixedSize < len (old ) {
465
- dstDirent := (* Dirent )(unsafe .Pointer (& buf [dstPos ]))
466
- srcDirent := (* dirent_freebsd11 )(unsafe .Pointer (& old [srcPos ]))
465
+ var dstDirent Dirent
466
+ var srcDirent dirent_freebsd11
467
+
468
+ // If multiple direntries are written, sometimes when we reach the final one,
469
+ // we may have cap of old less than size of dirent_freebsd11.
470
+ copy ((* [unsafe .Sizeof (srcDirent )]byte )(unsafe .Pointer (& srcDirent ))[:], old [srcPos :])
467
471
468
472
reclen := roundup (fixedSize + int (srcDirent .Namlen )+ 1 , 8 )
469
473
if dstPos + reclen > len (buf ) {
@@ -479,6 +483,7 @@ func convertFromDirents11(buf []byte, old []byte) int {
479
483
dstDirent .Pad1 = 0
480
484
481
485
copy (dstDirent .Name [:], srcDirent .Name [:srcDirent .Namlen ])
486
+ copy (buf [dstPos :], (* [unsafe .Sizeof (dstDirent )]byte )(unsafe .Pointer (& dstDirent ))[:])
482
487
padding := buf [dstPos + fixedSize + int (dstDirent .Namlen ) : dstPos + reclen ]
483
488
for i := range padding {
484
489
padding [i ] = 0
You can’t perform that action at this time.
0 commit comments