Commit 290ac455 authored by Aaron Jacobs's avatar Aaron Jacobs

Fixed some build errors.

parent 9082660f
...@@ -16,6 +16,7 @@ package fuseops ...@@ -16,6 +16,7 @@ package fuseops
import ( import (
"bytes" "bytes"
"errors"
"log" "log"
"time" "time"
"unsafe" "unsafe"
...@@ -29,20 +30,18 @@ import ( ...@@ -29,20 +30,18 @@ import (
// be called by anyone else. // be called by anyone else.
// //
// Convert the supplied fuse kernel message to an Op. sendReply will be used to // Convert the supplied fuse kernel message to an Op. sendReply will be used to
// send the reply back to the kernel once the user calls o.Respond. That // send the reply back to the kernel once the user calls o.Respond. If the op
// function is responsible for destroying the message. // is unknown, a special unexported type will be used.
// //
// It is guaranteed that o != nil. If the op is unknown, a special unexported // The debug logging function and error logger may be nil. The caller is
// type will be used. // responsible for arranging for the message to be destroyed.
//
// The debug logging function and error logger may be nil.
func Convert( func Convert(
opCtx context.Context, opCtx context.Context,
m *fuseshim.Message, m *fuseshim.Message,
protocol fusekernel.Protocol, protocol fusekernel.Protocol,
debugLogForOp func(int, string, ...interface{}), debugLogForOp func(int, string, ...interface{}),
errorLogger *log.Logger, errorLogger *log.Logger,
sendReply replyFunc) (o Op) { sendReply replyFunc) (o Op, err error) {
var co *commonOp var co *commonOp
var io internalOp var io internalOp
...@@ -51,7 +50,8 @@ func Convert( ...@@ -51,7 +50,8 @@ func Convert(
buf := m.Bytes() buf := m.Bytes()
n := len(buf) n := len(buf)
if n == 0 || buf[n-1] != '\x00' { if n == 0 || buf[n-1] != '\x00' {
goto corrupt err = errors.New("Corrupted OpLookup")
return
} }
to := &LookUpInodeOp{ to := &LookUpInodeOp{
...@@ -71,7 +71,8 @@ func Convert( ...@@ -71,7 +71,8 @@ func Convert(
case fusekernel.OpSetattr: case fusekernel.OpSetattr:
in := (*fusekernel.SetattrIn)(m.Data()) in := (*fusekernel.SetattrIn)(m.Data())
if m.Len() < unsafe.Sizeof(*in) { if m.Len() < unsafe.Sizeof(*in) {
goto corrupt err = errors.New("Corrupted OpSetattr")
return
} }
to := &SetInodeAttributesOp{ to := &SetInodeAttributesOp{
...@@ -104,7 +105,8 @@ func Convert( ...@@ -104,7 +105,8 @@ func Convert(
case fusekernel.OpForget: case fusekernel.OpForget:
in := (*fusekernel.ForgetIn)(m.Data()) in := (*fusekernel.ForgetIn)(m.Data())
if m.Len() < unsafe.Sizeof(*in) { if m.Len() < unsafe.Sizeof(*in) {
goto corrupt err = errors.New("Corrupted OpForget")
return
} }
to := &ForgetInodeOp{ to := &ForgetInodeOp{
...@@ -117,13 +119,15 @@ func Convert( ...@@ -117,13 +119,15 @@ func Convert(
case fusekernel.OpMkdir: case fusekernel.OpMkdir:
size := fusekernel.MkdirInSize(protocol) size := fusekernel.MkdirInSize(protocol)
if m.Len() < size { if m.Len() < size {
goto corrupt err = errors.New("Corrupted OpMkdir")
return
} }
in := (*fusekernel.MkdirIn)(m.Data()) in := (*fusekernel.MkdirIn)(m.Data())
name := m.Bytes()[size:] name := m.Bytes()[size:]
i := bytes.IndexByte(name, '\x00') i := bytes.IndexByte(name, '\x00')
if i < 0 { if i < 0 {
goto corrupt err = errors.New("Corrupted OpMkdir")
return
} }
name = name[:i] name = name[:i]
...@@ -138,13 +142,15 @@ func Convert( ...@@ -138,13 +142,15 @@ func Convert(
case fusekernel.OpCreate: case fusekernel.OpCreate:
size := fusekernel.CreateInSize(protocol) size := fusekernel.CreateInSize(protocol)
if m.Len() < size { if m.Len() < size {
goto corrupt err = errors.New("Corrupted OpCreate")
return
} }
in := (*fusekernel.CreateIn)(m.Data()) in := (*fusekernel.CreateIn)(m.Data())
name := m.Bytes()[size:] name := m.Bytes()[size:]
i := bytes.IndexByte(name, '\x00') i := bytes.IndexByte(name, '\x00')
if i < 0 { if i < 0 {
goto corrupt err = errors.New("Corrupted OpCreate")
return
} }
name = name[:i] name = name[:i]
...@@ -160,11 +166,13 @@ func Convert( ...@@ -160,11 +166,13 @@ func Convert(
// m.Bytes() is "newName\0target\0" // m.Bytes() is "newName\0target\0"
names := m.Bytes() names := m.Bytes()
if len(names) == 0 || names[len(names)-1] != 0 { if len(names) == 0 || names[len(names)-1] != 0 {
goto corrupt err = errors.New("Corrupted OpSymlink")
return
} }
i := bytes.IndexByte(names, '\x00') i := bytes.IndexByte(names, '\x00')
if i < 0 { if i < 0 {
goto corrupt err = errors.New("Corrupted OpSymlink")
return
} }
newName, target := names[0:i], names[i+1:len(names)-1] newName, target := names[0:i], names[i+1:len(names)-1]
...@@ -179,19 +187,23 @@ func Convert( ...@@ -179,19 +187,23 @@ func Convert(
case fusekernel.OpRename: case fusekernel.OpRename:
in := (*fusekernel.RenameIn)(m.Data()) in := (*fusekernel.RenameIn)(m.Data())
if m.Len() < unsafe.Sizeof(*in) { if m.Len() < unsafe.Sizeof(*in) {
goto corrupt err = errors.New("Corrupted OpRename")
return
} }
names := m.Bytes()[unsafe.Sizeof(*in):] names := m.Bytes()[unsafe.Sizeof(*in):]
// names should be "old\x00new\x00" // names should be "old\x00new\x00"
if len(names) < 4 { if len(names) < 4 {
goto corrupt err = errors.New("Corrupted OpRename")
return
} }
if names[len(names)-1] != '\x00' { if names[len(names)-1] != '\x00' {
goto corrupt err = errors.New("Corrupted OpRename")
return
} }
i := bytes.IndexByte(names, '\x00') i := bytes.IndexByte(names, '\x00')
if i < 0 { if i < 0 {
goto corrupt err = errors.New("Corrupted OpRename")
return
} }
oldName, newName := names[:i], names[i+1:len(names)-1] oldName, newName := names[:i], names[i+1:len(names)-1]
...@@ -208,7 +220,8 @@ func Convert( ...@@ -208,7 +220,8 @@ func Convert(
buf := m.Bytes() buf := m.Bytes()
n := len(buf) n := len(buf)
if n == 0 || buf[n-1] != '\x00' { if n == 0 || buf[n-1] != '\x00' {
goto corrupt err = errors.New("Corrupted OpUnlink")
return
} }
to := &UnlinkOp{ to := &UnlinkOp{
...@@ -222,7 +235,8 @@ func Convert( ...@@ -222,7 +235,8 @@ func Convert(
buf := m.Bytes() buf := m.Bytes()
n := len(buf) n := len(buf)
if n == 0 || buf[n-1] != '\x00' { if n == 0 || buf[n-1] != '\x00' {
goto corrupt err = errors.New("Corrupted OpRmdir")
return
} }
to := &RmDirOp{ to := &RmDirOp{
...@@ -249,7 +263,8 @@ func Convert( ...@@ -249,7 +263,8 @@ func Convert(
case fusekernel.OpRead: case fusekernel.OpRead:
in := (*fusekernel.ReadIn)(m.Data()) in := (*fusekernel.ReadIn)(m.Data())
if m.Len() < fusekernel.ReadInSize(protocol) { if m.Len() < fusekernel.ReadInSize(protocol) {
goto corrupt err = errors.New("Corrupted OpRead")
return
} }
to := &ReadFileOp{ to := &ReadFileOp{
...@@ -264,7 +279,8 @@ func Convert( ...@@ -264,7 +279,8 @@ func Convert(
case fusekernel.OpReaddir: case fusekernel.OpReaddir:
in := (*fusekernel.ReadIn)(m.Data()) in := (*fusekernel.ReadIn)(m.Data())
if m.Len() < fusekernel.ReadInSize(protocol) { if m.Len() < fusekernel.ReadInSize(protocol) {
goto corrupt err = errors.New("Corrupted OpReaddir")
return
} }
to := &ReadDirOp{ to := &ReadDirOp{
...@@ -279,7 +295,8 @@ func Convert( ...@@ -279,7 +295,8 @@ func Convert(
case fusekernel.OpRelease: case fusekernel.OpRelease:
in := (*fusekernel.ReleaseIn)(m.Data()) in := (*fusekernel.ReleaseIn)(m.Data())
if m.Len() < unsafe.Sizeof(*in) { if m.Len() < unsafe.Sizeof(*in) {
goto corrupt err = errors.New("Corrupted OpRelease")
return
} }
to := &ReleaseFileHandleOp{ to := &ReleaseFileHandleOp{
...@@ -291,7 +308,8 @@ func Convert( ...@@ -291,7 +308,8 @@ func Convert(
case fusekernel.OpReleasedir: case fusekernel.OpReleasedir:
in := (*fusekernel.ReleaseIn)(m.Data()) in := (*fusekernel.ReleaseIn)(m.Data())
if m.Len() < unsafe.Sizeof(*in) { if m.Len() < unsafe.Sizeof(*in) {
goto corrupt err = errors.New("Corrupted OpReleasedir")
return
} }
to := &ReleaseDirHandleOp{ to := &ReleaseDirHandleOp{
...@@ -304,12 +322,14 @@ func Convert( ...@@ -304,12 +322,14 @@ func Convert(
in := (*fusekernel.WriteIn)(m.Data()) in := (*fusekernel.WriteIn)(m.Data())
size := fusekernel.WriteInSize(protocol) size := fusekernel.WriteInSize(protocol)
if m.Len() < size { if m.Len() < size {
goto corrupt err = errors.New("Corrupted OpWrite")
return
} }
buf := m.Bytes()[size:] buf := m.Bytes()[size:]
if len(buf) < int(in.Size) { if len(buf) < int(in.Size) {
goto corrupt err = errors.New("Corrupted OpWrite")
return
} }
to := &WriteFileOp{ to := &WriteFileOp{
...@@ -324,7 +344,8 @@ func Convert( ...@@ -324,7 +344,8 @@ func Convert(
case fusekernel.OpFsync: case fusekernel.OpFsync:
in := (*fusekernel.FsyncIn)(m.Data()) in := (*fusekernel.FsyncIn)(m.Data())
if m.Len() < unsafe.Sizeof(*in) { if m.Len() < unsafe.Sizeof(*in) {
goto corrupt err = errors.New("Corrupted OpFsync")
return
} }
to := &SyncFileOp{ to := &SyncFileOp{
...@@ -337,7 +358,8 @@ func Convert( ...@@ -337,7 +358,8 @@ func Convert(
case fusekernel.OpFlush: case fusekernel.OpFlush:
in := (*fusekernel.FlushIn)(m.Data()) in := (*fusekernel.FlushIn)(m.Data())
if m.Len() < unsafe.Sizeof(*in) { if m.Len() < unsafe.Sizeof(*in) {
goto corrupt err = errors.New("Corrupted OpFlush")
return
} }
to := &FlushFileOp{ to := &FlushFileOp{
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment