Git Product home page Git Product logo

confl's Issues

Panic on multi-line strings when the string contains an empty line

panic: runtime error: slice bounds out of range

goroutine 1 [running]:
.../vendor/github.com/lytics/confl.maybeRemoveIndents(0xc4201394b2, 0x2a8, 0x20, 0xc420063af8)
	.../vendor/github.com/lytics/confl/parse.go:304 +0x22b
.../vendor/github.com/lytics/confl.(*parser).processItem(0xc4200de4d0, 0x5, 0xc4201394b2, 0x2a8, 0x56, 0x0, 0x0)
	.../vendor/github.com/lytics/confl/parse.go:170 +0x61b
vendor/github.com/lytics/confl.parse(0xc420139000, 0x75c, 0xc420139000, 0x0, 0x1520c40)
	.../vendor/github.com/lytics/confl/parse.go:92 +0x322
vendor/github.com/lytics/confl.Decode(0xc420139000, 0x75c, 0x13093e0, 0x1520060, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ...)
	.../vendor/github.com/lytics/confl/decode.go:110 +0x7c
vendor/github.com/lytics/confl.DecodeFile(0x7ffeefbffb4b, 0xf, 0x13093e0, 0x1520060, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ...)
	..vendor/github.com/lytics/confl/decode.go:128 +0x16e

Infinite loop on bad input

Courtesy of https://github.com/dvyukov/go-fuzz

I'll submit a pull request to include this in the tree next..

package main

import (
    "fmt"

    "github.com/lytics/confl"
)

func main() {
    var v map[string]interface{}
    fmt.Println("about to hang")
    confl.Unmarshal([]byte("\x0e9\xbd\xbf\xefr"), &v)
    fmt.Println("never gets here")
}

Why not follow the encoding/* conventions?

encoding/json and friends have an API in the style of

func Marshal(val interface{}) ([]byte, error)
func Unmarshal(data []byte, v interface{}) error

func NewEncoder(w io.Writer) *Encoder
func (enc *Encoder) Encode(v interface{}) error

func NewDecoder(r io.Reader) *Decoder
func (dec *Decoder) Decode(v interface{}) error

Where "decode" means streaming operations and "marshal" operates on []byte.

Why not follow that? Right now, the confl API seems unlike good Go, and especially Decode taking a string comes off as very weird.

Apart from that, looks good. I've been wanting something like this for a while, and while https://github.com/hashicorp/hcl also looked promising, it seems confl integrates with the Go style of unmarshaling into a struct better.

Multi-line string includes closing paren

$ cd $GOPATH/src/github.com/lytics/confl/_examples
$ go run example.go | tail -3
    multi line text with a block paren
    block ends with end paren on new line
)

This is even more obvious if you temporarily change the code to

    fmt.Printf("Description: %q\n", config.Description)

the style of nginx's configuration, how to deal it?

location ~* .(otf|eot|woff|ttf|woff2)$ {
types {font/opentype otf;}
types {application/vnd.ms-fontobject eot;}
types {font/truetype ttf;}
types {application/font-woff woff;}
types {font/woff2 woff2;}
}

location / {
try_files $uri $uri/ /index.html =404;
expires off;
add_header Cache-Control "no-cache, no-store, must-revalidate";
add_header Strict-Transport-Security "max-age=86400" always;
}

Just like nginx's configuration, how do i deal it ?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.