summaryrefslogtreecommitdiff
path: root/lib/ipaddr.rb
AgeCommit message (Collapse)Author
2025-12-26[ruby/ipaddr] Follow-up fix for InvalidAddressError messagesTaketo Takashima
https://github.com/ruby/ipaddr/commit/b92ef74b91
2025-12-10[ruby/ipaddr] v1.2.8Hiroshi SHIBATA
https://github.com/ruby/ipaddr/commit/93ef50bc04
2025-11-09[ruby/ipaddr] [DOC] Stop documentation for internalsNobuyoshi Nakada
https://github.com/ruby/ipaddr/commit/cb9f561883
2025-10-17[ruby/ipaddr] Fix InvalidAddressError messageishikawa999
https://github.com/ruby/ipaddr/commit/c96dbadee3
2025-09-26[ruby/ipaddr] Fix `#ipv4_compat` returning invalid prefixTaketo Takashima
https://github.com/ruby/ipaddr/commit/7c85bb8dfd Co-authored-by: Tietew <tietew@gmail.com>
2025-04-26[ruby/ipaddr] Added IPAddr#+/-Taketo Takashima
https://github.com/ruby/ipaddr/commit/78b4f53bf5
2024-10-19[ruby/ipaddr] Bump the version to 1.2.7Akinori MUSHA
https://github.com/ruby/ipaddr/commit/b44d2a1173
2024-10-19[ruby/ipaddr] Use string interpolation instead of format()Akinori MUSHA
https://github.com/ruby/ipaddr/commit/1f41cd7320
2024-10-18[ruby/ipaddr] Use string interpolation instead of format()Akinori MUSHA
https://github.com/ruby/ipaddr/commit/73f59e111f
2024-10-18[ruby/ipaddr] Added to_json/as_json methodTaketo Takashima
Updated to use cidr method when return address with prefix in #as_json https://github.com/ruby/ipaddr/commit/cf8181d53e
2024-04-18[ruby/ipaddr] Add IPAddr.cidr to return ip address in cidr notationBen Fritsch
https://github.com/ruby/ipaddr/commit/f5b006741f
2024-04-10[ruby/ipaddr] Added IPAddr#wildcard_maskTaketo Takashima
https://github.com/ruby/ipaddr/commit/2093cebc1d
2024-02-23[ruby/ipaddr] Prefer String#start_with? over Regexp.matchAkira Matsuda
https://github.com/ruby/ipaddr/commit/054fe12ec4
2024-02-23[ruby/ipaddr] String#split seems to be faster than capturing digits with RegexpAkira Matsuda
https://github.com/ruby/ipaddr/commit/e0feb0708b
2023-12-25[ruby/ipaddr] Consider IPv4-mapped IPv6 addresses link local/loopback if ↵Earlopain
IPV4 address is private Same as #57 https://github.com/ruby/ipaddr/commit/d56acecb80
2023-12-25[ruby/ipaddr] Fix regressions in exception messagesLuke Randall
Changes introduced by 09edfd4 have broken some exception messages, and added the address as an unnecessary suffix in others. https://github.com/ruby/ipaddr/commit/74a043109c
2023-12-25[ruby/ipaddr] ntop: Measure address size in bytesKasumi Hanazuki
`IPAddr.ntop` takes the binary representation of an IP address, whose length should be 4 or 16 *bytes* (not characters/codepoints). The current implementation accepts strings in any encoding, but for some values in non-BINARY encoding, it fails proper length check and raises an `AddressFamilyError`. Since passing strings in a multibyte encoding has never worked correctly for years, this patch makes it an explicit error with an `InvalidAddressError`. Fixes: https://github.com/ruby/ipaddr/issues/56 https://github.com/ruby/ipaddr/commit/a33fd14d4a
2023-12-16[ruby/ipaddr] Bump up v1.2.6Hiroshi SHIBATA
https://github.com/ruby/ipaddr/commit/247459faa5
2023-09-23Improve performance of include? by 5-10xHartley McGuire
Rails uses IPAddr#include? to evaluate what it should use as the client's remote ip by filtering potential ips against a trusted list of internal ips. In a _very_ minimal app, #include? was showing up in a profile as ~1% of request time. The issue is that #include? was converting itself and the other value passed in to ranges of IPAddr. This mean as a worst case (where other is a non-IPAddr, like a String) then there would be 5 IPAddr instances created (other -> IPAddr, and two each for the conversions to ranges). However, wrapping the begin and end values as IPAddr is not needed because they are necessarily fixed addresses already. This patch extracts the logic for getting the begin_addr and end_addr from the #to_range method so that they can be used in #include? without having to instantiate so many IPAddr. Benchmark: ```ruby net1 = IPAddr.new("192.168.2.0/24") net2 = IPAddr.new("192.168.2.100") net3 = IPAddr.new("192.168.3.0") net4 = IPAddr.new("192.168.2.0/16") Benchmark.ips do |x| x.report("/24 includes address") { net1.include? net2 } x.report("/24 not includes address") { net1.include? net3 } x.report("/16 includes /24") { net4.include? net1 } x.report("/24 not includes /16") { net1.include? net4 } x.compare! end ``` Before: ``` Comparison: /24 not includes /16: 175041.3 i/s /24 not includes address: 164933.2 i/s - 1.06x (± 0.00) slower /16 includes /24: 163881.9 i/s - 1.07x (± 0.00) slower /24 includes address: 163558.4 i/s - 1.07x (± 0.00) slower ``` After: ``` Comparison: /24 not includes /16: 2588364.9 i/s /24 not includes address: 1474650.7 i/s - 1.76x (± 0.00) slower /16 includes /24: 1461351.0 i/s - 1.77x (± 0.00) slower /24 includes address: 1425463.5 i/s - 1.82x (± 0.00) slower ```
2023-06-22[ruby/ipaddr] Consider IPv4-mapped IPv6 addresses private if IPv4 address is ↵Jeremy Evans
private Fixes [Bug #19479] https://github.com/ruby/ipaddr/commit/7faa0768d3
2022-12-05[ruby/ipaddr] Bump version to 1.2.5Hiroshi SHIBATA
https://github.com/ruby/ipaddr/commit/d92acb3982
2022-09-08[ruby/ipaddr] Improve Ractor-compliancerm155
https://github.com/ruby/ipaddr/commit/73461724e5
2022-02-10[ruby/ipaddr] Bump version to 1.2.4Hiroshi SHIBATA
https://github.com/ruby/ipaddr/commit/6edf6ee6c3
2022-02-10[ruby/ipaddr] Fix exception calling `to_range' after `freeze'Espartaco Palma
https://github.com/ruby/ipaddr/commit/77fe1fca0a
2022-02-10[ruby/ipaddr] Ipaddr#native must also coerce `@mask_addr`Jean Boussier
Before it would be left as an IPv6 mask causing `to_range` to fail. ``` >> IPAddr.new("::2").native.to_range /opt/rubies/3.0.3/lib/ruby/3.0.0/ipaddr.rb:479:in `set': invalid address (IPAddr::InvalidAddressError) ``` https://github.com/ruby/ipaddr/commit/af485192f3
2022-02-10[ruby/ipaddr] Expose IPAddr::VERSIONJean Boussier
An almost universal convention for gems is to expose Namespace::VERSION which makes it much easier when debugging etc. https://github.com/ruby/ipaddr/commit/587ae6996e
2021-10-11[ruby/ipaddr] Fix include? and ipv4_mapped to allow drb tests to passJeremy Evans
include? should return false if comparing an IPv4 address to an IPv6 address. ipv4_mapped needs to set the correct netmask on the mapped addresses. https://github.com/ruby/ipaddr/commit/da22ef8e6c
2021-10-11[ruby/ipaddr] Make IPAddr#include? consider range of argumentJeremy Evans
It would be nice to use Range#cover? here, but it doesn't work correctly before Ruby 2.6. Switch to manual checks of the beginning of end of the ranges. Fixes Ruby Bug 14119 https://github.com/ruby/ipaddr/commit/f45630da31
2021-10-07[ruby/ipaddr] Support zone identifiers in IPv6 addressesJeremy Evans
These are supported by Ruby's socket library if the operating system supports zone indentifiers, so they should be supported by ipaddr. See RFCs 4007 and 6874 for additional information. Implements Ruby Feature #10911 https://github.com/ruby/ipaddr/commit/09a6408fb2
2021-10-07[ruby/ipaddr] Add netmask method that returns net mask as string.Bogdan Irimie
https://github.com/ruby/ipaddr/commit/283d16f3a3
2021-10-07[ruby/ipaddr] Disallow leading zeros in maskJeremy Evans
https://github.com/ruby/ipaddr/commit/f49d2d49a4
2021-10-07[ruby/ipaddr] Raise if extra slashes followNobuyoshi Nakada
https://bugs.ruby-lang.org/issues/15832 https://github.com/ruby/ipaddr/commit/de9805d6fa
2021-10-07[ruby/ipaddr] Avoid reraising exceptionsJeremy Evans
Instead of raising a new exception with a modified message, just use the correct message to begin with. This avoids the issue with both exceptions being displayed at error exit. https://github.com/ruby/ipaddr/commit/09edfd4a7f
2021-10-07[ruby/ipaddr] Removing superfluos assingments & returnEspartaco Palma
Also adding test for ntop https://github.com/ruby/ipaddr/commit/0ba16cca10
2018-12-18Import ipaddr 1.2.2knu
- Enable frozen_string_literal and do a bit of code cleanup git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66432 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-08-09Include the input in the message when raising InvalidAddressErrorknu
[Feature #5987] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@64244 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-12-12Add uplevel keyword to Kernel#warn and use itshyouhei
If uplevel keyword is given, the warning message is prepended with caller file and line information and the string "warning: ". The use of the uplevel keyword makes Kernel#warn format output similar to how rb_warn formats output. This patch modifies net/ftp and net/imap to use Kernel#warn instead of $stderr.puts or $stderr.printf, since they are used for printing warnings. This makes lib/cgi/core and tempfile use $stderr.puts instead of warn for debug logging, since they are used for debug printing and not for warning. This does not modify bundler, rubygems, or rdoc, as those are maintained outside of ruby and probably wish to remain backwards compatible with older ruby versions. rb_warn_m code is originally from nobu, but I've changed it so that it only includes the path and lineno from uplevel (not the method), and also prepends the string "warning: ", to make it more similar to rb_warn. From: Jeremy Evans code@jeremyevans.net Signed-off-by: Urabe Shyouhei shyouhei@ruby-lang.org git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61155 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-10-21Use caller with length to reduce unused stringskazu
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60288 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-10-21Import ipaddr 1.2.0knu
- Add IPAddr#prefix - Add IPAddr#loopback? - Add IPAddr#private? [Feature #11666] - Add IPAddr#link_local? [Feature #10912] - Reject invalid address mask [Bug #13399] - Warn that IPAddr#ipv4_compat and #ipv4_compat? are deprecated [#Bug 13769] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60270 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-11-05IPAddr#== and IPAddr#<=> no longer raise an exception if coercion failsknu
* lib/ipaddr.rb (IPAddr#==): If coercion fails, return false instead of passing through the exception. [ruby-core:77451] [Bug #12799] * lib/ipaddr.rb (IPAddr#<=>): If coercion fails, return nil instead of passing through the exception. [ruby-core:77451] [Bug #12799] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56594 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-05-21ipaddr: fix typo [ci skip]nobu
* lib/ipaddr.rb: [DOC] fix documentation of IN6MASK to mention IPv6. [Fix GH-1349] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@55096 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-12-16Add frozen_string_literal: false for all filesnaruse
When you change this to true, you may need to add more tests. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53141 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-10-23* lib/ipaddr.rb, test/test_ipaddr.rb: Reject invalid address containedhsbt
EOL string. Patch by @kachick [fix GH-942][Bug #11513] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52244 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-05-31* lib/ipaddr.rb: extracted inline tests into test dir.hsbt
* test/test_ipaddr.rb: ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46277 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-02-18* lib/ipaddr.rb (IPAddr#in6_addr): Fix a typo with the closingknu
parenthesis. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@39300 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-02-18Fix the IPv6 parser.knu
* lib/ipaddr.rb (IPAddr#in6_addr): Fix the parser so that it can recognize IPv6 addresses with only one edge 16-bit piece compressed, like [::2:3:4:5:6:7:8] or [1:2:3:4:5:6:7::]. [Bug #7477] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@39299 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-11-16* lib/cgi/core.rb: Use symbols instead of strings formarcandre
{const_,instance_variable_}{get,set}. [#7161] * lib/drb/drb.rb: ditto. * lib/ipaddr.rb: ditto. * lib/irb/workspace.rb: ditto. * lib/monitor.rb: ditto. * lib/rss/maker/base.rb: ditto. * lib/rss/rss.rb: ditto. * lib/xmlrpc/parser.rb: ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37688 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-08-31* lib/ipaddr.rb: Introduce several new error classes where onlyknu
ArgumentError and StandardError were used. IPAddr::Error is their common ancestor class that inherits from ArgumentError for backward compatibility. Submitted by Jon Daniel. Fixes #173 on GitHub. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@36868 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-08-21remove trainling spaces.nobu
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@36750 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-06-02* lib/ipaddr.rb: Inhibit zero-filled octets in an IPv4 address inknu
all platforms. [ruby-dev:45671] * lib/ipaddr.rb: Allow the x:x:x:x:x:x:d.d.d.d form not limited to IPv4 mapped/compatible addresses. This change also makes it possible for the parser to understand IPv4 mapped and compatible IPv6 addresses in non-compressed form. * lib/ipaddr.rb: Stop exposing IPSocket.valid*? methods which were only usable on non-IPv6-ready platforms. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@35865 b2dd03c8-39d4-4d8f-98ff-823fe69b080e