gin/CHANGELOG.md

35 KiB

Gin ChangeLog

Gin v1.9.1

BUG FIXES

  • fix Request.Context() checks #3512

SECURITY

  • fix lack of escaping of filename in Content-Disposition #3556

ENHANCEMENTS

  • refactor: use bytes.ReplaceAll directly #3455
  • convert strings and slices using the officially recommended way #3344
  • improve render code coverage #3525

DOCS

  • docs: changed documentation link for trusted proxies #3575
  • chore: improve linting, testing, and GitHub Actions setup #3583

Gin v1.9.0

BREAK CHANGES

  • Stop useless panicking in context and render #2150

BUG FIXES

  • fix(router): tree bug where loop index is not decremented. #3460
  • fix(context): panic on NegotiateFormat - index out of range #3397
  • Add escape logic for header #3500 and #3503

SECURITY

  • Fix the GO-2022-0969 and GO-2022-0288 vulnerabilities #3333
  • fix(security): vulnerability GO-2023-1571 #3505

ENHANCEMENTS

  • feat: add sonic json support #3184
  • chore(file): Creates a directory named path #3316
  • fix: modify interface check way #3327
  • remove deprecated of package io/ioutil #3395
  • refactor: avoid calling strings.ToLower twice #3343
  • console logger HTTP status code bug fixed #3453
  • chore(yaml): upgrade dependency to v3 version #3456
  • chore(router): match method added to routergroup for multiple HTTP methods supporting #3464
  • chore(http): add support for go1.20 http.rwUnwrapper to gin.responseWriter #3489

DOCS

  • docs: update markdown format #3260
  • docs(readme): Add the TOML rendering example #3400
  • docs(readme): move more example to docs/doc.md #3449
  • docs: update markdown format #3446

Gin v1.8.2

BUG FIXES

  • fix(route): redirectSlash bug (#3227)
  • fix(engine): missing route params for CreateTestContext (#2778) (#2803)

SECURITY

  • Fix the GO-2022-1144 vulnerability (#3432)

Gin v1.8.1

ENHANCEMENTS

  • feat(context): add ContextWithFallback feature flag #3172

Gin v1.8.0

BREAK CHANGES

  • TrustedProxies: Add default IPv6 support and refactor #2967. Please replace RemoteIP() (net.IP, bool) with RemoteIP() net.IP
  • gin.Context with fallback value from gin.Context.Request.Context() #2751

BUG FIXES

  • Fixed SetOutput() panics on go 1.17 #2861
  • Fix: wrong when wildcard follows named param #2983
  • Fix: missing sameSite when do context.reset() #3123

ENHANCEMENTS

  • Use Header() instead of deprecated HeaderMap #2694
  • RouterGroup.Handle regular match optimization of http method #2685
  • Add support go-json, another drop-in json replacement #2680
  • Use errors.New to replace fmt.Errorf will much better #2707
  • Use Duration.Truncate for truncating precision #2711
  • Get client IP when using Cloudflare #2723
  • Optimize code adjust #2700
  • Optimize code and reduce code cyclomatic complexity #2737
  • Improve sliceValidateError.Error performance #2765
  • Support custom struct tag #2720
  • Improve router group tests #2787
  • Fallback Context.Deadline() Context.Done() Context.Err() to Context.Request.Context() #2769
  • Some codes optimize #2830 #2834 #2838 #2837 #2788 #2848 #2851 #2701
  • TrustedProxies: Add default IPv6 support and refactor #2967
  • Test(route): expose performRequest func #3012
  • Support h2c with prior knowledge #1398
  • Feat attachment filename support utf8 #3071
  • Feat: add StaticFileFS #2749
  • Feat(context): return GIN Context from Value method #2825
  • Feat: automatically SetMode to TestMode when run go test #3139
  • Add TOML bining for gin #3081
  • IPv6 add default trusted proxies #3033

DOCS

  • Add note about nomsgpack tag to the readme #2703

Gin v1.7.7

BUG FIXES

  • Fixed X-Forwarded-For unsafe handling of CVE-2020-28483 #2844, closed issue #2862.
  • Tree: updated the code logic for latestNode #2897, closed issue #2894 #2878.
  • Tree: fixed the misplacement of adding slashes #2847, closed issue #2843.
  • Tree: fixed tsr with mixed static and wildcard paths #2924, closed issue #2918.

ENHANCEMENTS

  • TrustedProxies: make it backward-compatible #2887, closed issue #2819.
  • TrustedPlatform: provide custom options for another CDN services #2906.

DOCS

  • NoMethod: added usage annotation (#2832).

Gin v1.7.6

BUG FIXES

  • bump new release to fix v1.7.5 release error by using v1.7.4 codes.

Gin v1.7.4

BUG FIXES

  • bump new release to fix checksum mismatch

Gin v1.7.3

BUG FIXES

Gin v1.7.2

BUG FIXES

  • Fix conflict between param and exact path #2706. Close issue #2682 #2696.

Gin v1.7.1

BUG FIXES

  • fix: data race with trustedCIDRs from #2674(#2675)

Gin v1.7.0

BUG FIXES

  • fix compile error from #2572 (#2600)
  • fix: print headers without Authorization header on broken pipe (#2528)
  • fix(tree): reassign fullpath when register new node (#2366)

ENHANCEMENTS

  • Support params and exact routes without creating conflicts (#2663)
  • chore: improve render string performance (#2365)
  • Sync route tree to httprouter latest code (#2368)
  • chore: rename getQueryCache/getFormCache to initQueryCache/initFormCa (#2375)
  • chore(performance): improve countParams (#2378)
  • Remove some functions that have the same effect as the bytes package (#2387)
  • update:SetMode function (#2321)
  • remove an unused type SecureJSONPrefix (#2391)
  • Add a redirect sample for POST method (#2389)
  • Add CustomRecovery builtin middleware (#2322)
  • binding: avoid 2038 problem on 32-bit architectures (#2450)
  • Prevent panic in Context.GetQuery() when there is no Request (#2412)
  • Add GetUint and GetUint64 method on gin.context (#2487)
  • update content-disposition header to MIME-style (#2512)
  • reduce allocs and improve the render WriteString (#2508)
  • implement ".Unwrap() error" on Error type (#2525) (#2526)
  • Allow bind with a map[string]string (#2484)
  • chore: update tree (#2371)
  • Support binding for slice/array obj [Rewrite] (#2302)
  • basic auth: fix timing oracle (#2609)
  • Add mixed param and non-param paths (port of httprouter#329) (#2663)
  • feat(engine): add trustedproxies and remoteIP (#2632)

Gin v1.6.3

ENHANCEMENTS

  • Improve performance: Change *sync.RWMutex to sync.RWMutex in context. #2351

Gin v1.6.2

BUG FIXES

  • fix missing initial sync.RWMutex #2305

ENHANCEMENTS

  • Add set samesite in cookie. #2306

Gin v1.6.1

BUG FIXES

  • Revert "fix accept incoming network connections" #2294

Gin v1.6.0

BREAKING

  • chore(performance): Improve performance for adding RemoveExtraSlash flag #2159
  • drop support govendor #2148
  • Added support for SameSite cookie flag #1615

FEATURES

BUG FIXES

  • Unix Socket Handling #2280
  • Use json marshall in context json to fix breaking new line issue. Fixes #2209 #2228
  • fix accept incoming network connections #2216
  • Fixed a bug in the calculation of the maximum number of parameters #2166
  • [FIX] allow empty headers on DataFromReader #2121
  • Add mutex for protect Context.Keys map #1391

ENHANCEMENTS

  • Add mitigation for log injection #2277
  • tree: range over nodes values #2229
  • tree: remove duplicate assignment #2222
  • chore: upgrade go-isatty and json-iterator/go #2215
  • path: sync code with httprouter #2212
  • Use zero-copy approach to convert types between string and byte slice #2206
  • Reuse bytes when cleaning the URL paths #2179
  • tree: remove one else statement #2177
  • tree: sync httprouter update (#2173) (#2172) #2171
  • tree: sync part httprouter codes and reduce if/else #2163
  • use http method constant #2155
  • upgrade go-validator to v10 #2149
  • Refactor redirect request in gin.go #1970
  • Add build tag nomsgpack #1852

DOCS

  • docs(path): improve comments #2223
  • Renew README to fit the modification of SetCookie method #2217
  • Fix spelling #2202
  • Remove broken link from README. #2198
  • Update docs on Context.Done(), Context.Deadline() and Context.Err() #2196
  • Update validator to v10 #2190
  • upgrade go-validator to v10 for README #2189
  • Update to currently output #2188
  • Fix "Custom Validators" example #2186
  • Add project to README #2165
  • docs(benchmarks): for gin v1.5 #2153
  • Changed wording for clarity in README.md #2122

MISC

  • ci support go1.14 #2262
  • chore: upgrade depend version #2231
  • Drop support go1.10 #2147
  • fix comment in mode.go #2129

Gin v1.5.0

  • [FIX] Use DefaultWriter and DefaultErrorWriter for debug messages #1891
  • [NEW] Now you can parse the inline lowercase start structure #1893
  • [FIX] Some code improvements #1909
  • [FIX] Use encode replace json marshal increase json encoder speed #1546
  • [NEW] Hold matched route full path in the Context #1826
  • [FIX] Fix context.Params race condition on Copy() #1841
  • [NEW] Add context param query cache #1450
  • [FIX] Improve GetQueryMap performance #1918
  • [FIX] Improve get post data #1920
  • [FIX] Use context instead of x/net/context #1922
  • [FIX] Attempt to fix PostForm cache bug #1931
  • [NEW] Add support of multipart multi files #1949
  • [NEW] Support bind http header param #1957
  • [FIX] Drop support for go1.8 and go1.9 #1933
  • [FIX] Bugfix for the FullPath feature #1919
  • [FIX] Gin1.5 bytes.Buffer to strings.Builder #1939
  • [FIX] Upgrade github.com/ugorji/go/codec #1969
  • [NEW] Support bind unix time #1980
  • [FIX] Simplify code #2004
  • [NEW] Support negative Content-Length in DataFromReader #1981
  • [FIX] Identify terminal on a RISC-V architecture for auto-colored logs #2019
  • [BREAKING] Context.JSONP() now expects a semicolon (;) at the end #2007
  • [BREAKING] Upgrade default binding.Validator to v9 (see its changelog) #1015
  • [NEW] Add DisallowUnknownFields() in Context.BindJSON() #2028
  • [NEW] Use specific net.Listener with Engine.RunListener() #2023
  • [FIX] Fix some typo #2079 #2080
  • [FIX] Relocate binding body tests #2086
  • [FIX] Use Writer in Context.Status #1606
  • [FIX] Engine.RunUnix() now returns the error if it can't change the file mode #2093
  • [FIX] RouterGroup.StaticFS() leaked files. Now it closes them. #2118
  • [FIX] Context.Request.FormFile leaked file. Now it closes it. #2114
  • [FIX] Ignore walking on form:"-" mapping #1943

Gin v1.4.0

  • [NEW] Support for Go Modules #1569
  • [NEW] Refactor of form mapping multipart request #1829
  • [FIX] Truncate Latency precision in long running request #1830
  • [FIX] IsTerm flag should not be affected by DisableConsoleColor method. #1802
  • [NEW] Supporting file binding #1264
  • [NEW] Add support for mapping arrays #1797
  • [FIX] Readme updates #1793 #1788 1789
  • [FIX] StaticFS: Fixed Logging two log lines on 404. #1805, #1804
  • [NEW] Make context.Keys available as LogFormatterParams #1779
  • [NEW] Use internal/json for Marshal/Unmarshal #1791
  • [NEW] Support mapping time.Duration #1794
  • [NEW] Refactor form mappings #1749
  • [NEW] Added flag to context.Stream indicates if client disconnected in middle of stream #1252
  • [FIX] Moved examples to stand alone Repo #1775
  • [NEW] Extend context.File to allow for the content-disposition attachments via a new method context.Attachment #1260
  • [FIX] Support HTTP content negotiation wildcards #1112
  • [NEW] Add prefix from X-Forwarded-Prefix in redirectTrailingSlash #1238
  • [FIX] context.Copy() race condition #1020
  • [NEW] Add context.HandlerNames() #1729
  • [FIX] Change color methods to public in the defaultLogger. #1771
  • [FIX] Update writeHeaders method to use http.Header.Set #1722
  • [NEW] Add response size to LogFormatterParams #1752
  • [NEW] Allow ignoring field on form mapping #1733
  • [NEW] Add a function to force color in console output. #1724
  • [FIX] Context.Next() - recheck len of handlers on every iteration. #1745
  • [FIX] Fix all errcheck warnings #1739 #1653
  • [NEW] context: inherits context cancellation and deadline from http.Request context for Go>=1.7 #1690
  • [NEW] Binding for URL Params #1694
  • [NEW] Add LoggerWithFormatter method #1677
  • [FIX] CI testing updates #1671 #1670 #1682 #1669
  • [FIX] StaticFS(): Send 404 when path does not exist #1663
  • [FIX] Handle nil body for JSON binding #1638
  • [FIX] Support bind uri param #1612
  • [FIX] recovery: fix issue with syscall import on google app engine #1640
  • [FIX] Make sure the debug log contains line breaks #1650
  • [FIX] Panic stack trace being printed during recovery of broken pipe #1089 #1259
  • [NEW] RunFd method to run http.Server through a file descriptor #1609
  • [NEW] Yaml binding support #1618
  • [FIX] Pass MaxMultipartMemory when FormFile is called #1600
  • [FIX] LoadHTML* tests #1559
  • [FIX] Removed use of sync.pool from HandleContext #1565
  • [FIX] Format output log to os.Stderr #1571
  • [FIX] Make logger use a yellow background and a darkgray text for legibility #1570
  • [FIX] Remove sensitive request information from panic log. #1370
  • [FIX] log.Println() does not print timestamp #829 #1560
  • [NEW] Add PureJSON renderer #694
  • [FIX] Add missing copyright and update if/else #1497
  • [FIX] Update msgpack usage #1498
  • [FIX] Use protobuf on render #1496
  • [FIX] Add support for Protobuf format response #1479
  • [NEW] Set default time format in form binding #1487
  • [FIX] Add BindXML and ShouldBindXML #1485
  • [NEW] Upgrade dependency libraries #1491

Gin v1.3.0

Gin 1.2.0

  • [NEW] Switch from godeps to govendor
  • [NEW] Add support for Let's Encrypt via gin-gonic/autotls
  • [NEW] Improve README examples and add extra at examples folder
  • [NEW] Improved support with App Engine
  • [NEW] Add custom template delimiters, see #860
  • [NEW] Add Template Func Maps, see #962
  • [NEW] Add *context.Handler(), see #928
  • [NEW] Add *context.GetRawData()
  • [NEW] Add *context.GetHeader() (request)
  • [NEW] Add *context.AbortWithStatusJSON() (JSON content type)
  • [NEW] Add *context.Keys type cast helpers
  • [NEW] Add *context.ShouldBindWith()
  • [NEW] Add *context.MustBindWith()
  • [NEW] Add *engine.SetFuncMap()
  • [DEPRECATE] On next release: *context.BindWith(), see #855
  • [FIX] Refactor render
  • [FIX] Reworked tests
  • [FIX] logger now supports cygwin
  • [FIX] Use X-Forwarded-For before X-Real-Ip
  • [FIX] time.Time binding (#904)

Gin 1.1.4

  • [NEW] Support google appengine for IsTerminal func

Gin 1.1.3

  • [FIX] Reverted Logger: skip ANSI color commands

Gin 1.1

  • [NEW] Implement QueryArray and PostArray methods
  • [NEW] Refactor GetQuery and GetPostForm
  • [NEW] Add contribution guide
  • [FIX] Corrected typos in README
  • [FIX] Removed additional Iota
  • [FIX] Changed imports to gopkg instead of github in README (#733)
  • [FIX] Logger: skip ANSI color commands if output is not a tty

Gin 1.0rc2 (...)

  • [PERFORMANCE] Fast path for writing Content-Type.
  • [PERFORMANCE] Much faster 404 routing
  • [PERFORMANCE] Allocation optimizations
  • [PERFORMANCE] Faster root tree lookup
  • [PERFORMANCE] Zero overhead, String() and JSON() rendering.
  • [PERFORMANCE] Faster ClientIP parsing
  • [PERFORMANCE] Much faster SSE implementation
  • [NEW] Benchmarks suite
  • [NEW] Bind validation can be disabled and replaced with custom validators.
  • [NEW] More flexible HTML render
  • [NEW] Multipart and PostForm bindings
  • [NEW] Adds method to return all the registered routes
  • [NEW] Context.HandlerName() returns the main handler's name
  • [NEW] Adds Error.IsType() helper
  • [FIX] Binding multipart form
  • [FIX] Integration tests
  • [FIX] Crash when binding non struct object in Context.
  • [FIX] RunTLS() implementation
  • [FIX] Logger() unit tests
  • [FIX] Adds SetHTMLTemplate() warning
  • [FIX] Context.IsAborted()
  • [FIX] More unit tests
  • [FIX] JSON, XML, HTML renders accept custom content-types
  • [FIX] gin.AbortIndex is unexported
  • [FIX] Better approach to avoid directory listing in StaticFS()
  • [FIX] Context.ClientIP() always returns the IP with trimmed spaces.
  • [FIX] Better warning when running in debug mode.
  • [FIX] Google App Engine integration. debugPrint does not use os.Stdout
  • [FIX] Fixes integer overflow in error type
  • [FIX] Error implements the json.Marshaller interface
  • [FIX] MIT license in every file

Gin 1.0rc1 (May 22, 2015)

  • [PERFORMANCE] Zero allocation router
  • [PERFORMANCE] Faster JSON, XML and text rendering
  • [PERFORMANCE] Custom hand optimized HttpRouter for Gin
  • [PERFORMANCE] Misc code optimizations. Inlining, tail call optimizations
  • [NEW] Built-in support for golang.org/x/net/context
  • [NEW] Any(path, handler). Create a route that matches any path
  • [NEW] Refactored rendering pipeline (faster and static typed)
  • [NEW] Refactored errors API
  • [NEW] IndentedJSON() prints pretty JSON
  • [NEW] Added gin.DefaultWriter
  • [NEW] UNIX socket support
  • [NEW] RouterGroup.BasePath is exposed
  • [NEW] JSON validation using go-validate-yourself (very powerful options)
  • [NEW] Completed suite of unit tests
  • [NEW] HTTP streaming with c.Stream()
  • [NEW] StaticFile() creates a router for serving just one file.
  • [NEW] StaticFS() has an option to disable directory listing.
  • [NEW] StaticFS() for serving static files through virtual filesystems
  • [NEW] Server-Sent Events native support
  • [NEW] WrapF() and WrapH() helpers for wrapping http.HandlerFunc and http.Handler
  • [NEW] Added LoggerWithWriter() middleware
  • [NEW] Added RecoveryWithWriter() middleware
  • [NEW] Added DefaultPostFormValue()
  • [NEW] Added DefaultFormValue()
  • [NEW] Added DefaultParamValue()
  • [FIX] BasicAuth() when using custom realm
  • [FIX] Bug when serving static files in nested routing group
  • [FIX] Redirect using built-in http.Redirect()
  • [FIX] Logger when printing the requested path
  • [FIX] Documentation typos
  • [FIX] Context.Engine renamed to Context.engine
  • [FIX] Better debugging messages
  • [FIX] ErrorLogger
  • [FIX] Debug HTTP render
  • [FIX] Refactored binding and render modules
  • [FIX] Refactored Context initialization
  • [FIX] Refactored BasicAuth()
  • [FIX] NoMethod/NoRoute handlers
  • [FIX] Hijacking http
  • [FIX] Better support for Google App Engine (using log instead of fmt)

Gin 0.6 (Mar 9, 2015)

  • [NEW] Support multipart/form-data
  • [NEW] NoMethod handler
  • [NEW] Validate sub structures
  • [NEW] Support for HTTP Realm Auth
  • [FIX] Unsigned integers in binding
  • [FIX] Improve color logger

Gin 0.5 (Feb 7, 2015)

  • [NEW] Content Negotiation
  • [FIX] Solved security bug that allow a client to spoof ip
  • [FIX] Fix unexported/ignored fields in binding

Gin 0.4 (Aug 21, 2014)

  • [NEW] Development mode
  • [NEW] Unit tests
  • [NEW] Add Content.Redirect()
  • [FIX] Deferring WriteHeader()
  • [FIX] Improved documentation for model binding

Gin 0.3 (Jul 18, 2014)

  • [PERFORMANCE] Normal log and error log are printed in the same call.
  • [PERFORMANCE] Improve performance of NoRouter()
  • [PERFORMANCE] Improve context's memory locality, reduce CPU cache faults.
  • [NEW] Flexible rendering API
  • [NEW] Add Context.File()
  • [NEW] Add shortcut RunTLS() for http.ListenAndServeTLS
  • [FIX] Rename NotFound404() to NoRoute()
  • [FIX] Errors in context are purged
  • [FIX] Adds HEAD method in Static file serving
  • [FIX] Refactors Static() file serving
  • [FIX] Using keyed initialization to fix app-engine integration
  • [FIX] Can't unmarshal JSON array, #63
  • [FIX] Renaming Context.Req to Context.Request
  • [FIX] Check application/x-www-form-urlencoded when parsing form

Gin 0.2b (Jul 08, 2014)

  • [PERFORMANCE] Using sync.Pool to allocatio/gc overhead
  • [NEW] Travis CI integration
  • [NEW] Completely new logger
  • [NEW] New API for serving static files. gin.Static()
  • [NEW] gin.H() can be serialized into XML
  • [NEW] Typed errors. Errors can be typed. Internet/external/custom.
  • [NEW] Support for Godeps
  • [NEW] Travis/Godocs badges in README
  • [NEW] New Bind() and BindWith() methods for parsing request body.
  • [NEW] Add Content.Copy()
  • [NEW] Add context.LastError()
  • [NEW] Add shortcut for OPTIONS HTTP method
  • [FIX] Tons of README fixes
  • [FIX] Header is written before body
  • [FIX] BasicAuth() and changes API a little bit
  • [FIX] Recovery() middleware only prints panics
  • [FIX] Context.Get() does not panic anymore. Use MustGet() instead.
  • [FIX] Multiple http.WriteHeader() in NotFound handlers
  • [FIX] Engine.Run() panics if http server can't be set up
  • [FIX] Crash when route path doesn't start with '/'
  • [FIX] Do not update header when status code is negative
  • [FIX] Setting response headers before calling WriteHeader in context.String()
  • [FIX] Add MIT license
  • [FIX] Changes behaviour of ErrorLogger() and Logger()