sass-embedded 1.77.8 → 1.78.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a4867f6d4f0c72a82099760e3e30f978a3d8a3f7481e6b278de15932ba78abe9
4
- data.tar.gz: 3a8715387e91dc208b7252dedc3d695f1b9042d473aefe1ff9e9a7c86adce923
3
+ metadata.gz: 6140546f1464fb936af0e5d76355e24844d12cb71f29142ca64e1aa5ec1cce56
4
+ data.tar.gz: 2956e3e5ec0b5860482e4f084159d94a4fc7bb06f67f6ae0820bc04971efd824
5
5
  SHA512:
6
- metadata.gz: 6122e3ca0bcdd1f6c0a020b17579f8762726ea7eb6b4d2ca80db93bff490820d37960d162d229ec612e39199e1de5353d46ad2d0dbd4f0552249f6c09a75ec78
7
- data.tar.gz: e5f4c8007b71629eeb55292ff384c3e86003a5b214381ce361286ce83d379388b4c800a9c9452f503bac0a2c78d0e9c183591da65cec52bced86b60843657cf3
6
+ metadata.gz: e366ed09f3a7dd7235bb3375b2aa2e0e239bbd66f770ae0432dcaf9e279139957a3aaaf3f76415977d123b37eaace4153eb22bd6709fe8e47be8b4bccf3ebff5
7
+ data.tar.gz: e6ef849e9d80e3d3f4810c76d4d9c46de4d633d3cf3f1b6e906bae870dd3cae5dc7f21384c24a718dd063e088da69a2ca8198bfda7c03b2f595021ee850248d0
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "dependencies": {
3
- "sass": "1.77.8"
3
+ "sass": "1.78.0"
4
4
  }
5
5
  }
data/lib/sass/compiler.rb CHANGED
@@ -62,7 +62,7 @@ module Sass
62
62
  # compilation to avoid deluging users in console noise. If you set verbose to +true+, it will instead print every
63
63
  # deprecation warning it encounters.
64
64
  # @return [CompileResult]
65
- # @raise [ArgumentError, CompileError]
65
+ # @raise [ArgumentError, CompileError, IOError]
66
66
  # @see https://sass-lang.com/documentation/js-api/functions/compile/
67
67
  def compile(path,
68
68
  load_paths: [],
@@ -142,7 +142,7 @@ module Sass
142
142
  # compilation to avoid deluging users in console noise. If you set verbose to +true+, it will instead print every
143
143
  # deprecation warning it encounters.
144
144
  # @return [CompileResult]
145
- # @raise [ArgumentError, CompileError]
145
+ # @raise [ArgumentError, CompileError, IOError]
146
146
  # @see https://sass-lang.com/documentation/js-api/functions/compilestring/
147
147
  def compile_string(source,
148
148
  importer: nil,
data/lib/sass/elf.rb CHANGED
@@ -7,26 +7,76 @@ module Sass
7
7
  # @see https://github.com/torvalds/linux/blob/HEAD/include/uapi/linux/elf.h
8
8
  # @see https://github.com/torvalds/linux/blob/HEAD/kernel/kexec_elf.c
9
9
  class ELF
10
- # rubocop:disable Naming/ConstantName
11
-
12
- # 32-bit ELF base types.
13
- Elf32_Addr = :__u32
14
- Elf32_Half = :__u16
15
- Elf32_Off = :__u32
16
- Elf32_Sword = :__s32
17
- Elf32_Word = :__u32
18
-
19
- # 64-bit ELF base types.
20
- Elf64_Addr = :__u64
21
- Elf64_Half = :__u16
22
- Elf64_SHalf = :__s16
23
- Elf64_Off = :__u64
24
- Elf64_Sword = :__s32
25
- Elf64_Word = :__u32
26
- Elf64_Xword = :__u64
27
- Elf64_Sxword = :__s64
10
+ module PackInfo
11
+ PACK_MAP = {
12
+ Elf32_Ehdr: 'S<2L<5S<6',
13
+ Elf64_Ehdr: 'S<2L<Q<3L<S<6',
14
+ Elf32_Phdr: 'L<8',
15
+ Elf64_Phdr: 'L<2Q<6'
16
+ }.freeze
17
+
18
+ SIZE_MAP = {
19
+ Elf32_Ehdr: 36,
20
+ Elf64_Ehdr: 48,
21
+ Elf32_Phdr: 32,
22
+ Elf64_Phdr: 56
23
+ }.freeze
24
+
25
+ STRUCT_MAP = {
26
+ Elf32_Ehdr: %i[
27
+ e_type
28
+ e_machine
29
+ e_version
30
+ e_entry
31
+ e_phoff
32
+ e_shoff
33
+ e_flags
34
+ e_ehsize
35
+ e_phentsize
36
+ e_phnum
37
+ e_shentsize
38
+ e_shnum
39
+ e_shstrndx
40
+ ].freeze,
41
+ Elf64_Ehdr: %i[
42
+ e_type
43
+ e_machine
44
+ e_version
45
+ e_entry
46
+ e_phoff
47
+ e_shoff
48
+ e_flags
49
+ e_ehsize
50
+ e_phentsize
51
+ e_phnum
52
+ e_shentsize
53
+ e_shnum
54
+ e_shstrndx
55
+ ].freeze,
56
+ Elf32_Phdr: %i[
57
+ p_type
58
+ p_offset
59
+ p_vaddr
60
+ p_paddr
61
+ p_filesz
62
+ p_memsz
63
+ p_flags
64
+ p_align
65
+ ].freeze,
66
+ Elf64_Phdr: %i[
67
+ p_type
68
+ p_flags
69
+ p_offset
70
+ p_vaddr
71
+ p_paddr
72
+ p_filesz
73
+ p_memsz
74
+ p_align
75
+ ].freeze
76
+ }.freeze
77
+ end
28
78
 
29
- # rubocop:enable Naming/ConstantName
79
+ private_constant :PackInfo
30
80
 
31
81
  # These constants are for the segment types stored in the image headers
32
82
  PT_NULL = 0
@@ -41,10 +91,6 @@ module Sass
41
91
  PT_HIOS = 0x6fffffff
42
92
  PT_LOPROC = 0x70000000
43
93
  PT_HIPROC = 0x7fffffff
44
- PT_GNU_EH_FRAME = (PT_LOOS + 0x474e550)
45
- PT_GNU_STACK = (PT_LOOS + 0x474e551)
46
- PT_GNU_RELRO = (PT_LOOS + 0x474e552)
47
- PT_GNU_PROPERTY = (PT_LOOS + 0x474e553)
48
94
 
49
95
  # These constants define the different elf file types
50
96
  ET_NONE = 0
@@ -57,66 +103,6 @@ module Sass
57
103
 
58
104
  EI_NIDENT = 16
59
105
 
60
- # rubocop:disable Naming/ConstantName
61
-
62
- Elf32_Ehdr = [
63
- [:unsigned_char, :e_ident, EI_NIDENT],
64
- [Elf32_Half, :e_type],
65
- [Elf32_Half, :e_machine],
66
- [Elf32_Word, :e_version],
67
- [Elf32_Addr, :e_entry],
68
- [Elf32_Off, :e_phoff],
69
- [Elf32_Off, :e_shoff],
70
- [Elf32_Word, :e_flags],
71
- [Elf32_Half, :e_ehsize],
72
- [Elf32_Half, :e_phentsize],
73
- [Elf32_Half, :e_phnum],
74
- [Elf32_Half, :e_shentsize],
75
- [Elf32_Half, :e_shnum],
76
- [Elf32_Half, :e_shstrndx]
77
- ].freeze
78
-
79
- Elf64_Ehdr = [
80
- [:unsigned_char, :e_ident, EI_NIDENT],
81
- [Elf64_Half, :e_type],
82
- [Elf64_Half, :e_machine],
83
- [Elf64_Word, :e_version],
84
- [Elf64_Addr, :e_entry],
85
- [Elf64_Off, :e_phoff],
86
- [Elf64_Off, :e_shoff],
87
- [Elf64_Word, :e_flags],
88
- [Elf64_Half, :e_ehsize],
89
- [Elf64_Half, :e_phentsize],
90
- [Elf64_Half, :e_phnum],
91
- [Elf64_Half, :e_shentsize],
92
- [Elf64_Half, :e_shnum],
93
- [Elf64_Half, :e_shstrndx]
94
- ].freeze
95
-
96
- Elf32_Phdr = [
97
- [Elf32_Word, :p_type],
98
- [Elf32_Off, :p_offset],
99
- [Elf32_Addr, :p_vaddr],
100
- [Elf32_Addr, :p_paddr],
101
- [Elf32_Word, :p_filesz],
102
- [Elf32_Word, :p_memsz],
103
- [Elf32_Word, :p_flags],
104
- [Elf32_Word, :p_align]
105
- ].freeze
106
-
107
- Elf64_Phdr = [
108
- [Elf64_Word, :p_type],
109
- [Elf64_Word, :p_flags],
110
- [Elf64_Off, :p_offset],
111
- [Elf64_Addr, :p_vaddr],
112
- [Elf64_Addr, :p_paddr],
113
- [Elf64_Xword, :p_filesz],
114
- [Elf64_Xword, :p_memsz],
115
- [Elf64_Xword, :p_align]
116
- ].freeze
117
-
118
- # rubocop:enable Naming/ConstantName
119
-
120
106
  # e_ident[] indexes
121
107
  EI_MAG0 = 0
122
108
  EI_MAG1 = 1
@@ -130,9 +116,9 @@ module Sass
130
116
 
131
117
  # EI_MAG
132
118
  ELFMAG0 = 0x7f
133
- ELFMAG1 = 'E'.ord
134
- ELFMAG2 = 'L'.ord
135
- ELFMAG3 = 'F'.ord
119
+ ELFMAG1 = 0x45
120
+ ELFMAG2 = 0x4c
121
+ ELFMAG3 = 0x46
136
122
  ELFMAG = [ELFMAG0, ELFMAG1, ELFMAG2, ELFMAG3].pack('C*')
137
123
  SELFMAG = 4
138
124
 
@@ -149,10 +135,35 @@ module Sass
149
135
 
150
136
  def initialize(buffer)
151
137
  @buffer = buffer
152
- @ehdr = read_ehdr
138
+
139
+ @ehdr = { e_ident: @buffer.read(EI_NIDENT).unpack('C*') }
140
+ raise ArgumentError unless @ehdr[:e_ident].slice(EI_MAG0, SELFMAG).pack('C*') == ELFMAG
141
+
142
+ case @ehdr[:e_ident][EI_CLASS]
143
+ when ELFCLASS32
144
+ elf_ehdr = :Elf32_Ehdr
145
+ elf_phdr = :Elf32_Phdr
146
+ when ELFCLASS64
147
+ elf_ehdr = :Elf64_Ehdr
148
+ elf_phdr = :Elf64_Phdr
149
+ else
150
+ raise ArgumentError
151
+ end
152
+
153
+ case @ehdr[:e_ident][EI_DATA]
154
+ when ELFDATA2LSB
155
+ little_endian = true
156
+ when ELFDATA2MSB
157
+ little_endian = false
158
+ else
159
+ raise ArgumentError
160
+ end
161
+
162
+ @ehdr.merge!(read(elf_ehdr, little_endian))
163
+
153
164
  @buffer.seek(@ehdr[:e_phoff], IO::SEEK_SET)
154
165
  @proghdrs = Array.new(@ehdr[:e_phnum]) do
155
- read_phdr
166
+ read(elf_phdr, little_endian)
156
167
  end
157
168
  end
158
169
 
@@ -185,75 +196,10 @@ module Sass
185
196
 
186
197
  private
187
198
 
188
- def file_class
189
- @ehdr[:e_ident][EI_CLASS]
190
- end
191
-
192
- def data_encoding
193
- @ehdr[:e_ident][EI_DATA]
194
- end
195
-
196
- def read_ehdr
197
- @ehdr = { e_ident: @buffer.read(EI_NIDENT).unpack('C*') }
198
- raise ArgumentError unless @ehdr[:e_ident].slice(EI_MAG0, SELFMAG).pack('C*') == ELFMAG
199
-
200
- case file_class
201
- when ELFCLASS32
202
- Elf32_Ehdr
203
- when ELFCLASS64
204
- Elf64_Ehdr
205
- else
206
- raise ArgumentError
207
- end.drop(1).to_h do |field|
208
- [field[1], read1(field[0])]
209
- end.merge!(@ehdr)
210
- end
211
-
212
- def read_phdr
213
- case file_class
214
- when ELFCLASS32
215
- Elf32_Phdr
216
- when ELFCLASS64
217
- Elf64_Phdr
218
- else
219
- raise ArgumentError
220
- end.to_h do |field|
221
- [field[1], read1(field[0])]
222
- end
223
- end
224
-
225
- def explicit_endian
226
- case data_encoding
227
- when ELFDATA2LSB
228
- '<'
229
- when ELFDATA2MSB
230
- '>'
231
- else
232
- raise ArgumentError
233
- end
234
- end
235
-
236
- def read1(type)
237
- case type
238
- when :__u8
239
- @buffer.read(1).unpack1('C')
240
- when :__u16
241
- @buffer.read(2).unpack1("S#{explicit_endian}")
242
- when :__u32
243
- @buffer.read(4).unpack1("L#{explicit_endian}")
244
- when :__u64
245
- @buffer.read(8).unpack1("Q#{explicit_endian}")
246
- when :__s8
247
- @buffer.read(1).unpack1('c')
248
- when :__s16
249
- @buffer.read(2).unpack1("s#{explicit_endian}")
250
- when :__s32
251
- @buffer.read(4).unpack1("l#{explicit_endian}")
252
- when :__s64
253
- @buffer.read(8).unpack1("q#{explicit_endian}")
254
- else
255
- raise ArgumentError
256
- end
199
+ def read(type, little_endian)
200
+ size = PackInfo::SIZE_MAP[type]
201
+ format = little_endian ? PackInfo::PACK_MAP[type] : PackInfo::PACK_MAP[type].tr('<', '>')
202
+ [PackInfo::STRUCT_MAP[type], @buffer.read(size).unpack(format)].transpose.to_h
257
203
  end
258
204
 
259
205
  INTERPRETER = begin
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Sass
4
4
  module Embedded
5
- VERSION = '1.77.8'
5
+ VERSION = '1.78.0'
6
6
  end
7
7
  end
@@ -51,8 +51,12 @@ module Sass
51
51
  font-family: monospace, monospace;
52
52
  white-space: pre;
53
53
  content: #{Serializer.serialize_quoted_string(content).gsub(/[^[:ascii:]][\h\t ]?/) do |match|
54
- replacement = "\\#{match.ord.to_s(16)}"
55
- replacement << " #{match[1]}" if match.length > 1
54
+ ordinal = match.ord
55
+ replacement = "\\#{ordinal.to_s(16)}"
56
+ if match.length > 1
57
+ replacement << ' ' if ordinal < 0x100000
58
+ replacement << match[1]
59
+ end
56
60
  replacement
57
61
  end};
58
62
  }
@@ -61,8 +65,8 @@ module Sass
61
65
  end
62
66
 
63
67
  # An exception thrown by Sass Script.
64
- # @!visibility private
65
68
  class ScriptError < StandardError
69
+ # @!visibility private
66
70
  def initialize(message, name = nil)
67
71
  super(name.nil? ? message : "$#{name}: #{message}")
68
72
  end
@@ -290,7 +290,7 @@ module Sass
290
290
 
291
291
  compatibility_error = lambda {
292
292
  unless other.nil?
293
- message = +"#{self} and"
293
+ message = "#{self} and"
294
294
  message << " $#{other_name}:" unless other_name.nil?
295
295
  message << " #{other} have incompatible units"
296
296
  message << " (one has units and the other doesn't)" if unitless? || other_unitless
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sass-embedded
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.77.8
4
+ version: 1.78.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - なつき
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-07-11 00:00:00.000000000 Z
11
+ date: 2024-09-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '4.26'
33
+ version: '4.27'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '4.26'
40
+ version: '4.27'
41
41
  description: A Ruby library that will communicate with Embedded Dart Sass using the
42
42
  Embedded Sass protocol.
43
43
  email:
@@ -101,8 +101,8 @@ licenses:
101
101
  - MIT
102
102
  metadata:
103
103
  bug_tracker_uri: https://github.com/sass-contrib/sass-embedded-host-ruby/issues
104
- documentation_uri: https://rubydoc.info/gems/sass-embedded/1.77.8
105
- source_code_uri: https://github.com/sass-contrib/sass-embedded-host-ruby/tree/v1.77.8
104
+ documentation_uri: https://rubydoc.info/gems/sass-embedded/1.78.0
105
+ source_code_uri: https://github.com/sass-contrib/sass-embedded-host-ruby/tree/v1.78.0
106
106
  funding_uri: https://github.com/sponsors/ntkme
107
107
  rubygems_mfa_required: 'true'
108
108
  post_install_message:
@@ -120,7 +120,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
120
120
  - !ruby/object:Gem::Version
121
121
  version: '0'
122
122
  requirements: []
123
- rubygems_version: 3.5.15
123
+ rubygems_version: 3.5.18
124
124
  signing_key:
125
125
  specification_version: 4
126
126
  summary: Use dart-sass with Ruby!