summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.adoc140
-rw-r--r--share.go2
2 files changed, 141 insertions, 1 deletions
diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc
index ba110488..857bbb42 100644
--- a/CHANGELOG.adoc
+++ b/CHANGELOG.adoc
@@ -3,6 +3,146 @@
This library is released every month, usually at the first week of month.
+== share v0.29.2 (2021-09-06)
+
+=== Bug fixes
+
+* os/exec: fix escaped quote inside the same quote
+
+ Shell quote is a hell of complex. For example, one can write
+ shell that execute command that contains quote of quote,
+
+ sh -c "psql -c 'CREATE ... IDENTIFIED BY PASSWORD '\''pass'\'''"
+
+ or to simplify,
+
+ sh -c "psql -c \"CREATE ... IDENTIFIED BY PASSWORD 'pass'\""
+
+* lib/memfs: fix empty ContentType if MaxFileSize is negative
+
+ A negative MaxFileSize means the content of file will not be mapped to
+ memory, but the content type should be detected for other operation.
+
+* lib/memfs: fix empty file not being added to tree
+
+ Previously, we did not check if the file size is 0 before reading the
+ content or updating the content type, which cause the read on file
+ return io.EOF and the file not added to caches.
+
+ This commit fix this issue by checking for zero file size and for
+ io.EOF when reading the file content.
+
+* lib/memfs: fix symbolic link with different name
+
+ Previously, if file is symbolic link and has different name with their
+ original file, it will return an error when we tried to open the file
+
+ parentpath/filename: no such file or directory
+
+ because we use the original file name, not the symlinked file name.
+
+ This commit fix this issue by not replacing the original FileInfo for
+ symlink but by setting only the size and mode.
+
+* lib/sql: do not run migration if the last file not exist on the list
+
+ Previously, if the last migrated file name not found on the migration
+ directory, we start executing migration start from the first file.
+
+ This changes the behaviour to not run any migration at all.
+ Since we cannot return it as an error, we only log it. In the future
+ we may return it.
+
+* lib/http: fix missing content type for XML Header
+
+ If the Endpoint set the RequestType to RequestTypeXML, the response
+ header should be set to ContentTypeXML.
+
+* lib/xmlrpc: fix missing port on NewClient
+
+ Calling net.Dial or tls.Dial on host without port will cause the
+ following error,
+
+ NewClient: Dial: dial tcp: address 10.148.0.164: missing port in address
+
+ This changes fix this by always generate new host value using previous
+ host and port values.
+
+* lib/smtp: return io.EOF if no data received from server
+
+ This is to prevent the recv return nil on *Response without an error,
+ which may cause panic on caller side.
+
+* os/exec: check for escaped backslash when ParseCommandArgs
+
+ Given the following string "cmd /a\ b" to ParseCommandArgs now
+ return "cmd" and ["/a b"] not ["/a\", "b"], because the space after a
+ is escaped using backslash.
+
+=== Enhancements
+
+* lib/memfs: set default content type for empty file to "text/plain"
+
+ An empty file should be able to be displayed as text file instead of
+ downloaded as binary.
+
+* lib/memfs: change the MarshalJSON to always return an object
+
+ Previously, MarshalJSON on memfs will return an object of map
+ of all PathNodes and on Node it will return an object.
+
+ This changes make it the JSON response consistent. If its directory
+ it will return the node object with its childs, without "content".
+ If its file, it will return the node object with content.
+
+ While at it, use single "mod_time" with value is epoch and return
+ the node ContentType as "content_type".
+
+* lib/mlog: implement io.Writer and add function ErrorWriter
+
+ The ErrorWriter will return the internal default MultiLogger.
+ A call to Write() on returned io.Writer will forward it to all registered
+ error writers.
+
+ A Write method on MultiLogger write the b to all error writers.
+ It will always return the length of b without an error.
+
+* lib/memfs: add method Save and Encode
+
+ The Save method will write the new content to file system and update
+ the content of Node using Encode().
+
+* lib/ssh: add method to set session output and error
+
+ Previously, all of the SSH output and error goes to os.Stdout and
+ os.Stderr.
+
+ This changes add method SetSessionOutputError to change the output and
+ error for future remote execution.
+
+=== Chores
+
+* lib/reflect: make the IsNil tests to become an example
+
+ In this way we do test and provide an example at the same time.
+
+ While at it, add another test cases for boolean, initialized slice, map,
+ and errors.
+
+* lib/websocket: try to fix flaky test on client
+
+ The following error thrown when running on Github Action using
+ Ubuntu-latest and Go 1.16.3,
+
+ client_test.go:472: write tcp 127.0.0.1:34460->127.0.0.1:9001:
+ write: connection reset by peer
+
+ This may be caused by using the same client connection on all test
+ cases.
+
+ We try to fix this by creating new client on each test cases.
+
+
== share v0.29.1 (2021-08-06)
Revert the "lib/errors: return the internal error only if its not nil on
diff --git a/share.go b/share.go
index 94b101c7..e5ef5b71 100644
--- a/share.go
+++ b/share.go
@@ -10,5 +10,5 @@ package share
const (
// Version of this module.
- Version = "0.27.0"
+ Version = "0.29.2"
)