net-imap 0.4.3 → 0.4.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of net-imap might be problematic. Click here for more details.

checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e933100b505623a478f75c60fa9daab5da7a67c0e68a5b0cf83db20e4a362f65
4
- data.tar.gz: 79e288f7011385db37f53be45d801cc4fc96b2ba5a08db9c3b7b0bed462989d1
3
+ metadata.gz: da8cb634d9ee1613035c81a25d28ae9f36b3d0985bcb61da9a38aacb87854a5f
4
+ data.tar.gz: e504b145415da3a025c6f4ab973b212764c75ef4214d0fed485fdb0b17e83752
5
5
  SHA512:
6
- metadata.gz: c4d1fa03ef8db7e5311437c04ee11d4f22017d1a289e63eb8c9c0a64b0816722cb68793c92313ace4b738675eb7bad091007e914c9b381e1e61df35a5dd12ccd
7
- data.tar.gz: 6532ed39b47bc4fa70be3430d64f385c19a07087ee5c223a066ce42b00c77d5c99661d78a32347e32475175b8431fbabfcb1b8c351b9fb9b931ff5d859e25f87
6
+ metadata.gz: 0cef39a5ac6454ded84c395fb2671df678e17611d7eff42665113c21f955ebcb6ffdf9035dd1e6fdb3de38aa38f43431537ded3d484ffba7d699b478bb8c3e1e
7
+ data.tar.gz: 23f777092b2940b725685285a6372b56744a9968fcc76872ebf9ef3136fb3665a89a85174dc34636e547b90d8d3a1945627ce79390f10122aadb57b57004f789
@@ -15,6 +15,7 @@ module Net
15
15
 
16
16
  # we can skip lexer for single character matches, as a shortcut
17
17
  def def_char_matchers(name, char, token)
18
+ byte = char.ord
18
19
  match_name = name.match(/\A[A-Z]/) ? "#{name}!" : name
19
20
  char = char.dump
20
21
  class_eval <<~RUBY, __FILE__, __LINE__ + 1
@@ -27,7 +28,7 @@ module Net
27
28
 
28
29
  # use token or string peek
29
30
  def peek_#{name}?
30
- @token ? @token.symbol == #{token} : @str[@pos] == #{char}
31
+ @token ? @token.symbol == #{token} : @str.getbyte(@pos) == #{byte}
31
32
  end
32
33
 
33
34
  # like accept(token_symbols); returns token or nil
@@ -35,7 +36,7 @@ module Net
35
36
  if @token&.symbol == #{token}
36
37
  #{SHIFT_TOKEN}
37
38
  #{char}
38
- elsif !@token && @str[@pos] == #{char}
39
+ elsif !@token && @str.getbyte(@pos) == #{byte}
39
40
  @pos += 1
40
41
  #{char}
41
42
  end
@@ -46,7 +47,7 @@ module Net
46
47
  if @token&.symbol == #{token}
47
48
  #{SHIFT_TOKEN}
48
49
  #{char}
49
- elsif !@token && @str[@pos] == #{char}
50
+ elsif !@token && @str.getbyte(@pos) == #{byte}
50
51
  @pos += 1
51
52
  #{char}
52
53
  else
@@ -109,7 +110,6 @@ module Net
109
110
  end
110
111
  end
111
112
  RUBY
112
-
113
113
  end
114
114
 
115
115
  end
@@ -1101,47 +1101,32 @@ module Net
1101
1101
  end
1102
1102
 
1103
1103
  # RFC3501 & RFC9051:
1104
- # header-fld-name = astring
1104
+ # header-fld-name = astring
1105
+ #
1106
+ # NOTE: Previously, Net::IMAP recreated the raw original source string.
1107
+ # Now, it grabs the raw encoded value using @str and @pos. A future
1108
+ # version may simply return the decoded astring value. Although that is
1109
+ # technically incompatible, it should almost never make a difference: all
1110
+ # standard header field names are valid atoms:
1111
+ #
1112
+ # https://www.iana.org/assignments/message-headers/message-headers.xhtml
1105
1113
  #
1106
1114
  # Although RFC3501 allows any astring, RFC5322-valid header names are one
1107
1115
  # or more of the printable US-ASCII characters, except SP and colon. So
1108
1116
  # empty string isn't valid, and literals aren't needed and should not be
1109
- # used. This syntax is unchanged by [I18N-HDRS] (RFC6532).
1117
+ # used. This is explicitly unchanged by [I18N-HDRS] (RFC6532).
1110
1118
  #
1111
1119
  # RFC5233:
1112
- # optional-field = field-name ":" unstructured CRLF
1113
- # field-name = 1*ftext
1114
- # ftext = %d33-57 / ; Printable US-ASCII
1115
- # %d59-126 ; characters not including
1116
- # ; ":".
1117
- #
1118
- # Atom and quoted should be sufficient.
1119
- #
1120
- # TODO: Use original source string, rather than decode and re-encode.
1121
- # TODO: or at least, DRY up this code with the send_command formatting.
1120
+ # optional-field = field-name ":" unstructured CRLF
1121
+ # field-name = 1*ftext
1122
+ # ftext = %d33-57 / ; Printable US-ASCII
1123
+ # %d59-126 ; characters not including
1124
+ # ; ":".
1122
1125
  def header_fld_name
1123
- case (str = astring)
1124
- when ""
1125
- warn '%s header-fld-name is an invalid RFC5322 field-name: ""' %
1126
- [self.class]
1127
- return '""'
1128
- when /[\x80-\xff\r\n]/n
1129
- warn "%s header-fld-name %p has invalid RFC5322 field-name char: %p" %
1130
- [self.class, str, $&]
1131
- # literal
1132
- return "{" + str.bytesize.to_s + "}" + CRLF + str
1133
- when /[^\x21-\x39\x3b-\xfe]/n
1134
- warn "%s header-fld-name %p has invalid RFC5322 field-name char: %p" %
1135
- [self.class, str, $&]
1136
- # invalid quoted string
1137
- return '"' + str.gsub(/["\\]/n, "\\\\\\&") + '"'
1138
- when /[(){ \x00-\x1f\x7f%*"\\]/n
1139
- # quoted string
1140
- return '"' + str.gsub(/["\\]/n, "\\\\\\&") + '"'
1141
- else
1142
- # atom
1143
- return str
1144
- end
1126
+ assert_no_lookahead
1127
+ start = @pos
1128
+ astring
1129
+ @str[start...@pos - 1]
1145
1130
  end
1146
1131
 
1147
1132
  # mailbox-data = "FLAGS" SP flag-list / "LIST" SP mailbox-list /
data/lib/net/imap.rb CHANGED
@@ -662,7 +662,7 @@ module Net
662
662
  # * {IMAP URLAUTH Authorization Mechanism Registry}[https://www.iana.org/assignments/urlauth-authorization-mechanism-registry/urlauth-authorization-mechanism-registry.xhtml]
663
663
  #
664
664
  class IMAP < Protocol
665
- VERSION = "0.4.3"
665
+ VERSION = "0.4.4"
666
666
 
667
667
  # Aliases for supported capabilities, to be used with the #enable command.
668
668
  ENABLE_ALIASES = {
@@ -2188,7 +2188,7 @@ module Net
2188
2188
  .join(' ')
2189
2189
  synchronize do
2190
2190
  send_command("ENABLE #{capabilities}")
2191
- result = clear_responses("ENABLED").last
2191
+ result = clear_responses("ENABLED").last || []
2192
2192
  @utf8_strings ||= result.include? "UTF8=ACCEPT"
2193
2193
  @utf8_strings ||= result.include? "IMAP4REV2"
2194
2194
  result
@@ -2642,7 +2642,7 @@ module Net
2642
2642
  else
2643
2643
  send_command(cmd, *keys)
2644
2644
  end
2645
- clear_responses("SEARCH").last
2645
+ clear_responses("SEARCH").last || []
2646
2646
  end
2647
2647
  end
2648
2648
 
@@ -2691,7 +2691,7 @@ module Net
2691
2691
  normalize_searching_criteria(search_keys)
2692
2692
  synchronize do
2693
2693
  send_command(cmd, sort_keys, charset, *search_keys)
2694
- clear_responses("SORT").last
2694
+ clear_responses("SORT").last || []
2695
2695
  end
2696
2696
  end
2697
2697
 
@@ -2704,7 +2704,7 @@ module Net
2704
2704
  normalize_searching_criteria(search_keys)
2705
2705
  synchronize do
2706
2706
  send_command(cmd, algorithm, charset, *search_keys)
2707
- clear_responses("THREAD").last
2707
+ clear_responses("THREAD").last || []
2708
2708
  end
2709
2709
  end
2710
2710
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: net-imap
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.3
4
+ version: 0.4.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shugo Maeda
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2023-10-30 00:00:00.000000000 Z
12
+ date: 2023-11-03 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: net-protocol