Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Issues verifying certificate connecting with HTTPS #5266

Closed
theodorton opened this issue Nov 9, 2017 · 24 comments
Closed

Issues verifying certificate connecting with HTTPS #5266

theodorton opened this issue Nov 9, 2017 · 24 comments
Milestone

Comments

@theodorton
Copy link

theodorton commented Nov 9, 2017

Crystal version

~/code/nabobil/autotoll · (master±)
⟩ crystal -v
Crystal 0.23.1 (2017-10-12) LLVM 4.0.1

How to reproduce

# test.cr
require "http/client"

client = HTTP::Client.new("maps.googleapis.com", tls: true)
client.get "/"

Then run crystal run test.cr.

Expected outcome

No errors raised, or some redirect.

Actual outcome

SSL_connect: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed (OpenSSL::SSL::Error)
0x10d990e45: *CallStack::unwind:Array(Pointer(Void)) at ??
0x10d990de1: *CallStack#initialize:Array(Pointer(Void)) at ??
0x10d990db8: *CallStack::new:CallStack at ??
0x10d98d615: *raise<OpenSSL::SSL::Error>:NoReturn at ??
0x10da33571: *OpenSSL::SSL::Socket::Client#initialize<TCPSocket, OpenSSL::SSL::Context::Client, Bool, String>:Nil at ??
0x10da333ec: *OpenSSL::SSL::Socket::Client::new:context:sync_close:hostname<TCPSocket, OpenSSL::SSL::Context::Client, Bool, String>:OpenSSL::SSL::Socket::Client at ??
0x10da29c91: *HTTP::Client#socket:(OpenSSL::SSL::Socket+ | TCPSocket+) at ??
0x10da299eb: *HTTP::Client#exec_internal_single<HTTP::Request>:(HTTP::Client::Response | Nil) at ??
0x10da26f7c: *HTTP::Client#exec_internal<HTTP::Request>:HTTP::Client::Response at ??
0x10da26e72: *HTTP::Client#exec<HTTP::Request>:HTTP::Client::Response at ??
0x10da26bdd: *HTTP::Client#exec<String, String, Nil, Nil>:HTTP::Client::Response at ??
0x10da26bb7: *HTTP::Client#get<String>:HTTP::Client::Response at ??
0x10d97bcba: __crystal_main at ??
0x10d98c678: main at ??

Notes

  • This also happens when running the code within the official docker image for 0.23.1.
  • I've managed to get it to pass randomly, but I believe there is some cipher requirement and that the certificates differ somewhat between the servers behind this domain
  • When running openssl s_client -connect maps.googleapis.com:443 -tls1_2 I get:
CONNECTED(00000003)
depth=2 C = US, O = GeoTrust Inc., CN = GeoTrust Global CA
verify return:1
depth=1 C = US, O = Google Inc, CN = Google Internet Authority G2
verify return:1
depth=0 C = US, ST = California, L = Mountain View, O = Google Inc, CN = *.googleapis.com
verify return:1
---
...
...
  • It works if I setup a similar example in Ruby:
require 'net/http'
require 'uri'

uri = URI('https://maps.googleapis.com/')

Net::HTTP.start(uri.host, uri.port, use_ssl: true) do |http|
  request = Net::HTTP::Get.new uri
  response = http.request request # Net::HTTPResponse object
  puts response
end
  • In other words, I don't believe this is an issue with my openssl configuration.
@theodorton theodorton changed the title Issues connecting HTTPS Issues verifying certificate connecting with HTTPS Nov 9, 2017
@Sija
Copy link
Contributor

Sija commented Nov 9, 2017

Duplicate of #3477.

See also composer/composer#3346 and relevant question on SO.

@theodorton
Copy link
Author

I'm not sure, I'm able to connect with TLS to github.com:

HTTP::Client.get("https://github.com/") # This works
HTTP::Client.get("https://maps.googleapis.com/") # This doesn't

I belive there might be something with the allowed cipher suites as SSLLabs Test results for maps.googleapis.com show that the root certificate is insecure.

@asterite
Copy link
Member

asterite commented Nov 9, 2017

I face this problem with some URLs. I think it depends on the version of openssl. Ruby ships with one version of openssl and that's very good: reproducible builds and behavior no matter what your system is. In Crystal we dynamically link to the openssl that's present in the system and it leads to these random and hard to reproduce problems (because we have to have your version of openssl in our machines).

I wish we could just ship Crystal with one version of openssl, one version of llvm, one version of libpcre, one version of libxml2, etc., so that everything works exactly the same everywhere...

@RX14
Copy link
Contributor

RX14 commented Nov 9, 2017

@asterite And then what if openssl has a security bug? If we distribute our own libraries we are now distro maintainers. We have to follow the security bugs closely with a quick response, and possibly backport patches, and deal with a whole bunch of things we don'y have time to do. This is the distro maintainer's job, not ours, it's already done for us.

I've never had an openssl problem with crystal on archlinux, i've only seem people have problems on osx and on debian-based (read: ancient versions of openssl) distros.

@theodorton
Copy link
Author

theodorton commented Nov 10, 2017

I don't have any strong opinions on whether to bundle openssl with the compiler or not, but I think this doing VERIFY_NONE as a workaround (which is mentioned in the linked issues) here unsatisfactory.

I tried to use OpenSSL::SSL::Context::Client#add_x509_verify_flags(OpenSSL::SSL::X509VerifyFlags:: TRUSTED_FIRST) which was mentioned as a fix in a Stack Overflow issue I found yesterday. I'm unable to find it again now, but the problem I ran into was that OpenSSL::SSL::X509VerifyFlags was not defined. Seems like there's a compiler flag for that constant that wasn't set.

It seems highly related, but I'm not sure? I'm building Crystal via Homebrew. Could it be that it's missing some SSL/crypto lib while compiling? Or that the compiled bottle comes without this support?

Edit: I'm trying to install from homebrew with --build-from-source to see if that resolves the issue.
Update: No, it doesn't help. I'm still getting undefined constant OpenSSL::OPENSSL_102 errors when attempting to use X509VerifyFlags.

@RX14
Copy link
Contributor

RX14 commented Nov 10, 2017

It appears to me that openssl's API is a mess, perhaps we should implement the libtls API using openssl (in C, how openssl wants us to), and then use that as the base for crystal's TLS module and remove OpenSSL.

@theodorton
Copy link
Author

The workaround here is:

context = OpenSSL::SSL::Context::Client.insecure
client = HTTP::Client.new("maps.googleapis.com", tls: context)

I'm not sure if that's a very good workaround though, as if I point the client to expired.badssl.com, I'm not getting any errors.

@ysbaddaden
Copy link
Contributor

Hence the insecure: you basically accept whatever OpenSSL supports —I'm not even sure it verifies certificates. Would you be willing to take the Client.insecure and tweak it until you find the culprit in defaults?

@theodorton
Copy link
Author

theodorton commented Nov 14, 2017

@ysbaddaden Yes, we're ok with Client.insecure for now, but it doesn't seem to verify certificates. I think that should probably be noted in the documentation. Currently the docs say:

Use this only if undoing the defaults that new sets is too much hassle.

Not sure if I can spend more time at the moment looking into the defaults. I'm not very fluent in TLS/SSL terminology so I'd just have to guess what the different options represent. The failures were pretty consistent with that hostname, even when I ran it in the Docker image for 0.23.1.

I still think this is highly relevant:

I'm still getting undefined constant OpenSSL::OPENSSL_102 errors when attempting to use X509VerifyFlags.

As I believe using the OpenSSL::SSL::X509VerifyFlags:: TRUSTED_FIRST might work.

@vladfaust
Copy link
Contributor

Any updates? I'm basically unable to connect to any of Google's APIs 😕

require "http/client"
client = HTTP::Client.new(URI.parse("https://google.com"))
p client.get("/")

It raises the same certificate verify failed (OpenSSL::SSL::Error).

@will
Copy link
Contributor

will commented Jan 8, 2018

Just chiming into say that I'm having this problem on heroku with google oauth.

Also since the oauth::client doesn't take a tls: context, the workaround of not verifying doesn't work, unless you monkey patch

@waj
Copy link
Member

waj commented Jan 17, 2018

I just sent a PR with a potential fix. Please, let me know if it works for you and also provide some comments on the solution if possible.

@codenoid
Copy link
Contributor

codenoid commented Jan 24, 2018

Crystal 0.24.1 (2017-12-22)

LLVM: 4.0.0
Default target: x86_64-unknown-linux-gnu

still error when accessing maps.google.com

SSL_connect: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed (OpenSSL::SSL::Error)
  from /usr/share/crystal/src/openssl/ssl/socket.cr:34:9 in 'initialize'
  from OpenSSL::SSL::Socket::Client::new:context:sync_close:hostname<TCPSocket, OpenSSL::SSL::Context::Client, Bool, String>:OpenSSL::SSL::Socket::Client
  from /usr/share/crystal/src/http/client.cr:657:5 in 'socket'
  from /usr/share/crystal/src/http/client.cr:500:5 in 'exec_internal_single'
  from /usr/share/crystal/src/http/client.cr:486:5 in 'exec_internal'
  from /usr/share/crystal/src/http/client.cr:482:5 in 'exec'
  from /usr/share/crystal/src/http/client.cr:585:5 in 'exec'
  from /usr/share/crystal/src/http/client.cr:612:7 in 'exec'
  from /usr/share/crystal/src/http/client.cr:329:3 in 'get'
  from src/facebook.cr:32:5 in '__crystal_main'
  from /usr/share/crystal/src/crystal/main.cr:11:3 in '_crystal_main'
  from /usr/share/crystal/src/crystal/main.cr:112:5 in 'main_user_code'
  from /usr/share/crystal/src/crystal/main.cr:101:7 in 'main'
  from /usr/share/crystal/src/crystal/main.cr:135:3 in 'main'
  from __libc_start_main
  from _start
  from ???

oh wait, i'll try @waj PR

Update fixed with @waj PR (#5601)

Update

Python Script :

import requests

headers = {
    'Host': 'maps.googleapis.com',
    'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:54.0) Gecko/20100101 Firefox/54.0',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    'Accept-Language': 'en-US,en;q=0.5',
    'Referer': 'https://google-developers.appspot.com/maps/documentation/utils/geocoder/embed',
    'Connection': 'keep-alive',
    'Upgrade-Insecure-Requests': '1',
    'Cache-Control': 'max-age=0',
}

params = (
    ('', ''),
    ('address', 'Kalibata City'),
)

response = requests.get('https://maps.googleapis.com/maps/api/geocode/json', headers=headers, params=params)

print response.text

""" result (200) :
{
   "results" : [
      {
         "address_components" : [
            {
               "long_name" : "Kalibata City",
               "short_name" : "Kalibata City",
               "types" : [ "premise" ]
            },
            {
               "long_name" : "1",
               "short_name" : "1",
               "types" : [ "street_number" ]
            },
            {
               "long_name" : "Jalan Raya Kalibata",
               "short_name" : "Jl. Raya Kalibata",
               "types" : [ "route" ]
            },
            {
               "long_name" : "Rawajati",
               "short_name" : "Rawajati",
               "types" : [ "administrative_area_level_4", "political" ]
            },
            {
               "long_name" : "Pancoran",
               "short_name" : "Pancoran",
               "types" : [ "administrative_area_level_3", "political" ]
            },
            {
               "long_name" : "Kota Jakarta Selatan",
               "short_name" : "Kota Jakarta Selatan",
               "types" : [ "administrative_area_level_2", "political" ]
            },
            {
               "long_name" : "Daerah Khusus Ibukota Jakarta",
               "short_name" : "Daerah Khusus Ibukota Jakarta",
               "types" : [ "administrative_area_level_1", "political" ]
            },
            {
               "long_name" : "Indonesia",
               "short_name" : "ID",
               "types" : [ "country", "political" ]
            },
            {
               "long_name" : "12750",
               "short_name" : "12750",
               "types" : [ "postal_code" ]
            }
         ],
         "formatted_address" : "Kalibata City, Jl. Raya Kalibata No.1, Rawajati, Pancoran, Kota Jakarta Selatan, Daerah Khusus Ibukota Jakarta 12750, Indonesia",
         "geometry" : {
            "bounds" : {
               "northeast" : {
                  "lat" : -6.2557049,
                  "lng" : 106.8546168
               },
               "southwest" : {
                  "lat" : -6.258145,
                  "lng" : 106.8493882
               }
            },
            "location" : {
               "lat" : -6.2572684,
               "lng" : 106.8521429
            },
            "location_type" : "GEOMETRIC_CENTER",
            "viewport" : {
               "northeast" : {
                  "lat" : -6.255575969708497,
                  "lng" : 106.8546168
               },
               "southwest" : {
                  "lat" : -6.258273930291502,
                  "lng" : 106.8493882
               }
            }
         },
         "place_id" : "ChIJJ1jytbLzaS4RcqOnV26PRPs",
         "types" : [ "premise" ]
      }
   ],
   "status" : "OK"
}
"""

Crystal :

require "http/client"
a = HTTP::Client.get("https://maps.googleapis.com/maps/api/geocode/json?&address=Kalibata%20City", headers: HTTP::Headers{"User-Agent" => "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:54.0) Gecko/20100101 Firefox/54.0", "Accept" => "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "Accept-Language" => "en-US,en;q=0.5", "Accept-Encoding" => "gzip, deflate, br", "Referer" => "https://google-developers.appspot.com/maps/documentation/utils/geocoder/embed", "Connection" => "keep-alive", "Upgrade-Insecure-Requests" => "1", "Cache-Control" => "max-age=0"})
puts a.body

# result (200) :
# �VM@�+:Y�^�QwGL�����zۥ�;O�&�zU!dDp}E?t-�E��F1#�S�at�PHq�V@@D�1DoR6�N�.j)z76���+]Ig��(a<n32L�X.;x�t(Mh"g)[�@! xI`*TD$!+y/,���-yϙ<�3xL^�0*gV~[s8��MWKjwcr4kb*:Q�m."ߒn8�9*{SQP���3TVR7�E�h_E
#    Du5{ZGԡE;i,YFk4j_<hT	U)8>j�ixRm1y`<��X&xJDC˱<s49+ii8#o�nimD}S6�B�$Q9q<X}
#                                                                            �YПv.~ @G3X̕a�}k 
  • lolno

@codenoid
Copy link
Contributor

codenoid commented Jan 24, 2018

@waj @ysbaddaden @RX14 the endpoint has not been verified ?

UPDATE : when maps.googleapis.com returning 400 status code, the response.body is not encrypted (just like usually response body / html page that showing a error)

Replace %20 with a space :

<!DOCTYPE html>
<html lang=en>
  <meta charset=utf-8>
  <meta name=viewport content="initial-scale=1, minimum-scale=1, width=device-width">
  <title>Error 400 (Bad Request)!!1</title>
  <style>
    *{margin:0;padding:0}html,code{font:15px/22px arial,sans-serif}html{background:#fff;color:#222;padding:15px}body{margin:7% auto 0;max-width:390px;min-height:180px;padding:30px 0 15px}* > body{background:url(//www.google.com/images/errors/robot.png) 100% 5px no-repeat;padding-right:205px}p{margin:11px 0 22px;overflow:hidden}ins{color:#777;text-decoration:none}a img{border:0}@media screen and (max-width:772px){body{background:none;margin-top:0;max-width:none;padding-right:0}}#logo{background:url(//www.google.com/images/branding/googlelogo/1x/googlelogo_color_150x54dp.png) no-repeat;margin-left:-5px}@media only screen and (min-resolution:192dpi){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat 0% 0%/100% 100%;-moz-border-image:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) 0}}@media only screen and (-webkit-min-device-pixel-ratio:2){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat;-webkit-background-size:100% 100%}}#logo{display:inline-block;height:54px;width:150px}
  </style>
  <a href=//www.google.com/><span id=logo aria-label=Google></span></a>
  <p><b>400.</b> <ins>That’s an error.</ins>
  <p>Your client has issued a malformed or illegal request.  <ins>That’s all we know.</ins>

@RX14
Copy link
Contributor

RX14 commented Jan 24, 2018

@codenoid it's because you specify Accept-Encoding in the request headers. You're telling crystal you accept the gzip encoding, and so crystal gives you back your gzip encoding.

Please don't copy your browser's headers into crystal code, just

require "http"

HTTP::Client.get("https://maps.googleapis.com/maps/api/geocode/json?&address=Kalibata%20City")

is enough and you get a nice response by default.

@codenoid
Copy link
Contributor

codenoid commented Jan 25, 2018

wat, why it's work ? because when i try with simple GET, i got 400 :/ aarrrg

UPDATE

at 02:30 and i;m tired, i don't encode the url

UPDATE

at 08:59, i try @RX14 code, and it's give me a wanted response, so fixed by sleep 👍

UPDATE

I sleep at 05:00

UPDATE

I react :hooray: to @waj comment

matiasgarciaisaia pushed a commit that referenced this issue Jan 25, 2018
…L::Context::Server

Fixes #5266

x509 certificates have a purpose associated to them. Clients should
verify that the server's certificate is intended to be used in a
server, and servers should check the client's certificate is
intended to be used for clients.

Crystal was mistakingly checking those mixed up.

See https://wiki.openssl.org/index.php?title=Manual:X509(1)&oldid=1797#CERTIFICATE_EXTENSIONS
See https://tools.ietf.org/html/rfc5280#section-4.2.1.3
@matiasgarciaisaia matiasgarciaisaia added this to the 0.24.2 milestone Jan 25, 2018
matiasgarciaisaia pushed a commit that referenced this issue Jan 25, 2018
…L::Context::Server

Fixes #5266

x509 certificates have a purpose associated to them. Clients should
verify that the server's certificate is intended to be used in a
server, and servers should check the client's certificate is
intended to be used for clients.

Crystal was mistakingly checking those mixed up.

See https://wiki.openssl.org/index.php?title=Manual:X509(1)&oldid=1797#CERTIFICATE_EXTENSIONS
See https://tools.ietf.org/html/rfc5280#section-4.2.1.3
chris-huxtable pushed a commit to chris-huxtable/crystal that referenced this issue Apr 6, 2018
…L::Context::Server

Fixes crystal-lang#5266

x509 certificates have a purpose associated to them. Clients should
verify that the server's certificate is intended to be used in a
server, and servers should check the client's certificate is
intended to be used for clients.

Crystal was mistakingly checking those mixed up.

See https://wiki.openssl.org/index.php?title=Manual:X509(1)&oldid=1797#CERTIFICATE_EXTENSIONS
See https://tools.ietf.org/html/rfc5280#section-4.2.1.3
chris-huxtable added a commit to chris-huxtable/crystal that referenced this issue Apr 6, 2018
commit 680d3e0
Author: TSUYUSATO Kitsune <[email protected]>
Date:   Fri Apr 6 08:24:25 2018 +0900

    Format: fix formatting call having trailing comma with block (crystal-lang#5855)

    Fix crystal-lang#5853

commit f22d689
Author: TSUYUSATO Kitsune <[email protected]>
Date:   Fri Apr 6 08:18:23 2018 +0900

    Refactor Colorize#surround (crystal-lang#4196)

    * Refactor Colorize#surround

    This is one of the separations of crystal-lang#3925.

    Remove `surround` and rename `push` to `surround`, now `push` is
    derecated.
    (This reason is dscribed in crystal-lang#3925 (comment))

    * Use #surround instead of #push

    * Apply 'crystal tool format'

    * Remove Colorize#push

commit 12488c2
Author: Benoit de Chezelles <[email protected]>
Date:   Thu Apr 5 07:49:51 2018 -0700

    Ensure cleanup tempfile after some specs (crystal-lang#5810)

    * Ensure cleanup tempfile after some specs

    * Fix compiler spec

commit ef85244
Author: TSUYUSATO Kitsune <[email protected]>
Date:   Thu Apr 5 20:59:33 2018 +0900

    Format: fix formatter bug on nesting begin/end

commit 8c737a0
Author: TSUYUSATO Kitsune <[email protected]>
Date:   Thu Apr 5 22:54:20 2018 +0900

    Remove duplicated indefinite articles 'a a' in char.cr doc (crystal-lang#5894)

    * Fix duplicated articles 'a a' in char.cr doc

    * Shorten sentence

    crystal-lang#5894 (comment)

commit 73989e8
Author: maiha <[email protected]>
Date:   Thu Apr 5 22:43:43 2018 +0900

    fix example codes (2018-04) (crystal-lang#5912)

commit b62c4e1
Author: Sijawusz Pur Rahnama <[email protected]>
Date:   Sun Apr 1 16:09:29 2018 +0200

    Refactor out variable name

commit c17ce2d
Author: Sankha Narayan Guria <[email protected]>
Date:   Thu Apr 5 01:58:11 2018 -0400

    UUID implements inspect (crystal-lang#5574)

commit 106d44d
Author: TSUYUSATO Kitsune <[email protected]>
Date:   Wed Apr 4 23:01:43 2018 +0900

    MatchData: correct sample code for duplicated named capture

    Ref: crystal-lang#5912 (comment)

commit 011e688
Author: Paul Smith <[email protected]>
Date:   Wed Apr 4 13:37:41 2018 -0400

    Small typo fix in bash completion

commit b5a3a65
Author: Johannes Müller <[email protected]>
Date:   Wed Apr 4 15:59:33 2018 +0200

    Fix File.join with empty path component (crystal-lang#5915)

commit 9662abe
Author: TSUYUSATO Kitsune <[email protected]>
Date:   Wed Apr 4 16:42:42 2018 +0900

    Fix `String#tr` 1 byte `from` optimization bug

    Ref: crystal-lang#5912 (comment)

    `"aabbcc".tr("a", "xyz")` yields `"xyzxyzbbcc"` currently.
    Of course it is unintentional behavior, in Ruby it yields `"xxbbcc"` and
    on shell `echo aabbcc | tr a xyz` shows `xxbbcc`.

commit ec423eb
Author: TSUYUSATO Kitsune <[email protected]>
Date:   Wed Apr 4 02:38:21 2018 +0900

    Fix crystal-lang#5907 formatter bug (crystal-lang#5909)

    * Fix crystal-lang#5907 formatter bug

    * Apply new formatter

commit 5056859
Author: TSUYUSATO Kitsune <[email protected]>
Date:   Wed Apr 4 02:33:07 2018 +0900

    Pass an unhandled exception to at_exit block as second argument (crystal-lang#5906)

    * Pass an unhandled exception to at_exit block as second argument

    Follow up crystal-lang#1921

    It is better in some ways:

      - it does not need a new exception like `SystemExit`.
      - it does not break compatibility in most cases because block fill up lacking arguments.

    * Add documentation for at_exit block arguments

    * Update `at_exit` block arguments description

    crystal-lang#5906 (comment)
    Thank you @jhass.

commit 82caaf0
Author: TSUYUSATO Kitsune <[email protected]>
Date:   Tue Apr 3 23:18:01 2018 +0900

    Semantic: don't guess ivar type from argument after assigned (crystal-lang#5166)

commit bb5bcd2
Author: TSUYUSATO Kitsune <[email protected]>
Date:   Tue Apr 3 21:00:27 2018 +0900

    Colorize: abstract colors and support 8bit and true color (crystal-lang#5902)

    * Colorize: abstract colors and support 8bit and true color

    Closes crystal-lang#5900

    * Color#fore and #back take io to avoid memory allocation

    * Use character literal instead of 1 length string

commit 7eae5aa
Author: Benoit de Chezelles <[email protected]>
Date:   Mon Apr 2 16:43:52 2018 -0700

    Use LibCrystalMain.__crystal_main directly (crystal-lang#5899)

commit 60f675c
Author: TSUYUSATO Kitsune <[email protected]>
Date:   Tue Apr 3 08:42:03 2018 +0900

    Format: fix indentation after backslash newline (crystal-lang#5901)

    crystal-lang#5892 (comment)

commit 4d2ad83
Author: TSUYUSATO Kitsune <[email protected]>
Date:   Tue Apr 3 08:21:06 2018 +0900

    Prevent invoking `method_added` macro hook recursively (crystal-lang#5159)

    Fixed crystal-lang#5066

commit e17823f
Author: TSUYUSATO Kitsune <[email protected]>
Date:   Tue Apr 3 07:56:52 2018 +0900

    Format: fix indentation in collection with comment after beginning delimiter (crystal-lang#5893)

commit 49d722c
Author: Chris Hobbs <[email protected]>
Date:   Sat Mar 31 19:30:54 2018 +0100

    Print exception cause when inspecting with backtrace (crystal-lang#5833)

commit 945557b
Author: Sijawusz Pur Rahnama <[email protected]>
Date:   Sat Mar 31 20:30:15 2018 +0200

    Use Char for single char strings (crystal-lang#5882)

commit 4532389
Author: r00ster91 <[email protected]>
Date:   Sat Mar 31 15:35:08 2018 +0200

    Fix Random example (crystal-lang#5728)

commit 5cd78fa
Author: Benoit de Chezelles <[email protected]>
Date:   Fri Mar 30 15:29:30 2018 -0700

    Allow a path to declare a constant (crystal-lang#5883)

    * Allow a path to declare a constant

    * Add spec for type keeping when creating a constant using a Path

commit f33a910
Author: Carl Hörberg <[email protected]>
Date:   Fri Mar 30 20:40:31 2018 +0200

    Enqueue senders in Channel#close (crystal-lang#5880)

    Fixes crystal-lang#5875

commit 0424b22
Author: r00ster91 <[email protected]>
Date:   Thu Mar 29 16:17:20 2018 +0200

    Fix HEREDOC error message grammar (crystal-lang#5887)

    * Fix HEREDOC error message grammar

    * Update parser_spec.cr

commit 4927ecc
Author: Benoit de Chezelles <[email protected]>
Date:   Thu Mar 29 05:06:03 2018 -0700

    Fix typo (crystal-lang#5884)

commit c2efaff
Author: Will <[email protected]>
Date:   Thu Mar 29 08:05:05 2018 -0400

    Update docs for Enum (crystal-lang#5885)

commit 0970ee9
Author: Benoit de Chezelles <[email protected]>
Date:   Wed Mar 28 08:04:10 2018 -0700

    Fix exit in at_exit handlers (crystal-lang#5413)

    * Fix exit/raise in at_exit handlers

    * Add specs for exit & at_exit

    * Refactor handler loop

    * Disallow nested at_exit handlers

    * Print an unhandled exception after all at_exit handlers

    * Use try for the unhandled exception handler

    * Move the proc creation inside AtExitHandlers

    * Fix doc

    * Use a separate list for exceptions registered to print after at_exit handlers

    * Don't early return, always check for exceptions

    * Don't use a list for unhandled exceptions, store only one

commit 400bd0e
Author: Mark <[email protected]>
Date:   Wed Mar 28 05:44:58 2018 -0700

    Documentation: Add API docs for Array sorting methods (crystal-lang#5637)

    * Documentation: Add API docs for Array sorting methods
    - Array#sort(&block : T, T -> Int32)
    - Array#sort!(&block : T, T -> Int32)
    - Array#sort_by(&block : T -> _)
    - Array#sort_by!(&block : T -> _)

    * Documentation: Add API docs for Array#swap

    * Documentation: Update based on code review
    - Add explicit return types for sorting methods
    - Update descriptions based on code review
    - Format code using crystal's format tool

    * Documentation: Remove comments about optional blocks from Array#sort! and Array#sort

    * Documentation: Update descriptions for Array sorting methods

commit bc1c7a9
Author: Johannes Müller <[email protected]>
Date:   Tue Mar 27 23:05:30 2018 +0200

    Fix typo in IO doc

commit 9f28c77
Author: Heaven31415 <[email protected]>
Date:   Tue Mar 27 15:22:39 2018 +0200

    Make #read doc more clear in io.cr (crystal-lang#5873)

commit 9980a1f
Author: Jakub Jirutka <[email protected]>
Date:   Sun Mar 25 00:43:00 2018 +0100

    Add support for target aarch64-linux-musl

commit 9adbb92
Author: Jakub Jirutka <[email protected]>
Date:   Sat Mar 24 20:24:18 2018 +0100

    Makefile: Fix redirect to stderr to be more portable (crystal-lang#5859)

    `>/dev/stderr` does not work in some environments. Moreover, all POSIX
    compliant shells supports standard `>&2` for redirect stdout to stderr.

commit dedc726
Author: Benoit de Chezelles <[email protected]>
Date:   Fri Mar 23 06:57:01 2018 -0700

    Fix parser block arg newline (crystal-lang#5737)

    * parser: Add spec for method def block argument with new lines

    * parser: Handle space or newline after def's block arg's type

commit 2d93603
Author: TSUYUSATO Kitsune <[email protected]>
Date:   Wed Mar 21 06:49:50 2018 +0900

    Regex: fix invalid #inspect result against %r{\/} (crystal-lang#5841)

    `p %r{\/}` shows `/\\//`. It is invalid regexp.

commit 502ef40
Author: Johannes Müller <[email protected]>
Date:   Mon Mar 19 14:25:25 2018 +0100

    Fix URI encoding in StaticFileHandler#redirect_to (crystal-lang#5628)

commit 5d5c9ac
Author: Lachlan Dowding <[email protected]>
Date:   Mon Mar 19 00:46:24 2018 +1000

    Add JSON support to UUID (crystal-lang#5551)

commit c0cdbc2
Author: Sijawusz Pur Rahnama <[email protected]>
Date:   Sun Mar 18 01:50:28 2018 +0100

    Use crystallang/crystal:nightly as docker nightly tag (crystal-lang#5837)

commit 863f301
Author: Anton Maminov <[email protected]>
Date:   Tue Mar 13 14:35:00 2018 +0200

    add HTTP OPTIONS method to HTTP::Client

commit 52fa3b2
Author: TSUYUSATO Kitsune <[email protected]>
Date:   Sat Jan 27 22:48:08 2018 +0900

    Don't use heredoc inside interpolation

    heredoc inside interpolation is buggy and it is unuseful.
    It is a bit hard to fix this, so I'd like to forbid.

commit 077e0da
Author: Johannes Müller <[email protected]>
Date:   Tue Mar 13 20:10:11 2018 +0100

    Add boundary check for seconds in Time#initialize (crystal-lang#5786)

    Previously, `Time#add_span` did not handle times at the min or max range with positive or
    negative offsets correctly because `@seconds` can legitimately be `< 0` or `> MAX_SECONDS`
    when the offset is taken into account.
    The boundary check was moved to the constructor to prevent manually
    creating an invalid date.

commit dd0ed8c
Author: Johannes Müller <[email protected]>
Date:   Mon Mar 12 23:11:01 2018 +0100

    CHANGELOG: Change release dates to use ISO format

    Changes dates in DD-MM-YYYY to ISO format YYYY-MM-DD

commit 50aacaa
Author: asterite <[email protected]>
Date:   Mon Feb 5 09:22:35 2018 -0300

    Macro methods: set type of empty array literal

commit ed0aad8
Author: Benoit de Chezelles <[email protected]>
Date:   Sun Mar 11 09:36:14 2018 -0700

    Fix internal doc (typo & old invalid comment) (crystal-lang#5806)

    * Fix typo

    * Remove BNF for old def declaration without parentheses

commit 10fb1ff
Author: Benoit de Chezelles <[email protected]>
Date:   Sun Mar 11 05:14:06 2018 -0700

    Use the same llvm's version as crystal-lang package for CI's darwin build (crystal-lang#5804)

    * Use llvm5 for darwin build in CI

    * Force binaries of llvm in PATH

    * DRY for the llvm's version crystal-lang's depends on

    * Install jq

commit e8916bc
Author: Benoit de Chezelles <[email protected]>
Date:   Sat Mar 10 16:16:20 2018 -0800

    Restore STDIN|OUT|ERR blocking state on exit (crystal-lang#5802)

commit 92c3d42
Author: Brian J. Cardiff <[email protected]>
Date:   Sat Mar 10 08:36:50 2018 -0300

    Update previous crystal release & docker images for ci to 0.24.2 (crystal-lang#5796)

    * Use crystallang/crystal-*-build docker images in ci

    * Update previous crystal to 0.24.2

commit 34b1101
Author: Johannes Müller <[email protected]>
Date:   Sat Mar 10 00:37:05 2018 +0100

    Add highlight to code tag in generated API docs (crystal-lang#5795)

commit 6696c88
Author: Donovan Glover <[email protected]>
Date:   Fri Mar 9 18:36:43 2018 -0500

    Fix unexpected h1 in CHANGELOG.md (crystal-lang#5576)

commit 731e9c0
Merge: 4f9ed8d 4ef9167
Author: Brian J. Cardiff <[email protected]>
Date:   Fri Mar 9 17:35:26 2018 -0300

    Merge changes from 0.24.2 with master

commit 4ef9167
Author: TSUYUSATO Kitsune <[email protected]>
Date:   Sat Mar 10 00:40:35 2018 +0900

    Improve String#pretty_print output by splitting newline (crystal-lang#5750)

    Like Ruby's `pp`, String#pretty_print splits its content by newline and
    shows each lines with joining `+` operator.

    I believe this improves readability against large multiline string on `p`.

commit 5a189cb
Author: Cody Byrnes <[email protected]>
Date:   Fri Mar 9 06:09:41 2018 -0800

    Fix: File.extname edge case for dot in path with no extension (crystal-lang#5790)

commit f0bd6b6
Author: r00ster91 <[email protected]>
Date:   Fri Mar 9 00:48:03 2018 +0100

    Update readline.cr (crystal-lang#5791)

commit 224d489
Author: Johannes Müller <[email protected]>
Date:   Fri Mar 9 00:36:23 2018 +0100

    Return early in Time#add_span if arguments are zero (crystal-lang#5787)

commit 9d2dfbb
Author: Konstantin Makarchev <[email protected]>
Date:   Thu Mar 8 03:34:24 2018 +0300

    add *.dwarf to auto generated .gitignore

commit 4f9ed8d
Author: Brian J. Cardiff <[email protected]>
Date:   Wed Mar 7 23:55:26 2018 -0300

    Update changelog

commit 161bea6
Merge: 1445529 2dd3a87
Author: Brian J. Cardiff <[email protected]>
Date:   Wed Mar 7 20:20:20 2018 -0300

    Merge branch 'ci/nightly' into release/0.24

commit 2dd3a87
Author: Brian J. Cardiff <[email protected]>
Date:   Wed Mar 7 20:17:52 2018 -0300

    Run nightly on master

commit 3ad85aa
Author: Brian J. Cardiff <[email protected]>
Date:   Wed Mar 7 18:49:10 2018 -0300

    Use SHA1 to use fixed distribution-scripts version

commit 713fa33
Author: Johannes Müller <[email protected]>
Date:   Tue Mar 6 19:47:43 2018 +0000

    Fix `spawn` macro for call with receiver

commit 8e66045
Author: ven <[email protected]>
Date:   Tue Mar 6 16:24:56 2018 +0100

    Add an example of an operator delegation

commit 04755f9
Author: Brian J. Cardiff <[email protected]>
Date:   Tue Mar 6 20:58:50 2018 -0300

    Run nightly at midnight

commit 3533460
Author: Brian J. Cardiff <[email protected]>
Date:   Tue Mar 6 16:12:37 2018 -0300

    Update version branding

    Remove package iteration args
    Tidy up dist_docker args

commit 601d3c9
Author: Brian J. Cardiff <[email protected]>
Date:   Tue Mar 6 11:47:54 2018 -0300

    Allow branding that does not match branch/tag

commit f0e2be1
Author: Brian J. Cardiff <[email protected]>
Date:   Mon Mar 5 15:22:52 2018 -0300

    Add full workflows

    run dist only after test on all platforms run.
    split workflows for:
    1. test all platforms
    2. tagged releases
    3. nightly releases
    4. maintenance releases (specific branch build per commit)

commit 1b4261c
Author: Johannes Müller <[email protected]>
Date:   Mon Mar 5 20:49:21 2018 +0100

    Fix YAML core schema parses integer 0 (crystal-lang#5774)

    Parsing scalar `0` previously returned a string (`"0"`) instead of integer.
    This fixes it by adding a special case for `0`. Also adds a few specs for zero
    values (though binary, octal, hex were not broken).

commit 91cd833
Author: Brian J. Cardiff <[email protected]>
Date:   Mon Mar 5 12:36:21 2018 -0300

    Add date as package iteration of nightly builds

commit 163c0cb
Author: Carlos Donderis <[email protected]>
Date:   Sun Feb 18 09:35:16 2018 +0900

    binding cmd-s and ctrl-s to runCode

commit 4cf8a7c
Author: Brian J. Cardiff <[email protected]>
Date:   Thu Mar 1 11:48:50 2018 -0300

    Update paths from distribution-scripts

commit 91a025f
Author: Olivier DOSSMANN <[email protected]>
Date:   Thu Jan 25 18:16:06 2018 +0100

    Missing ref to mkstemps in ARM

    Should fix crystal-lang#5264 for ARM architecture

commit 5a0e21f
Author: Julien Portalier <[email protected]>
Date:   Wed Feb 21 18:05:15 2018 +0100

    Refactor signal handlers (crystal-lang#5730)

    Breaking change:
    - Harness the SIGCHLD handling, which is required by Process#wait.
      Now we always handle SIGCHLD using SignalChildHandler. Trying to
      reset or ignore SIGCHLD will actually set the default handler,
      trying to trap SIGCHLD will wrap the custom handler instead.

    Fixes:
    - Synchronize some accesses using a Mutex and an Atomic to further
      enhance potential concurrency issues —probably impossible until
      parallelism is implemented.
    - No longer closes the file descriptor at exit, which prevents an
      unhandled exception when receiving a signal while the program is
      exiting.
    - Restore STDIN/OUT/ERR blocking state on exit.

    Simplify implementation:
    - Move private types (SignalHandler, SignalChildHandler) to the
      private Crystal namespace.
    - Rename SignalHandler to Crystal::Signal.
    - No more singleton classes.
    - Using a Channel directly instead of a Concurrent::Future.
    - Using macros under enum (it wasn't possible before).
    - Introduce LibC::SIG_DFL and LibC::SIG_IGN definitions.

commit 5911da0
Author: TSUYUSATO Kitsune <[email protected]>
Date:   Wed Feb 21 01:57:22 2018 +0900

    Remove duplicated word 'the' (crystal-lang#5733)

commit 4f2e846
Author: Brandon McGinty-Carroll <[email protected]>
Date:   Wed Feb 14 23:18:44 2018 -0500

    Ensure that HTTP::WebSocket uses SNI, just like HTTP::Client.

commit 5d2fa25
Author: r00ster91 <[email protected]>
Date:   Tue Feb 13 17:37:43 2018 +0100

    Use double quotes in html_renderer.cr, begin_code (crystal-lang#5701)

    * Use double quotes in html_renderer.cr, begin_code

    It should use double quotes there instead of apostrophes. Because thats generating bad html code.
    For example this is what glitch.com (glitch is an online html editor) says to an markdown crystal code block:
    https://imgur.com/a/6nUKz
    And other sources say too that double quotes are better.

    * Update markdown_spec.cr

    * Update markdown_spec.cr

    * Update markdown_spec.cr

commit b30a9cc
Author: Johannes Müller <[email protected]>
Date:   Sat Feb 10 14:33:02 2018 +0100

    Fix YAML::Core parse float with leading 0 or . (crystal-lang#5699)

    Also adds some specs for parsing float values

commit ee271d8
Author: Sijawusz Pur Rahnama <[email protected]>
Date:   Fri Feb 2 20:51:26 2018 +0100

    Support BigDecimal comparison with and initialization from BigRational

commit 3086419
Author: asterite <[email protected]>
Date:   Thu Feb 8 09:00:42 2018 -0300

    Fix incorrect type for lib extern static array

commit ab8ed5c
Author: Ary Borenszweig <[email protected]>
Date:   Wed Feb 7 12:06:56 2018 -0300

    Fix custom array/hash-like literals in nested modules (crystal-lang#5685)

commit 19981d3
Author: Brian J. Cardiff <[email protected]>
Date:   Wed Feb 7 03:35:37 2018 -0300

    Shorten jobs names

commit 66600d6
Author: Brian J. Cardiff <[email protected]>
Date:   Tue Feb 6 14:05:47 2018 -0300

    Parametrise previous crystal release, package iteration and docker

commit e3c3f7f
Author: Brian J. Cardiff <[email protected]>
Date:   Tue Feb 6 11:07:29 2018 -0300

    DRY checkout of distribution-scripts. Use docker executor where possible

commit 151c0da
Author: Johannes Müller <[email protected]>
Date:   Mon Feb 5 23:09:25 2018 +0100

    Add documentation for String#inspect and #dump methods and minor code improvements (crystal-lang#5682)

commit 80a1c4a
Author: Brian J. Cardiff <[email protected]>
Date:   Mon Feb 5 11:52:44 2018 -0300

    Split build/publish docker targets. Build docs from docker image.

commit 47b45da
Author: Julien Portalier <[email protected]>
Date:   Sat Feb 3 17:46:43 2018 +0100

    Fix: uninitialized sa_mask value in sigfault ext

commit 322d1c4
Author: Johannes Müller <[email protected]>
Date:   Fri Feb 2 21:51:31 2018 +0100

    Fix: string/symbol array literals nesting and escaping (crystal-lang#5667)

    i# ase enter the commit message for your changes. Lines starting

commit 0491891
Author: Johannes Müller <[email protected]>
Date:   Fri Feb 2 18:57:39 2018 +0100

    Fix String#dump for UTF-8 charachters > \uFFFF (crystal-lang#5668)

commit aa6521f
Author: Ary Borenszweig <[email protected]>
Date:   Fri Feb 2 09:46:19 2018 -0300

    Fix ASTNode#raise macro method (crystal-lang#5670)

commit d5e952f
Author: Brian J. Cardiff <[email protected]>
Date:   Tue Jan 30 02:45:46 2018 -0300

    Add docker image as nightly artifact

commit a4ed534
Author: Brian J. Cardiff <[email protected]>
Date:   Mon Jan 29 16:16:32 2018 -0300

    Remove docs publishing from travis

    Make travis build ci branches

commit ccdf9c1
Author: Brian J. Cardiff <[email protected]>
Date:   Mon Jan 29 16:12:33 2018 -0300

    Add docs as nightly artifacts

commit 85d895f
Author: Brian J. Cardiff <[email protected]>
Date:   Thu Jan 25 01:07:05 2018 -0300

    Collect dist packages of jobs as artifacts

commit bfc9f79
Author: Brian J. Cardiff <[email protected]>
Date:   Wed Jan 24 14:13:36 2018 -0300

    Add darwin nightly artifacts

commit 5c06ff9
Author: Brian J. Cardiff <[email protected]>
Date:   Tue Jan 23 11:59:59 2018 -0300

    Check if circle can handle release optimized builds

commit 9538efb
Author: Brian J. Cardiff <[email protected]>
Date:   Mon Jan 22 14:18:50 2018 -0300

    Test nightly build

commit 1a1124b
Author: Brian J. Cardiff <[email protected]>
Date:   Sat Jan 20 21:16:50 2018 -0300

    Add branch and tag filter to ci

    Build master, release and ci branches
    Build tags

commit d08d7c9
Author: Brian J. Cardiff <[email protected]>
Date:   Sat Jan 20 20:12:51 2018 -0300

    Add linux builds for 64 and 32 bits

commit 6b655af
Author: Brian J. Cardiff <[email protected]>
Date:   Sat Jan 20 20:08:55 2018 -0300

    Enable ipv6 for docker in linux build

    Move setup from .travis.yml to /bin/ci

commit 6418ee4
Author: Brian J. Cardiff <[email protected]>
Date:   Sat Jan 20 20:06:58 2018 -0300

    Set TZ for osx builds

commit 8e621ad
Author: Brian J. Cardiff <[email protected]>
Date:   Fri Jan 19 15:45:35 2018 -0300

    Migrate to Circle 2.0

commit 995d3f9
Author: TSUYUSATO Kitsune <[email protected]>
Date:   Mon Jan 29 22:51:07 2018 +0900

    Fix indentation after comment inside 'when'

    Fix crystal-lang#5654

commit bfd7c99
Author: asterite <[email protected]>
Date:   Fri Jan 26 20:25:45 2018 -0300

    Class: add comparison operators

commit ffda890
Author: Ary Borenszweig <[email protected]>
Date:   Sat Jan 27 12:54:15 2018 -0300

    Spec: implement `be_a` and `expect_raises` without macros (crystal-lang#5646)

    * Spec: implement `be_a` and `expect_raises` without macros

    * Simplify `expect_raises` code by adding an `else` clause

    * Remove redundant `begin` in `expect_raises`

    * More refactors in `expect_raises`

commit 1445529
Author: Matias Garcia Isaia <[email protected]>
Date:   Thu Jan 25 18:21:03 2018 -0300

    Version 0.24.2

commit 558a32a
Author: Juan Wajnerman <[email protected]>
Date:   Wed Jan 17 20:50:35 2018 -0300

    Bug: default_verify_param are inverted in SSL::Context::Client and SSL::Context::Server

    Fixes crystal-lang#5266

    x509 certificates have a purpose associated to them. Clients should
    verify that the server's certificate is intended to be used in a
    server, and servers should check the client's certificate is
    intended to be used for clients.

    Crystal was mistakingly checking those mixed up.

    See https://wiki.openssl.org/index.php?title=Manual:X509(1)&oldid=1797#CERTIFICATE_EXTENSIONS
    See https://tools.ietf.org/html/rfc5280#section-4.2.1.3

commit 7f05801
Author: Benoit de Chezelles <[email protected]>
Date:   Fri Dec 22 12:42:04 2017 +0100

    Add formatter spec for uppercased fun call

commit b793876
Author: Benoit de Chezelles <[email protected]>
Date:   Thu Dec 21 23:34:25 2017 +0100

    Fix formatting of lib's fun starting with uppercase letter

commit 0f9af00
Author: Martyn Jago <[email protected]>
Date:   Thu Jan 25 13:46:05 2018 +0000

    Raise ArgumentError if BigFloat initialized with invalid string (crystal-lang#5638)

    * Raise ArgumentError if BigFloat initialized with invalid string

    Raise ArgumentError if BigFloat.new() initialized with string
    that doesn't denote a valid float

    * fixup! Raise ArgumentError if BigFloat initialized with invalid string

commit 302ff6c
Author: RX14 <[email protected]>
Date:   Sat Jan 20 23:41:24 2018 +0000

    Correctly stub out Exception#backtrace?

commit 0ebc173
Author: TSUYUSATO Kitsune <[email protected]>
Date:   Fri Jan 5 03:12:05 2018 +0900

    Add ASTNode#single_expression and refactor with using it (crystal-lang#5513)

    * Add ASTNode#single_expression and refactor with using it

    Fixed crystal-lang#5482
    Fixed crystal-lang#5511

    But this commit contains no spec for crystal-lang#5511 because I don't know where to
    place such a spec.

    * Add spec for crystal-lang#5511

    Thank you @asterite!
    See: crystal-lang#5513 (comment)

commit b05ad8d
Author: Johannes Müller <[email protected]>
Date:   Tue Jan 23 11:25:37 2018 +0100

    Fix offset handling of String#rindex with Regex (crystal-lang#5594)

    * Fix offset handling of String#rindex with Regex

    This also addas a few specs to ensure all variants of #rindex treat offset similarly.

    * Fix negative offset and remove substring

commit ff02d2d
Author: asterite <[email protected]>
Date:   Fri Jan 19 16:44:07 2018 -0300

    HTTP::Client: execute `before_request`callbacks right before writing the request

commit fd55e8d
Author: TSUYUSATO Kitsune <[email protected]>
Date:   Mon Jan 22 10:23:06 2018 +0900

    Remove TODO about duplicated named group Regex

commit e5da7d3
Author: Chris Hobbs <[email protected]>
Date:   Sun Jan 21 16:12:47 2018 +0000

    Add Int#bits_set? method (crystal-lang#5619)

commit e83e894
Author: Sijawusz Pur Rahnama <[email protected]>
Date:   Sun Jan 21 01:24:33 2018 +0100

    Add additional parameters for Logger#new

commit 4c2f6f6
Author: Sijawusz Pur Rahnama <[email protected]>
Date:   Sat Jan 20 23:37:48 2018 +0100

    Remove TODOs related to Crystal 0.22 (crystal-lang#5546)

commit 8bc3cee
Author: Sijawusz Pur Rahnama <[email protected]>
Date:   Sat Jan 20 23:37:07 2018 +0100

    Add #clear method to ArrayLiteral/HashLiteral (crystal-lang#5265)

commit 6c2297b
Author: Julien Portalier <[email protected]>
Date:   Sat Jan 20 14:39:19 2018 +0100

    Fix bcrypt hard limit on passwords to 71 bytes (crystal-lang#5356)

    Despite the original bcrypt paper claiming passwords must be a
    maximum of 56 bytes, the implementations are compatible to up to 72
    bytes.

    Since increasing the limit doesn't break compatibility, but other
    implementations allow as many as 72 bytes, let's increase the
    arbitrary limitation of 51 characters (which was wrong anyway) to 72
    bytes, minus the leading null byte, that is a password of 71 bytes.

commit ddbcf6c
Author: Sijawusz Pur Rahnama <[email protected]>
Date:   Sat Jan 20 12:38:58 2018 +0100

    BigDecimal.new(str : String) handles scientific notation (crystal-lang#5582)

    * BigDecimal.new(str : String) handles scientific notation

    * fixup! by @RX14

    * Spec with cases suggested by @RX14

    * Fix failing spec

    * Fixed another failing case

commit 3515968
Author: Johannes Müller <[email protected]>
Date:   Sat Jan 20 12:37:08 2018 +0100

    Remove unneeded parenthesis from calls in macro expression (crystal-lang#5493)

    * Remove parenthesis from macro calls without arguments: not needed anymore as of 0.24.0

    * Resolve TODO in urandom

commit a288123
Author: Johannes Müller <[email protected]>
Date:   Fri Jan 19 01:37:02 2018 +0100

    Fix HTTP::StaticFileHandler to properly parse HTTP date (crystal-lang#5607)

commit a29e21b
Author: Damian Hamill <[email protected]>
Date:   Thu Jan 18 20:36:36 2018 +0700

    return correct content type for SVG images (crystal-lang#5605)

commit 1210596
Author: Benny Bach <[email protected]>
Date:   Thu Jan 18 14:21:41 2018 +0100

    Add cache control headers to http static file handler + a few more mi… (crystal-lang#2470)

    * Add cache control headers to http static file handler + a few more mime types

    * Remove Cache-Control header from static file handler

    * Undo extra mime types in static file handler

    * Fix code review issues:

    * use HTTP.rfc3339_date formatter
    * parse time value from If-Modified-Since header
    * compare header and mtime as older or equals

    * use `headers["If-Modified-Since"]?`

commit 3b50388
Author: Juan Wajnerman <[email protected]>
Date:   Thu Jan 18 10:14:32 2018 -0300

    OpenSSL: Hide errors when either libcrypto or libssl are not found by pkg-config (crystal-lang#5603)

commit f3168b6
Author: Johannes Müller <[email protected]>
Date:   Thu Jan 18 14:09:46 2018 +0100

    Add time zones support (crystal-lang#5324)

    * Add cache for last zone to Time::Location#lookup

    * Implement Time::Location including timezone data loader

    Remove representation of floating time from `Time` (formerly expressed
    as `Time::Kind::Unspecified`).

    Floating time should not be represented as an instance of `Time` to avoid undefined operations through type safety (see crystal-lang#5332).
    Breaking changes:
    * Calls to `Time.new` and `Time.now` are now in the local time zone by
      default.
    * `Time.parse`, `Time::Format.new` and `Time::Format.parse` don't specify a default location.
      If none is included in the time format and no default argument is provided, the parse method wil raise an exception because there is no way to know how such a value should be represented as an instance of `Time`.
      Applications expecting time values without time zone should provide default location to apply in such a case.

    * Implement custom zip file reader to remove depenencies

    * Add location cache for `Location.load`

    * Rename `Location.local` to `.load_local` and make `local` a class property

    * Fix env ZONEINFO

    * Fix example code string representation of local Time instance

    * Time zone implementation for win32

    This adds basic support for using the new time zone model on windows.
    * `Crystal::System::Time.zone_sources` returns an empty array because
      Windows does not include a copy of the tz database.
    * `Crystal::System::Time.load_localtime` creates a local time zone
      `Time::Location` based on data provided by `GetTimeZoneInformation`.
    * A mapping from Windows time zone names to identifiers used by the
      IANA timezone database is included as well as an automated generator
      for that file.

    * Add stubs for methods with file acces

    Trying to load a location from a file will fail because `File` is not
    yet ported to windows.

commit 6a574f2
Author: TSUYUSATO Kitsune <[email protected]>
Date:   Thu Jan 18 10:47:54 2018 +0900

    Fix parsing an empty heredoc

commit 84288b7
Author: Ary Borenszweig <[email protected]>
Date:   Wed Jan 17 16:08:54 2018 -0300

    Compiler: add more locations (crystal-lang#5597)

commit bba4985
Author: TSUYUSATO Kitsune <[email protected]>
Date:   Thu Jan 18 04:00:01 2018 +0900

    Use join instead of each_with_index and `if i > 0` (crystal-lang#5599)

    Just a refactoring.

commit 8eb8554
Author: Ary Borenszweig <[email protected]>
Date:   Wed Jan 17 15:58:57 2018 -0300

    Correct implementation of heredoc (crystal-lang#5578)

    Now you can specify multiple heredocs in a single line, just like in Ruby.

commit 295ddc3
Author: Johannes Müller <[email protected]>
Date:   Sat Jan 13 12:49:02 2018 +0100

    Add overload to String.from_utf16 with pointer

commit 244da57
Author: Sijawusz Pur Rahnama <[email protected]>
Date:   Mon Jan 15 18:29:07 2018 +0100

    Allow leading + in number strings

commit 80cbe66
Author: asterite <[email protected]>
Date:   Sun Jan 14 10:46:11 2018 -0300

    Compiler: emit `.o` file to a temporary location and then atomically rename it

commit 597ccac
Author: Ary Borenszweig <[email protected]>
Date:   Mon Oct 23 21:15:37 2017 -0300

    Implement JSON::Any and YAML::Any without recursive aliases

commit b4fed51
Author: Guilherme Bernal <[email protected]>
Date:   Sun Jan 14 15:17:42 2018 -0300

    Fix strdup for LibXML: undefined behavior

    The last argument of xmlGcMemSetup is a GC-aware implementation of strdup. It should return a valid C-string with the null-character.

commit c7cc787
Author: Jamie Gaskins <[email protected]>
Date:   Sun Jan 14 06:52:32 2018 -0500

    Pretty-print objects in playground inspector (crystal-lang#4601)

commit d7c9551
Author: RX14 <[email protected]>
Date:   Fri Jan 12 23:32:10 2018 +0000

    Rename win_nt.cr to winnt.cr

    The header file is called winnt.h, the win_nt.cr was an error and should be
    merged with winnt.cr.

commit d294dd1
Author: RX14 <[email protected]>
Date:   Fri Jan 12 23:28:12 2018 +0000

    Reenable Crystal::Hasher seed randomisation on win32

commit 323613b
Author: RX14 <[email protected]>
Date:   Fri Jan 12 23:20:27 2018 +0000

    Ensure String#to_utf16 result has a null terminator

commit 48a1130
Author: Chris Hobbs <[email protected]>
Date:   Sat Jan 13 00:53:17 2018 +0000

    Simplify Crystal::System interface by adding File.stat? and lstat? (crystal-lang#5553)

    By providing these methods we can make the implementation of File.empty? and
    File.file? platform-unspecific. This makes the interface to
    Crystal::System::File smaller and cleaner.

commit 77de91f
Author: Lachlan Dowding <[email protected]>
Date:   Thu Jan 11 08:13:16 2018 +1000

    Fix Iterator spec typo: integreation -> integration

commit bd42727
Author: Johannes Müller <[email protected]>
Date:   Thu Jan 11 19:32:28 2018 +0100

    Reimplement Dir.glob  (crystal-lang#5179)

commit f16e63a
Author: Mark <[email protected]>
Date:   Thu Jan 11 10:28:54 2018 -0800

    Change Hash#key to Hash#key_for (crystal-lang#5444)

    * Change Hash#key to Hash#key_for

    * Update Spec description for Hash#key_for and Hash#key_for?

commit f59a349
Author: TSUYUSATO Kitsune <[email protected]>
Date:   Fri Jan 12 03:24:04 2018 +0900

    Fix to keep paren information for `to_s` on clone (crystal-lang#5454)

    Fixed crystal-lang#5415

    Added keeping information for `to_s` on clone check in `compiler/parser/to_s_spec.cr`.
    I think this property should be kept by all `ASTNode#clone` implementation.

commit 5eecd57
Author: Julien Portalier <[email protected]>
Date:   Wed Jan 10 17:38:18 2018 +0100

    Fix: decode DWARF line sequences with single program entry (crystal-lang#5565)

    Debug::DWARF::LineNumbers would skip the program statement when it
    contained a single entry, because of a wrong assumption of the
    sequence unit_length entry, which doesn't account for the unit
    length space in the standard, and was overlooked in checking whether
    the sequence had any program statement, or not.

commit 048f77e
Author: Julien Portalier <[email protected]>
Date:   Wed Jan 10 17:38:18 2018 +0100

    Fix: decode DWARF line sequences with single program entry (crystal-lang#5565)

    Debug::DWARF::LineNumbers would skip the program statement when it
    contained a single entry, because of a wrong assumption of the
    sequence unit_length entry, which doesn't account for the unit
    length space in the standard, and was overlooked in checking whether
    the sequence had any program statement, or not.

commit 972f2b3
Author: TSUYUSATO Kitsune <[email protected]>
Date:   Thu Dec 21 20:16:08 2017 +0900

    Fix to work formatting `foo.[bar] = baz`

    Fixed crystal-lang#5416

commit 157eca0
Author: TSUYUSATO Kitsune <[email protected]>
Date:   Sun Nov 5 23:30:20 2017 +0900

    Clone macro default argument before macro expansion

commit a3ca37e
Author: Michael Petö <[email protected]>
Date:   Wed Jan 10 14:47:44 2018 +0100

    Fix Time::Span multiply and divide (crystal-lang#5563)

commit 5f1440d
Author: Ary Borenszweig <[email protected]>
Date:   Tue Jan 9 17:25:51 2018 -0300

    Formatter: fix bug regarding backslash (crystal-lang#5194)

commit 77db65a
Author: Peter Leitzen <[email protected]>
Date:   Tue Jan 9 13:39:59 2018 +0100

    Fix spec name for parsing BigDecimal from floats (crystal-lang#5561)

    Follow-up to crystal-lang#5525

commit d8343a6
Author: Luke Rodgers <[email protected]>
Date:   Mon Jan 8 19:29:06 2018 -0500

    Define `new(JSON::PullParser)` on BigDecimal so it can be deserialized (crystal-lang#5525)

commit d023138
Author: Benoit de Chezelles <[email protected]>
Date:   Mon Jan 8 01:25:21 2018 +0100

    Allow to init a crystal app/lib in an empty directory (crystal-lang#4691)

commit f7a931c
Author: Sijawusz Pur Rahnama <[email protected]>
Date:   Mon Jan 8 01:19:37 2018 +0100

    Extend BigDecimal with a few things (crystal-lang#5390)

commit 3cb4b94
Author: Ary Borenszweig <[email protected]>
Date:   Sat Jan 6 15:17:23 2018 -0300

    CLI: remove deps command (crystal-lang#5544)

commit 525ea49
Author: Ary Borenszweig <[email protected]>
Date:   Sat Jan 6 11:04:16 2018 -0300

    Compiler: remove extra `shell` argument when executing macro run (crystal-lang#5543)

commit 161c17a
Author: Noriyo Akita <[email protected]>
Date:   Sat Jan 6 21:34:06 2018 +0900

    Fix typo mutli to multi (crystal-lang#5547)

    * tools/formatter: Fix typo

    mutli -> multi

    * Fix typo in comment

    Mutliple -> Multiple

commit e1680dd
Author: asterite <[email protected]>
Date:   Fri Jan 5 14:07:13 2018 -0300

    Include UUID in docs

commit a06bf0f
Author: asterite <[email protected]>
Date:   Fri Jan 5 14:07:13 2018 -0300

    Include UUID in docs

commit d3fed8b
Author: Johannes Müller <[email protected]>
Date:   Tue Jan 2 14:32:06 2018 +0100

    Rename skip() macro method to skip_file() in docs (crystal-lang#5488)

commit 4f56a57
Author: Brian J. Cardiff <[email protected]>
Date:   Fri Dec 29 20:38:36 2017 -0300

    Update gitignore template (crystal-lang#5480)

    * Fix docs directory in gitignore.ecr (renamed in crystal-lang#4937)

commit 12cc7f2
Author: Brian J. Cardiff <[email protected]>
Date:   Thu Dec 28 02:51:47 2017 -0300

    Fix missing Dir#each to be an Enumerable (crystal-lang#5458)

commit 4313e86
Author: Brian J. Cardiff <[email protected]>
Date:   Tue Dec 26 21:59:22 2017 -0300

    Update bin/ci to use LIBRARY_PATH from 0.24.1 (crystal-lang#5461)

commit 68c0098
Author: Dominic Jodoin <[email protected]>
Date:   Thu Dec 21 12:40:38 2017 -0500

    Enable IPv6 in Docker (crystal-lang#5429)
chris-huxtable added a commit to chris-huxtable/crystal that referenced this issue Apr 7, 2018
commit 7d64756
Author: Florin Lipan <[email protected]>
Date:   Fri Apr 6 19:56:50 2018 +0300

    Re-raise exceptions in parallel macro (crystal-lang#5726)

commit d536c9c
Author: William Woodruff <[email protected]>
Date:   Fri Apr 6 12:54:03 2018 -0400

    File: Add `mode` param to `File.write` (crystal-lang#5754)

    This allows `File.write` to optionally append to files (instead of
    truncating them).

commit 680d3e0
Author: TSUYUSATO Kitsune <[email protected]>
Date:   Fri Apr 6 08:24:25 2018 +0900

    Format: fix formatting call having trailing comma with block (crystal-lang#5855)

    Fix crystal-lang#5853

commit f22d689
Author: TSUYUSATO Kitsune <[email protected]>
Date:   Fri Apr 6 08:18:23 2018 +0900

    Refactor Colorize#surround (crystal-lang#4196)

    * Refactor Colorize#surround

    This is one of the separations of crystal-lang#3925.

    Remove `surround` and rename `push` to `surround`, now `push` is
    derecated.
    (This reason is dscribed in crystal-lang#3925 (comment))

    * Use #surround instead of #push

    * Apply 'crystal tool format'

    * Remove Colorize#push

commit 12488c2
Author: Benoit de Chezelles <[email protected]>
Date:   Thu Apr 5 07:49:51 2018 -0700

    Ensure cleanup tempfile after some specs (crystal-lang#5810)

    * Ensure cleanup tempfile after some specs

    * Fix compiler spec

commit ef85244
Author: TSUYUSATO Kitsune <[email protected]>
Date:   Thu Apr 5 20:59:33 2018 +0900

    Format: fix formatter bug on nesting begin/end

commit 8c737a0
Author: TSUYUSATO Kitsune <[email protected]>
Date:   Thu Apr 5 22:54:20 2018 +0900

    Remove duplicated indefinite articles 'a a' in char.cr doc (crystal-lang#5894)

    * Fix duplicated articles 'a a' in char.cr doc

    * Shorten sentence

    crystal-lang#5894 (comment)

commit 73989e8
Author: maiha <[email protected]>
Date:   Thu Apr 5 22:43:43 2018 +0900

    fix example codes (2018-04) (crystal-lang#5912)

commit b62c4e1
Author: Sijawusz Pur Rahnama <[email protected]>
Date:   Sun Apr 1 16:09:29 2018 +0200

    Refactor out variable name

commit c17ce2d
Author: Sankha Narayan Guria <[email protected]>
Date:   Thu Apr 5 01:58:11 2018 -0400

    UUID implements inspect (crystal-lang#5574)

commit 106d44d
Author: TSUYUSATO Kitsune <[email protected]>
Date:   Wed Apr 4 23:01:43 2018 +0900

    MatchData: correct sample code for duplicated named capture

    Ref: crystal-lang#5912 (comment)

commit 011e688
Author: Paul Smith <[email protected]>
Date:   Wed Apr 4 13:37:41 2018 -0400

    Small typo fix in bash completion

commit b5a3a65
Author: Johannes Müller <[email protected]>
Date:   Wed Apr 4 15:59:33 2018 +0200

    Fix File.join with empty path component (crystal-lang#5915)

commit 9662abe
Author: TSUYUSATO Kitsune <[email protected]>
Date:   Wed Apr 4 16:42:42 2018 +0900

    Fix `String#tr` 1 byte `from` optimization bug

    Ref: crystal-lang#5912 (comment)

    `"aabbcc".tr("a", "xyz")` yields `"xyzxyzbbcc"` currently.
    Of course it is unintentional behavior, in Ruby it yields `"xxbbcc"` and
    on shell `echo aabbcc | tr a xyz` shows `xxbbcc`.

commit ec423eb
Author: TSUYUSATO Kitsune <[email protected]>
Date:   Wed Apr 4 02:38:21 2018 +0900

    Fix crystal-lang#5907 formatter bug (crystal-lang#5909)

    * Fix crystal-lang#5907 formatter bug

    * Apply new formatter

commit 5056859
Author: TSUYUSATO Kitsune <[email protected]>
Date:   Wed Apr 4 02:33:07 2018 +0900

    Pass an unhandled exception to at_exit block as second argument (crystal-lang#5906)

    * Pass an unhandled exception to at_exit block as second argument

    Follow up crystal-lang#1921

    It is better in some ways:

      - it does not need a new exception like `SystemExit`.
      - it does not break compatibility in most cases because block fill up lacking arguments.

    * Add documentation for at_exit block arguments

    * Update `at_exit` block arguments description

    crystal-lang#5906 (comment)
    Thank you @jhass.

commit 82caaf0
Author: TSUYUSATO Kitsune <[email protected]>
Date:   Tue Apr 3 23:18:01 2018 +0900

    Semantic: don't guess ivar type from argument after assigned (crystal-lang#5166)

commit bb5bcd2
Author: TSUYUSATO Kitsune <[email protected]>
Date:   Tue Apr 3 21:00:27 2018 +0900

    Colorize: abstract colors and support 8bit and true color (crystal-lang#5902)

    * Colorize: abstract colors and support 8bit and true color

    Closes crystal-lang#5900

    * Color#fore and #back take io to avoid memory allocation

    * Use character literal instead of 1 length string

commit 7eae5aa
Author: Benoit de Chezelles <[email protected]>
Date:   Mon Apr 2 16:43:52 2018 -0700

    Use LibCrystalMain.__crystal_main directly (crystal-lang#5899)

commit 60f675c
Author: TSUYUSATO Kitsune <[email protected]>
Date:   Tue Apr 3 08:42:03 2018 +0900

    Format: fix indentation after backslash newline (crystal-lang#5901)

    crystal-lang#5892 (comment)

commit 4d2ad83
Author: TSUYUSATO Kitsune <[email protected]>
Date:   Tue Apr 3 08:21:06 2018 +0900

    Prevent invoking `method_added` macro hook recursively (crystal-lang#5159)

    Fixed crystal-lang#5066

commit e17823f
Author: TSUYUSATO Kitsune <[email protected]>
Date:   Tue Apr 3 07:56:52 2018 +0900

    Format: fix indentation in collection with comment after beginning delimiter (crystal-lang#5893)

commit 49d722c
Author: Chris Hobbs <[email protected]>
Date:   Sat Mar 31 19:30:54 2018 +0100

    Print exception cause when inspecting with backtrace (crystal-lang#5833)

commit 945557b
Author: Sijawusz Pur Rahnama <[email protected]>
Date:   Sat Mar 31 20:30:15 2018 +0200

    Use Char for single char strings (crystal-lang#5882)

commit 4532389
Author: r00ster91 <[email protected]>
Date:   Sat Mar 31 15:35:08 2018 +0200

    Fix Random example (crystal-lang#5728)

commit 5cd78fa
Author: Benoit de Chezelles <[email protected]>
Date:   Fri Mar 30 15:29:30 2018 -0700

    Allow a path to declare a constant (crystal-lang#5883)

    * Allow a path to declare a constant

    * Add spec for type keeping when creating a constant using a Path

commit f33a910
Author: Carl Hörberg <[email protected]>
Date:   Fri Mar 30 20:40:31 2018 +0200

    Enqueue senders in Channel#close (crystal-lang#5880)

    Fixes crystal-lang#5875

commit 0424b22
Author: r00ster91 <[email protected]>
Date:   Thu Mar 29 16:17:20 2018 +0200

    Fix HEREDOC error message grammar (crystal-lang#5887)

    * Fix HEREDOC error message grammar

    * Update parser_spec.cr

commit 4927ecc
Author: Benoit de Chezelles <[email protected]>
Date:   Thu Mar 29 05:06:03 2018 -0700

    Fix typo (crystal-lang#5884)

commit c2efaff
Author: Will <[email protected]>
Date:   Thu Mar 29 08:05:05 2018 -0400

    Update docs for Enum (crystal-lang#5885)

commit 0970ee9
Author: Benoit de Chezelles <[email protected]>
Date:   Wed Mar 28 08:04:10 2018 -0700

    Fix exit in at_exit handlers (crystal-lang#5413)

    * Fix exit/raise in at_exit handlers

    * Add specs for exit & at_exit

    * Refactor handler loop

    * Disallow nested at_exit handlers

    * Print an unhandled exception after all at_exit handlers

    * Use try for the unhandled exception handler

    * Move the proc creation inside AtExitHandlers

    * Fix doc

    * Use a separate list for exceptions registered to print after at_exit handlers

    * Don't early return, always check for exceptions

    * Don't use a list for unhandled exceptions, store only one

commit 400bd0e
Author: Mark <[email protected]>
Date:   Wed Mar 28 05:44:58 2018 -0700

    Documentation: Add API docs for Array sorting methods (crystal-lang#5637)

    * Documentation: Add API docs for Array sorting methods
    - Array#sort(&block : T, T -> Int32)
    - Array#sort!(&block : T, T -> Int32)
    - Array#sort_by(&block : T -> _)
    - Array#sort_by!(&block : T -> _)

    * Documentation: Add API docs for Array#swap

    * Documentation: Update based on code review
    - Add explicit return types for sorting methods
    - Update descriptions based on code review
    - Format code using crystal's format tool

    * Documentation: Remove comments about optional blocks from Array#sort! and Array#sort

    * Documentation: Update descriptions for Array sorting methods

commit bc1c7a9
Author: Johannes Müller <[email protected]>
Date:   Tue Mar 27 23:05:30 2018 +0200

    Fix typo in IO doc

commit 9f28c77
Author: Heaven31415 <[email protected]>
Date:   Tue Mar 27 15:22:39 2018 +0200

    Make #read doc more clear in io.cr (crystal-lang#5873)

commit 9980a1f
Author: Jakub Jirutka <[email protected]>
Date:   Sun Mar 25 00:43:00 2018 +0100

    Add support for target aarch64-linux-musl

commit 9adbb92
Author: Jakub Jirutka <[email protected]>
Date:   Sat Mar 24 20:24:18 2018 +0100

    Makefile: Fix redirect to stderr to be more portable (crystal-lang#5859)

    `>/dev/stderr` does not work in some environments. Moreover, all POSIX
    compliant shells supports standard `>&2` for redirect stdout to stderr.

commit dedc726
Author: Benoit de Chezelles <[email protected]>
Date:   Fri Mar 23 06:57:01 2018 -0700

    Fix parser block arg newline (crystal-lang#5737)

    * parser: Add spec for method def block argument with new lines

    * parser: Handle space or newline after def's block arg's type

commit 2d93603
Author: TSUYUSATO Kitsune <[email protected]>
Date:   Wed Mar 21 06:49:50 2018 +0900

    Regex: fix invalid #inspect result against %r{\/} (crystal-lang#5841)

    `p %r{\/}` shows `/\\//`. It is invalid regexp.

commit 502ef40
Author: Johannes Müller <[email protected]>
Date:   Mon Mar 19 14:25:25 2018 +0100

    Fix URI encoding in StaticFileHandler#redirect_to (crystal-lang#5628)

commit 5d5c9ac
Author: Lachlan Dowding <[email protected]>
Date:   Mon Mar 19 00:46:24 2018 +1000

    Add JSON support to UUID (crystal-lang#5551)

commit c0cdbc2
Author: Sijawusz Pur Rahnama <[email protected]>
Date:   Sun Mar 18 01:50:28 2018 +0100

    Use crystallang/crystal:nightly as docker nightly tag (crystal-lang#5837)

commit 863f301
Author: Anton Maminov <[email protected]>
Date:   Tue Mar 13 14:35:00 2018 +0200

    add HTTP OPTIONS method to HTTP::Client

commit 52fa3b2
Author: TSUYUSATO Kitsune <[email protected]>
Date:   Sat Jan 27 22:48:08 2018 +0900

    Don't use heredoc inside interpolation

    heredoc inside interpolation is buggy and it is unuseful.
    It is a bit hard to fix this, so I'd like to forbid.

commit 077e0da
Author: Johannes Müller <[email protected]>
Date:   Tue Mar 13 20:10:11 2018 +0100

    Add boundary check for seconds in Time#initialize (crystal-lang#5786)

    Previously, `Time#add_span` did not handle times at the min or max range with positive or
    negative offsets correctly because `@seconds` can legitimately be `< 0` or `> MAX_SECONDS`
    when the offset is taken into account.
    The boundary check was moved to the constructor to prevent manually
    creating an invalid date.

commit dd0ed8c
Author: Johannes Müller <[email protected]>
Date:   Mon Mar 12 23:11:01 2018 +0100

    CHANGELOG: Change release dates to use ISO format

    Changes dates in DD-MM-YYYY to ISO format YYYY-MM-DD

commit 50aacaa
Author: asterite <[email protected]>
Date:   Mon Feb 5 09:22:35 2018 -0300

    Macro methods: set type of empty array literal

commit ed0aad8
Author: Benoit de Chezelles <[email protected]>
Date:   Sun Mar 11 09:36:14 2018 -0700

    Fix internal doc (typo & old invalid comment) (crystal-lang#5806)

    * Fix typo

    * Remove BNF for old def declaration without parentheses

commit 10fb1ff
Author: Benoit de Chezelles <[email protected]>
Date:   Sun Mar 11 05:14:06 2018 -0700

    Use the same llvm's version as crystal-lang package for CI's darwin build (crystal-lang#5804)

    * Use llvm5 for darwin build in CI

    * Force binaries of llvm in PATH

    * DRY for the llvm's version crystal-lang's depends on

    * Install jq

commit e8916bc
Author: Benoit de Chezelles <[email protected]>
Date:   Sat Mar 10 16:16:20 2018 -0800

    Restore STDIN|OUT|ERR blocking state on exit (crystal-lang#5802)

commit 92c3d42
Author: Brian J. Cardiff <[email protected]>
Date:   Sat Mar 10 08:36:50 2018 -0300

    Update previous crystal release & docker images for ci to 0.24.2 (crystal-lang#5796)

    * Use crystallang/crystal-*-build docker images in ci

    * Update previous crystal to 0.24.2

commit 34b1101
Author: Johannes Müller <[email protected]>
Date:   Sat Mar 10 00:37:05 2018 +0100

    Add highlight to code tag in generated API docs (crystal-lang#5795)

commit 6696c88
Author: Donovan Glover <[email protected]>
Date:   Fri Mar 9 18:36:43 2018 -0500

    Fix unexpected h1 in CHANGELOG.md (crystal-lang#5576)

commit 731e9c0
Merge: 4f9ed8d 4ef9167
Author: Brian J. Cardiff <[email protected]>
Date:   Fri Mar 9 17:35:26 2018 -0300

    Merge changes from 0.24.2 with master

commit 4ef9167
Author: TSUYUSATO Kitsune <[email protected]>
Date:   Sat Mar 10 00:40:35 2018 +0900

    Improve String#pretty_print output by splitting newline (crystal-lang#5750)

    Like Ruby's `pp`, String#pretty_print splits its content by newline and
    shows each lines with joining `+` operator.

    I believe this improves readability against large multiline string on `p`.

commit 5a189cb
Author: Cody Byrnes <[email protected]>
Date:   Fri Mar 9 06:09:41 2018 -0800

    Fix: File.extname edge case for dot in path with no extension (crystal-lang#5790)

commit f0bd6b6
Author: r00ster91 <[email protected]>
Date:   Fri Mar 9 00:48:03 2018 +0100

    Update readline.cr (crystal-lang#5791)

commit 224d489
Author: Johannes Müller <[email protected]>
Date:   Fri Mar 9 00:36:23 2018 +0100

    Return early in Time#add_span if arguments are zero (crystal-lang#5787)

commit 9d2dfbb
Author: Konstantin Makarchev <[email protected]>
Date:   Thu Mar 8 03:34:24 2018 +0300

    add *.dwarf to auto generated .gitignore

commit 4f9ed8d
Author: Brian J. Cardiff <[email protected]>
Date:   Wed Mar 7 23:55:26 2018 -0300

    Update changelog

commit 161bea6
Merge: 1445529 2dd3a87
Author: Brian J. Cardiff <[email protected]>
Date:   Wed Mar 7 20:20:20 2018 -0300

    Merge branch 'ci/nightly' into release/0.24

commit 2dd3a87
Author: Brian J. Cardiff <[email protected]>
Date:   Wed Mar 7 20:17:52 2018 -0300

    Run nightly on master

commit 3ad85aa
Author: Brian J. Cardiff <[email protected]>
Date:   Wed Mar 7 18:49:10 2018 -0300

    Use SHA1 to use fixed distribution-scripts version

commit 713fa33
Author: Johannes Müller <[email protected]>
Date:   Tue Mar 6 19:47:43 2018 +0000

    Fix `spawn` macro for call with receiver

commit 8e66045
Author: ven <[email protected]>
Date:   Tue Mar 6 16:24:56 2018 +0100

    Add an example of an operator delegation

commit 04755f9
Author: Brian J. Cardiff <[email protected]>
Date:   Tue Mar 6 20:58:50 2018 -0300

    Run nightly at midnight

commit 3533460
Author: Brian J. Cardiff <[email protected]>
Date:   Tue Mar 6 16:12:37 2018 -0300

    Update version branding

    Remove package iteration args
    Tidy up dist_docker args

commit 601d3c9
Author: Brian J. Cardiff <[email protected]>
Date:   Tue Mar 6 11:47:54 2018 -0300

    Allow branding that does not match branch/tag

commit f0e2be1
Author: Brian J. Cardiff <[email protected]>
Date:   Mon Mar 5 15:22:52 2018 -0300

    Add full workflows

    run dist only after test on all platforms run.
    split workflows for:
    1. test all platforms
    2. tagged releases
    3. nightly releases
    4. maintenance releases (specific branch build per commit)

commit 1b4261c
Author: Johannes Müller <[email protected]>
Date:   Mon Mar 5 20:49:21 2018 +0100

    Fix YAML core schema parses integer 0 (crystal-lang#5774)

    Parsing scalar `0` previously returned a string (`"0"`) instead of integer.
    This fixes it by adding a special case for `0`. Also adds a few specs for zero
    values (though binary, octal, hex were not broken).

commit 91cd833
Author: Brian J. Cardiff <[email protected]>
Date:   Mon Mar 5 12:36:21 2018 -0300

    Add date as package iteration of nightly builds

commit 163c0cb
Author: Carlos Donderis <[email protected]>
Date:   Sun Feb 18 09:35:16 2018 +0900

    binding cmd-s and ctrl-s to runCode

commit 4cf8a7c
Author: Brian J. Cardiff <[email protected]>
Date:   Thu Mar 1 11:48:50 2018 -0300

    Update paths from distribution-scripts

commit 91a025f
Author: Olivier DOSSMANN <[email protected]>
Date:   Thu Jan 25 18:16:06 2018 +0100

    Missing ref to mkstemps in ARM

    Should fix crystal-lang#5264 for ARM architecture

commit 5a0e21f
Author: Julien Portalier <[email protected]>
Date:   Wed Feb 21 18:05:15 2018 +0100

    Refactor signal handlers (crystal-lang#5730)

    Breaking change:
    - Harness the SIGCHLD handling, which is required by Process#wait.
      Now we always handle SIGCHLD using SignalChildHandler. Trying to
      reset or ignore SIGCHLD will actually set the default handler,
      trying to trap SIGCHLD will wrap the custom handler instead.

    Fixes:
    - Synchronize some accesses using a Mutex and an Atomic to further
      enhance potential concurrency issues —probably impossible until
      parallelism is implemented.
    - No longer closes the file descriptor at exit, which prevents an
      unhandled exception when receiving a signal while the program is
      exiting.
    - Restore STDIN/OUT/ERR blocking state on exit.

    Simplify implementation:
    - Move private types (SignalHandler, SignalChildHandler) to the
      private Crystal namespace.
    - Rename SignalHandler to Crystal::Signal.
    - No more singleton classes.
    - Using a Channel directly instead of a Concurrent::Future.
    - Using macros under enum (it wasn't possible before).
    - Introduce LibC::SIG_DFL and LibC::SIG_IGN definitions.

commit 5911da0
Author: TSUYUSATO Kitsune <[email protected]>
Date:   Wed Feb 21 01:57:22 2018 +0900

    Remove duplicated word 'the' (crystal-lang#5733)

commit 4f2e846
Author: Brandon McGinty-Carroll <[email protected]>
Date:   Wed Feb 14 23:18:44 2018 -0500

    Ensure that HTTP::WebSocket uses SNI, just like HTTP::Client.

commit 5d2fa25
Author: r00ster91 <[email protected]>
Date:   Tue Feb 13 17:37:43 2018 +0100

    Use double quotes in html_renderer.cr, begin_code (crystal-lang#5701)

    * Use double quotes in html_renderer.cr, begin_code

    It should use double quotes there instead of apostrophes. Because thats generating bad html code.
    For example this is what glitch.com (glitch is an online html editor) says to an markdown crystal code block:
    https://imgur.com/a/6nUKz
    And other sources say too that double quotes are better.

    * Update markdown_spec.cr

    * Update markdown_spec.cr

    * Update markdown_spec.cr

commit b30a9cc
Author: Johannes Müller <[email protected]>
Date:   Sat Feb 10 14:33:02 2018 +0100

    Fix YAML::Core parse float with leading 0 or . (crystal-lang#5699)

    Also adds some specs for parsing float values

commit ee271d8
Author: Sijawusz Pur Rahnama <[email protected]>
Date:   Fri Feb 2 20:51:26 2018 +0100

    Support BigDecimal comparison with and initialization from BigRational

commit 3086419
Author: asterite <[email protected]>
Date:   Thu Feb 8 09:00:42 2018 -0300

    Fix incorrect type for lib extern static array

commit ab8ed5c
Author: Ary Borenszweig <[email protected]>
Date:   Wed Feb 7 12:06:56 2018 -0300

    Fix custom array/hash-like literals in nested modules (crystal-lang#5685)

commit 19981d3
Author: Brian J. Cardiff <[email protected]>
Date:   Wed Feb 7 03:35:37 2018 -0300

    Shorten jobs names

commit 66600d6
Author: Brian J. Cardiff <[email protected]>
Date:   Tue Feb 6 14:05:47 2018 -0300

    Parametrise previous crystal release, package iteration and docker

commit e3c3f7f
Author: Brian J. Cardiff <[email protected]>
Date:   Tue Feb 6 11:07:29 2018 -0300

    DRY checkout of distribution-scripts. Use docker executor where possible

commit 151c0da
Author: Johannes Müller <[email protected]>
Date:   Mon Feb 5 23:09:25 2018 +0100

    Add documentation for String#inspect and #dump methods and minor code improvements (crystal-lang#5682)

commit 80a1c4a
Author: Brian J. Cardiff <[email protected]>
Date:   Mon Feb 5 11:52:44 2018 -0300

    Split build/publish docker targets. Build docs from docker image.

commit 47b45da
Author: Julien Portalier <[email protected]>
Date:   Sat Feb 3 17:46:43 2018 +0100

    Fix: uninitialized sa_mask value in sigfault ext

commit 322d1c4
Author: Johannes Müller <[email protected]>
Date:   Fri Feb 2 21:51:31 2018 +0100

    Fix: string/symbol array literals nesting and escaping (crystal-lang#5667)

    i# ase enter the commit message for your changes. Lines starting

commit 0491891
Author: Johannes Müller <[email protected]>
Date:   Fri Feb 2 18:57:39 2018 +0100

    Fix String#dump for UTF-8 charachters > \uFFFF (crystal-lang#5668)

commit aa6521f
Author: Ary Borenszweig <[email protected]>
Date:   Fri Feb 2 09:46:19 2018 -0300

    Fix ASTNode#raise macro method (crystal-lang#5670)

commit d5e952f
Author: Brian J. Cardiff <[email protected]>
Date:   Tue Jan 30 02:45:46 2018 -0300

    Add docker image as nightly artifact

commit a4ed534
Author: Brian J. Cardiff <[email protected]>
Date:   Mon Jan 29 16:16:32 2018 -0300

    Remove docs publishing from travis

    Make travis build ci branches

commit ccdf9c1
Author: Brian J. Cardiff <[email protected]>
Date:   Mon Jan 29 16:12:33 2018 -0300

    Add docs as nightly artifacts

commit 85d895f
Author: Brian J. Cardiff <[email protected]>
Date:   Thu Jan 25 01:07:05 2018 -0300

    Collect dist packages of jobs as artifacts

commit bfc9f79
Author: Brian J. Cardiff <[email protected]>
Date:   Wed Jan 24 14:13:36 2018 -0300

    Add darwin nightly artifacts

commit 5c06ff9
Author: Brian J. Cardiff <[email protected]>
Date:   Tue Jan 23 11:59:59 2018 -0300

    Check if circle can handle release optimized builds

commit 9538efb
Author: Brian J. Cardiff <[email protected]>
Date:   Mon Jan 22 14:18:50 2018 -0300

    Test nightly build

commit 1a1124b
Author: Brian J. Cardiff <[email protected]>
Date:   Sat Jan 20 21:16:50 2018 -0300

    Add branch and tag filter to ci

    Build master, release and ci branches
    Build tags

commit d08d7c9
Author: Brian J. Cardiff <[email protected]>
Date:   Sat Jan 20 20:12:51 2018 -0300

    Add linux builds for 64 and 32 bits

commit 6b655af
Author: Brian J. Cardiff <[email protected]>
Date:   Sat Jan 20 20:08:55 2018 -0300

    Enable ipv6 for docker in linux build

    Move setup from .travis.yml to /bin/ci

commit 6418ee4
Author: Brian J. Cardiff <[email protected]>
Date:   Sat Jan 20 20:06:58 2018 -0300

    Set TZ for osx builds

commit 8e621ad
Author: Brian J. Cardiff <[email protected]>
Date:   Fri Jan 19 15:45:35 2018 -0300

    Migrate to Circle 2.0

commit 995d3f9
Author: TSUYUSATO Kitsune <[email protected]>
Date:   Mon Jan 29 22:51:07 2018 +0900

    Fix indentation after comment inside 'when'

    Fix crystal-lang#5654

commit bfd7c99
Author: asterite <[email protected]>
Date:   Fri Jan 26 20:25:45 2018 -0300

    Class: add comparison operators

commit ffda890
Author: Ary Borenszweig <[email protected]>
Date:   Sat Jan 27 12:54:15 2018 -0300

    Spec: implement `be_a` and `expect_raises` without macros (crystal-lang#5646)

    * Spec: implement `be_a` and `expect_raises` without macros

    * Simplify `expect_raises` code by adding an `else` clause

    * Remove redundant `begin` in `expect_raises`

    * More refactors in `expect_raises`

commit 1445529
Author: Matias Garcia Isaia <[email protected]>
Date:   Thu Jan 25 18:21:03 2018 -0300

    Version 0.24.2

commit 558a32a
Author: Juan Wajnerman <[email protected]>
Date:   Wed Jan 17 20:50:35 2018 -0300

    Bug: default_verify_param are inverted in SSL::Context::Client and SSL::Context::Server

    Fixes crystal-lang#5266

    x509 certificates have a purpose associated to them. Clients should
    verify that the server's certificate is intended to be used in a
    server, and servers should check the client's certificate is
    intended to be used for clients.

    Crystal was mistakingly checking those mixed up.

    See https://wiki.openssl.org/index.php?title=Manual:X509(1)&oldid=1797#CERTIFICATE_EXTENSIONS
    See https://tools.ietf.org/html/rfc5280#section-4.2.1.3

commit 7f05801
Author: Benoit de Chezelles <[email protected]>
Date:   Fri Dec 22 12:42:04 2017 +0100

    Add formatter spec for uppercased fun call

commit b793876
Author: Benoit de Chezelles <[email protected]>
Date:   Thu Dec 21 23:34:25 2017 +0100

    Fix formatting of lib's fun starting with uppercase letter

commit 0f9af00
Author: Martyn Jago <[email protected]>
Date:   Thu Jan 25 13:46:05 2018 +0000

    Raise ArgumentError if BigFloat initialized with invalid string (crystal-lang#5638)

    * Raise ArgumentError if BigFloat initialized with invalid string

    Raise ArgumentError if BigFloat.new() initialized with string
    that doesn't denote a valid float

    * fixup! Raise ArgumentError if BigFloat initialized with invalid string

commit 302ff6c
Author: RX14 <[email protected]>
Date:   Sat Jan 20 23:41:24 2018 +0000

    Correctly stub out Exception#backtrace?

commit 0ebc173
Author: TSUYUSATO Kitsune <[email protected]>
Date:   Fri Jan 5 03:12:05 2018 +0900

    Add ASTNode#single_expression and refactor with using it (crystal-lang#5513)

    * Add ASTNode#single_expression and refactor with using it

    Fixed crystal-lang#5482
    Fixed crystal-lang#5511

    But this commit contains no spec for crystal-lang#5511 because I don't know where to
    place such a spec.

    * Add spec for crystal-lang#5511

    Thank you @asterite!
    See: crystal-lang#5513 (comment)

commit b05ad8d
Author: Johannes Müller <[email protected]>
Date:   Tue Jan 23 11:25:37 2018 +0100

    Fix offset handling of String#rindex with Regex (crystal-lang#5594)

    * Fix offset handling of String#rindex with Regex

    This also addas a few specs to ensure all variants of #rindex treat offset similarly.

    * Fix negative offset and remove substring

commit ff02d2d
Author: asterite <[email protected]>
Date:   Fri Jan 19 16:44:07 2018 -0300

    HTTP::Client: execute `before_request`callbacks right before writing the request

commit fd55e8d
Author: TSUYUSATO Kitsune <[email protected]>
Date:   Mon Jan 22 10:23:06 2018 +0900

    Remove TODO about duplicated named group Regex

commit e5da7d3
Author: Chris Hobbs <[email protected]>
Date:   Sun Jan 21 16:12:47 2018 +0000

    Add Int#bits_set? method (crystal-lang#5619)

commit e83e894
Author: Sijawusz Pur Rahnama <[email protected]>
Date:   Sun Jan 21 01:24:33 2018 +0100

    Add additional parameters for Logger#new

commit 4c2f6f6
Author: Sijawusz Pur Rahnama <[email protected]>
Date:   Sat Jan 20 23:37:48 2018 +0100

    Remove TODOs related to Crystal 0.22 (crystal-lang#5546)

commit 8bc3cee
Author: Sijawusz Pur Rahnama <[email protected]>
Date:   Sat Jan 20 23:37:07 2018 +0100

    Add #clear method to ArrayLiteral/HashLiteral (crystal-lang#5265)

commit 6c2297b
Author: Julien Portalier <[email protected]>
Date:   Sat Jan 20 14:39:19 2018 +0100

    Fix bcrypt hard limit on passwords to 71 bytes (crystal-lang#5356)

    Despite the original bcrypt paper claiming passwords must be a
    maximum of 56 bytes, the implementations are compatible to up to 72
    bytes.

    Since increasing the limit doesn't break compatibility, but other
    implementations allow as many as 72 bytes, let's increase the
    arbitrary limitation of 51 characters (which was wrong anyway) to 72
    bytes, minus the leading null byte, that is a password of 71 bytes.

commit ddbcf6c
Author: Sijawusz Pur Rahnama <[email protected]>
Date:   Sat Jan 20 12:38:58 2018 +0100

    BigDecimal.new(str : String) handles scientific notation (crystal-lang#5582)

    * BigDecimal.new(str : String) handles scientific notation

    * fixup! by @RX14

    * Spec with cases suggested by @RX14

    * Fix failing spec

    * Fixed another failing case

commit 3515968
Author: Johannes Müller <[email protected]>
Date:   Sat Jan 20 12:37:08 2018 +0100

    Remove unneeded parenthesis from calls in macro expression (crystal-lang#5493)

    * Remove parenthesis from macro calls without arguments: not needed anymore as of 0.24.0

    * Resolve TODO in urandom

commit a288123
Author: Johannes Müller <[email protected]>
Date:   Fri Jan 19 01:37:02 2018 +0100

    Fix HTTP::StaticFileHandler to properly parse HTTP date (crystal-lang#5607)

commit a29e21b
Author: Damian Hamill <[email protected]>
Date:   Thu Jan 18 20:36:36 2018 +0700

    return correct content type for SVG images (crystal-lang#5605)

commit 1210596
Author: Benny Bach <[email protected]>
Date:   Thu Jan 18 14:21:41 2018 +0100

    Add cache control headers to http static file handler + a few more mi… (crystal-lang#2470)

    * Add cache control headers to http static file handler + a few more mime types

    * Remove Cache-Control header from static file handler

    * Undo extra mime types in static file handler

    * Fix code review issues:

    * use HTTP.rfc3339_date formatter
    * parse time value from If-Modified-Since header
    * compare header and mtime as older or equals

    * use `headers["If-Modified-Since"]?`

commit 3b50388
Author: Juan Wajnerman <[email protected]>
Date:   Thu Jan 18 10:14:32 2018 -0300

    OpenSSL: Hide errors when either libcrypto or libssl are not found by pkg-config (crystal-lang#5603)

commit f3168b6
Author: Johannes Müller <[email protected]>
Date:   Thu Jan 18 14:09:46 2018 +0100

    Add time zones support (crystal-lang#5324)

    * Add cache for last zone to Time::Location#lookup

    * Implement Time::Location including timezone data loader

    Remove representation of floating time from `Time` (formerly expressed
    as `Time::Kind::Unspecified`).

    Floating time should not be represented as an instance of `Time` to avoid undefined operations through type safety (see crystal-lang#5332).
    Breaking changes:
    * Calls to `Time.new` and `Time.now` are now in the local time zone by
      default.
    * `Time.parse`, `Time::Format.new` and `Time::Format.parse` don't specify a default location.
      If none is included in the time format and no default argument is provided, the parse method wil raise an exception because there is no way to know how such a value should be represented as an instance of `Time`.
      Applications expecting time values without time zone should provide default location to apply in such a case.

    * Implement custom zip file reader to remove depenencies

    * Add location cache for `Location.load`

    * Rename `Location.local` to `.load_local` and make `local` a class property

    * Fix env ZONEINFO

    * Fix example code string representation of local Time instance

    * Time zone implementation for win32

    This adds basic support for using the new time zone model on windows.
    * `Crystal::System::Time.zone_sources` returns an empty array because
      Windows does not include a copy of the tz database.
    * `Crystal::System::Time.load_localtime` creates a local time zone
      `Time::Location` based on data provided by `GetTimeZoneInformation`.
    * A mapping from Windows time zone names to identifiers used by the
      IANA timezone database is included as well as an automated generator
      for that file.

    * Add stubs for methods with file acces

    Trying to load a location from a file will fail because `File` is not
    yet ported to windows.

commit 6a574f2
Author: TSUYUSATO Kitsune <[email protected]>
Date:   Thu Jan 18 10:47:54 2018 +0900

    Fix parsing an empty heredoc

commit 84288b7
Author: Ary Borenszweig <[email protected]>
Date:   Wed Jan 17 16:08:54 2018 -0300

    Compiler: add more locations (crystal-lang#5597)

commit bba4985
Author: TSUYUSATO Kitsune <[email protected]>
Date:   Thu Jan 18 04:00:01 2018 +0900

    Use join instead of each_with_index and `if i > 0` (crystal-lang#5599)

    Just a refactoring.

commit 8eb8554
Author: Ary Borenszweig <[email protected]>
Date:   Wed Jan 17 15:58:57 2018 -0300

    Correct implementation of heredoc (crystal-lang#5578)

    Now you can specify multiple heredocs in a single line, just like in Ruby.

commit 295ddc3
Author: Johannes Müller <[email protected]>
Date:   Sat Jan 13 12:49:02 2018 +0100

    Add overload to String.from_utf16 with pointer

commit 244da57
Author: Sijawusz Pur Rahnama <[email protected]>
Date:   Mon Jan 15 18:29:07 2018 +0100

    Allow leading + in number strings

commit 80cbe66
Author: asterite <[email protected]>
Date:   Sun Jan 14 10:46:11 2018 -0300

    Compiler: emit `.o` file to a temporary location and then atomically rename it

commit 597ccac
Author: Ary Borenszweig <[email protected]>
Date:   Mon Oct 23 21:15:37 2017 -0300

    Implement JSON::Any and YAML::Any without recursive aliases

commit b4fed51
Author: Guilherme Bernal <[email protected]>
Date:   Sun Jan 14 15:17:42 2018 -0300

    Fix strdup for LibXML: undefined behavior

    The last argument of xmlGcMemSetup is a GC-aware implementation of strdup. It should return a valid C-string with the null-character.

commit c7cc787
Author: Jamie Gaskins <[email protected]>
Date:   Sun Jan 14 06:52:32 2018 -0500

    Pretty-print objects in playground inspector (crystal-lang#4601)

commit d7c9551
Author: RX14 <[email protected]>
Date:   Fri Jan 12 23:32:10 2018 +0000

    Rename win_nt.cr to winnt.cr

    The header file is called winnt.h, the win_nt.cr was an error and should be
    merged with winnt.cr.

commit d294dd1
Author: RX14 <[email protected]>
Date:   Fri Jan 12 23:28:12 2018 +0000

    Reenable Crystal::Hasher seed randomisation on win32

commit 323613b
Author: RX14 <[email protected]>
Date:   Fri Jan 12 23:20:27 2018 +0000

    Ensure String#to_utf16 result has a null terminator

commit 48a1130
Author: Chris Hobbs <[email protected]>
Date:   Sat Jan 13 00:53:17 2018 +0000

    Simplify Crystal::System interface by adding File.stat? and lstat? (crystal-lang#5553)

    By providing these methods we can make the implementation of File.empty? and
    File.file? platform-unspecific. This makes the interface to
    Crystal::System::File smaller and cleaner.

commit 77de91f
Author: Lachlan Dowding <[email protected]>
Date:   Thu Jan 11 08:13:16 2018 +1000

    Fix Iterator spec typo: integreation -> integration

commit bd42727
Author: Johannes Müller <[email protected]>
Date:   Thu Jan 11 19:32:28 2018 +0100

    Reimplement Dir.glob  (crystal-lang#5179)

commit f16e63a
Author: Mark <[email protected]>
Date:   Thu Jan 11 10:28:54 2018 -0800

    Change Hash#key to Hash#key_for (crystal-lang#5444)

    * Change Hash#key to Hash#key_for

    * Update Spec description for Hash#key_for and Hash#key_for?

commit f59a349
Author: TSUYUSATO Kitsune <[email protected]>
Date:   Fri Jan 12 03:24:04 2018 +0900

    Fix to keep paren information for `to_s` on clone (crystal-lang#5454)

    Fixed crystal-lang#5415

    Added keeping information for `to_s` on clone check in `compiler/parser/to_s_spec.cr`.
    I think this property should be kept by all `ASTNode#clone` implementation.

commit 5eecd57
Author: Julien Portalier <[email protected]>
Date:   Wed Jan 10 17:38:18 2018 +0100

    Fix: decode DWARF line sequences with single program entry (crystal-lang#5565)

    Debug::DWARF::LineNumbers would skip the program statement when it
    contained a single entry, because of a wrong assumption of the
    sequence unit_length entry, which doesn't account for the unit
    length space in the standard, and was overlooked in checking whether
    the sequence had any program statement, or not.

commit 048f77e
Author: Julien Portalier <[email protected]>
Date:   Wed Jan 10 17:38:18 2018 +0100

    Fix: decode DWARF line sequences with single program entry (crystal-lang#5565)

    Debug::DWARF::LineNumbers would skip the program statement when it
    contained a single entry, because of a wrong assumption of the
    sequence unit_length entry, which doesn't account for the unit
    length space in the standard, and was overlooked in checking whether
    the sequence had any program statement, or not.

commit 972f2b3
Author: TSUYUSATO Kitsune <[email protected]>
Date:   Thu Dec 21 20:16:08 2017 +0900

    Fix to work formatting `foo.[bar] = baz`

    Fixed crystal-lang#5416

commit 157eca0
Author: TSUYUSATO Kitsune <[email protected]>
Date:   Sun Nov 5 23:30:20 2017 +0900

    Clone macro default argument before macro expansion

commit a3ca37e
Author: Michael Petö <[email protected]>
Date:   Wed Jan 10 14:47:44 2018 +0100

    Fix Time::Span multiply and divide (crystal-lang#5563)

commit 5f1440d
Author: Ary Borenszweig <[email protected]>
Date:   Tue Jan 9 17:25:51 2018 -0300

    Formatter: fix bug regarding backslash (crystal-lang#5194)

commit 77db65a
Author: Peter Leitzen <[email protected]>
Date:   Tue Jan 9 13:39:59 2018 +0100

    Fix spec name for parsing BigDecimal from floats (crystal-lang#5561)

    Follow-up to crystal-lang#5525

commit d8343a6
Author: Luke Rodgers <[email protected]>
Date:   Mon Jan 8 19:29:06 2018 -0500

    Define `new(JSON::PullParser)` on BigDecimal so it can be deserialized (crystal-lang#5525)

commit d023138
Author: Benoit de Chezelles <[email protected]>
Date:   Mon Jan 8 01:25:21 2018 +0100

    Allow to init a crystal app/lib in an empty directory (crystal-lang#4691)

commit f7a931c
Author: Sijawusz Pur Rahnama <[email protected]>
Date:   Mon Jan 8 01:19:37 2018 +0100

    Extend BigDecimal with a few things (crystal-lang#5390)

commit 3cb4b94
Author: Ary Borenszweig <[email protected]>
Date:   Sat Jan 6 15:17:23 2018 -0300

    CLI: remove deps command (crystal-lang#5544)

commit 525ea49
Author: Ary Borenszweig <[email protected]>
Date:   Sat Jan 6 11:04:16 2018 -0300

    Compiler: remove extra `shell` argument when executing macro run (crystal-lang#5543)

commit 161c17a
Author: Noriyo Akita <[email protected]>
Date:   Sat Jan 6 21:34:06 2018 +0900

    Fix typo mutli to multi (crystal-lang#5547)

    * tools/formatter: Fix typo

    mutli -> multi

    * Fix typo in comment

    Mutliple -> Multiple

commit e1680dd
Author: asterite <[email protected]>
Date:   Fri Jan 5 14:07:13 2018 -0300

    Include UUID in docs

commit a06bf0f
Author: asterite <[email protected]>
Date:   Fri Jan 5 14:07:13 2018 -0300

    Include UUID in docs

commit d3fed8b
Author: Johannes Müller <[email protected]>
Date:   Tue Jan 2 14:32:06 2018 +0100

    Rename skip() macro method to skip_file() in docs (crystal-lang#5488)

commit 4f56a57
Author: Brian J. Cardiff <[email protected]>
Date:   Fri Dec 29 20:38:36 2017 -0300

    Update gitignore template (crystal-lang#5480)

    * Fix docs directory in gitignore.ecr (renamed in crystal-lang#4937)

commit 12cc7f2
Author: Brian J. Cardiff <[email protected]>
Date:   Thu Dec 28 02:51:47 2017 -0300

    Fix missing Dir#each to be an Enumerable (crystal-lang#5458)

commit 4313e86
Author: Brian J. Cardiff <[email protected]>
Date:   Tue Dec 26 21:59:22 2017 -0300

    Update bin/ci to use LIBRARY_PATH from 0.24.1 (crystal-lang#5461)

commit 68c0098
Author: Dominic Jodoin <[email protected]>
Date:   Thu Dec 21 12:40:38 2017 -0500

    Enable IPv6 in Docker (crystal-lang#5429)
@sam0x17
Copy link
Contributor

sam0x17 commented Aug 12, 2019

I am also experiencing this issue here in the context of a docker image running in lambda via up.sh: Sija/raven.cr#47 (comment)

@benbonnet
Copy link

benbonnet commented Jan 8, 2021

Hello all;

quite new to crystal; focusing on getting the smallest docker image (so, statically building a crystal app).

Currently stuck on the issue here; I was thinking about using an intermediate to retrieve the required certs :

FROM crystallang/crystal:latest as compiler
RUN mkdir /app
COPY . /app
RUN mkdir /app/bin
WORKDIR /app
RUN shards --production
RUN crystal build /app/src/appname.cr --static --release --no-debug -o /app/bin/appname

FROM alpine as certs-builder
RUN apk update && apk upgrade && apk add --no-cache ca-certificates
RUN update-ca-certificates

FROM busybox:glibc
COPY --from=compiler /app/bin/appname .
COPY --from=certs-builder /etc/ssl/certs /etc/ssl/certs

CMD ["./appname"]

Still failing.

Would there be a way to achieve something similar by specifying the path to the certs in the tls context provided to ? Or should I choose another approach ?

It feels awkward to use OpenSSL::SSL::Context::Client.insecure, although it make it all work as expected

@Blacksmoke16
Copy link
Member

@benbonnet
Copy link

benbonnet commented Jan 8, 2021

@Blacksmoke16
As shown above it is first built within crystallang/crystal:latest.
On the final step; the app bin was copied through a FROM scratch in the last step.
Had to move on and use FROM busybox:glibc (otherwise it could not resolve hostnames; among other problems).
As this slight change enabled a missing capability; am in hope to find a way to just get what's needed be able to verify the certs

fully statically linked are only possible within alpine; but in case the only requirements was certs verification, is there a way to only get it to have a working final image ?

@Blacksmoke16
Copy link
Member

Blacksmoke16 commented Jan 8, 2021

@benbonnet I guess what I'm getting at is couldn't you statically link the binary in the Crystal alpine image, then move it to another smaller Alpine image and just use that? Like I suggested in #6099 (comment)? That's what I do and it's been working fine for me.

@benbonnet
Copy link

benbonnet commented Jan 8, 2021

@Blacksmoke16 well you might get a way larger image (10x maybe ?). I do know my asking is completely overkill and we would still be fine by not even building statically.
But I've been super hyped to see how the smallest image possible would reduce our pipeline deployment and functions startup (we're using cloudrun, such a small image cold starts in 200ms or less)

thanks a lot for your link & help; i might follow that way

@Blacksmoke16
Copy link
Member

Blacksmoke16 commented Jan 8, 2021

@benbonnet

docker images
REPOSITORY       TAG                         IMAGE ID            CREATED             SIZE
busybox          glibc                       b0748d3617e4        9 days ago          5.21MB
alpine           3.12                        389fef711851        3 weeks ago         5.57MB

Size wise they're essentially the same, but with alpine you have a package manager and such. Granted this is not including the size of your Crystal binary, or other dependencies you may need.

EDIT: Might also be able to get away with not statically linking if it's also going to run in Alpine. However I'm not sure what the size comparison is to a static binary versus the libs themselves.

@straight-shoota
Copy link
Member

Still failing.

What exactly is failing? Is it related to this issue or a different one? From the static linking discussion it feels like something else, which would probably fit better to https://forum.crystal-lang.org/

Not sure if dynamic linking is a factor for your issue, but when you copy a dynamically linked binary to a different system, you need to make sure it has matching dynamic libraries available.
I would strongly recommend to link fully statically (can use the alpine image for that). That causes less friction with moving between systems and should help you goal to reach minimal binary size.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests