cmd/htpacker: cope with zero-length input files
Sometimes we might be asked to serve up a zero-length input file, typically from some machine-generated CSS etc. We make some very rudimentary guess about the content-type the caller wanted and skip the mmap(2) call.
This commit is contained in:
parent
52213cf67e
commit
1b84160dcf
|
@ -325,11 +325,14 @@ func (p *packer) packFile(path string, fileToPack FileToPack) {
|
|||
return
|
||||
}
|
||||
|
||||
data, err := unix.Mmap(int(f.Fd()), 0, int(fi.Size()),
|
||||
unix.PROT_READ, unix.MAP_SHARED)
|
||||
if err != nil {
|
||||
p.Abort(fmt.Errorf("mmap %s: %v", fileToPack.Filename, err))
|
||||
return
|
||||
var data []byte
|
||||
if fi.Size() > 0 {
|
||||
data, err = unix.Mmap(int(f.Fd()), 0, int(fi.Size()),
|
||||
unix.PROT_READ, unix.MAP_SHARED)
|
||||
if err != nil {
|
||||
p.Abort(fmt.Errorf("mmap %s: %v", fileToPack.Filename, err))
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
// prepare initial directory entry
|
||||
|
|
|
@ -3,6 +3,7 @@ package main
|
|||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
"os"
|
||||
|
@ -125,13 +126,22 @@ func filesFromListR(prefix, arg string, ftp packer.FilesToPack) error {
|
|||
|
||||
case fi.Mode().IsRegular():
|
||||
// sniff content type
|
||||
var ctype string
|
||||
buf := make([]byte, 512)
|
||||
n, err := f.Read(buf)
|
||||
if err != nil {
|
||||
switch err {
|
||||
case nil:
|
||||
buf = buf[:n]
|
||||
ctype = http.DetectContentType(buf)
|
||||
|
||||
case io.EOF:
|
||||
// Empty file; this is typically due to things like
|
||||
// npm webpack producing empty .css files.
|
||||
ctype = "text/plain; charset=UTF-8"
|
||||
|
||||
default:
|
||||
return fmt.Errorf("failed to read %s: %v", arg, err)
|
||||
}
|
||||
buf = buf[:n]
|
||||
ctype := http.DetectContentType(buf)
|
||||
|
||||
// augmented rules for JS / CSS / etc.
|
||||
switch {
|
||||
|
|
Loading…
Reference in New Issue