Ephex2 [Wed, 26 Jan 2022 22:44:20 +0000 (17:44 -0500)]
general: Fix issue causing log threads to hang indefinitely when print() panics
The function printIfNotPrinted() defined for DistinctLogger unlocked the mutex within
the logger only after the print() function ran. If print panics, the mutex would stay
locked and future attempts to read or write from the logger mutex would cause the goroutine
to hang indefinitely.
Deferred the unlocking of the mutex to prevent this. Also, put l.m[key] before the print()
call since this will prevent another bug where the same warning potentially gets logged
multiple times if the print() call panics.
When a template calls the .Translations function and a
Hugo environment is using multiple output formats,
a template that calls methods like .Summary and .Len on
each translation will unexpectedly show empty return
values for these methods.
This is because each pageOutput's ContentProvider is
assigned to a page.NopPage in newPageOutput. When
*HugoSites.render assigns pageContentOutputs to
pageOutputs in *pageState.shiftToOutputFormat, it
reuses pageContentOutputs from other pageOutputs,
leaving some pageContentOutputs as NopPages. While this
approach conserves resources, sometimes it means that
a template will unexpectedly call a method on a
pageContentOutput that is actually a NopPage.
In the case of ContentProvider methods called on
translations for alternative output formats, the methods
were called on NopPages.
This change introduces LazyContentProvider, which
performs late initialization when one of its methods is
called. This way, we can reuse content in "normal" cases
but ensure that ContentProvider methods work as expected
when a pageOutput is not assigned a pageContentOutput
during the initial pre-render phase.
In page.NewOutputFormat, we take an output.Format f and use it to
create a page.OutputFormat. If the format is canonical, we assign
the final OutputFormat's Rel to "canonical" rather than using
f.Rel. However, this leads to unexpected behavior for custom
output formats, where a user can define a "rel" for a format
via the config file.
For example, the standard for "humans.txt" files requires using
rel="author" in HTML "link" elements. Meanwhile, humans.txt is
usually the only format used for its content. As a result, for
Hugo configurations that define a humans.txt custom output format,
Hugo will render "link" elements to content in this format with
rel="canonical," rather than "author" as required by the standard.
This commit changes page.NewOutputFormat to check whether a given
format is user defined and, if so, skips assigning Rel to
"canonical," even if isCanonical is true.
* Before this commit, when you had static files in the root of /content and no /public folder, that folder would not be created unless the /static syncer had already run.
* So, with a common pattern doing `rm -rf public && hugo` would the fail now and then because /static and /content are processed in parallel (unless you have cleanDestinationDir=true)
* This was even worse before commit 0b918e131fe523188b820d1e3fa0b08251abde69 – a frozen build.
This was introduced in Go 1.15. We do set the GOPATH, which should be enough, but #9309 indicate that's not the case on every platform (GitHub Actions).
Always use content to resolve content type in resources.GetRemote
This is a security hardening measure; don't trust the URL extension or any `Content-Type`/`Content-Disposition` header on its own, always look at the file content using Go's `http.DetectContentType`.
This commit also adds ttf and otf media type definitions to Hugo.
Paul Gottschling [Fri, 17 Dec 2021 07:35:21 +0000 (02:35 -0500)]
Allow for return partials with falsy arguments (#9298)
Partials with returns values are parsed, then inserted into a
partial return wrapper via wrapInPartialReturnWrapper in order
to assign the return value via *contextWrapper.Set. The
predefined wrapper template for partials inserts a partial's nodes
into a "with" template action in order to set dot to a
*contextWrapper within the partial. However, because "with" is
skipped if its argument is falsy, partials with falsy arguments
were not being evaluated.
This replaces the "with" action in the partial wrapper with a
"range" action that isn't skipped if .Arg is falsy.
Add some basic security policies with sensible defaults
This ommmit contains some security hardening measures for the Hugo build runtime.
There are some rarely used features in Hugo that would be good to have disabled by default. One example would be the "external helpers".
For `asciidoctor` and some others we use Go's `os/exec` package to start a new process.
These are a predefined set of binary names, all loaded from `PATH` and with a predefined set of arguments. Still, if you don't use `asciidoctor` in your project, you might as well have it turned off.
You can configure your own in the new `security` configuration section, but the defaults are configured to create a minimal amount of site breakage. And if that do happen, you will get clear instructions in the loa about what to do.
The default configuration is listed below. Note that almost all of these options are regular expression _whitelists_ (a string or a slice); the value `none` will block all.
4eb10c1a9 Set a sensible maxAge on the image cache 2c37f4f89 Update lists.md 8690c018f Update introduction.md 0458c3d88 Update index.md 150982f5e Update index.md 50dc0b6b9 Update multilingual.md 648598090 Configure image cache to use :cacheDir/images 4dfb523c3 Update introduction.md b94d42e6f Add text to social images d3253d2aa Add resources/_gen/images/ to .gitignore 8a56e1dfd Delete resources/_gen/images 1521e79b6 Update introduction.md c7110a597 Update introduction.md f7c4d220f Update introduction.md c14ecf1ff Update introduction.md c4b388c20 Fix shortcode in hugo-pipes/introduction (#1605) d9876bd68 Update introduction.md a39a532d5 Update introduction.md fa8758122 netlify: Hugo 0.90.1 50cc40570 Update Contribute to Hugo Development fc98fc82c Add .vscode dir to .gitignore (#1602) 8f8bcdefc Add frontmatter param to code-toggle shortcode (#1601) f3b432c7c Add markdownlint configuration file (#1597) 7ea3aea92 netlify: Bump to 0.90.0 e2b6f990b docs: Regenerate docs helper c02259e33 Merge commit '8d9511a08f14260cbfb73119e4afae50e5a9966d' 2e3573899 Add custom font support to images.Text 3186e6458 images: Text filter that draws text with the given options (#9239) 424f219eb tpl/transform: Optional options for highlight func 7993f17d0 Implement XML data support 1eb9d34cf Make resources.Get use a file cache for remote resources 8a0fffd56 Add remote support to resources.Get