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 @@ -381,8 +381,12 @@ func convertFromDirents11(buf []byte, old []byte) int {
381
381
dstPos := 0
382
382
srcPos := 0
383
383
for dstPos + fixedSize < len (buf ) && srcPos + oldFixedSize < len (old ) {
384
- dstDirent := (* Dirent )(unsafe .Pointer (& buf [dstPos ]))
385
- srcDirent := (* dirent_freebsd11 )(unsafe .Pointer (& old [srcPos ]))
384
+ var dstDirent Dirent
385
+ var srcDirent dirent_freebsd11
386
+
387
+ // If multiple direntries are written, sometimes when we reach the final one,
388
+ // we may have cap of old less than size of dirent_freebsd11.
389
+ copy ((* [unsafe .Sizeof (srcDirent )]byte )(unsafe .Pointer (& srcDirent ))[:], old [srcPos :])
386
390
387
391
reclen := roundup (fixedSize + int (srcDirent .Namlen )+ 1 , 8 )
388
392
if dstPos + reclen > len (buf ) {
@@ -398,6 +402,7 @@ func convertFromDirents11(buf []byte, old []byte) int {
398
402
dstDirent .Pad1 = 0
399
403
400
404
copy (dstDirent .Name [:], srcDirent .Name [:srcDirent .Namlen ])
405
+ copy (buf [dstPos :], (* [unsafe .Sizeof (dstDirent )]byte )(unsafe .Pointer (& dstDirent ))[:])
401
406
padding := buf [dstPos + fixedSize + int (dstDirent .Namlen ) : dstPos + reclen ]
402
407
for i := range padding {
403
408
padding [i ] = 0
You can’t perform that action at this time.
0 commit comments