moxml 0.5.29 → 0.5.30

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: df62f6f6a27c7ff63c2893ae7d85547d09645d059b187fd4235111c18ad2467f
4
- data.tar.gz: a9c0e9ee0a3f7f2c8775ba5dfa49563e048ef3e2aac506eaef9135c2a2390139
3
+ metadata.gz: b9c5b752aba6a52719fbeb794be70155e0fc52a553889e424b3cfbc0a4afa324
4
+ data.tar.gz: ee7a443060fc562236ccfb135c509ae65e51ba3ec930cd8a39cb3a917f5e41ed
5
5
  SHA512:
6
- metadata.gz: 705a551074ea195562d7af4b726a388e8c3517ec4366cf9dff3d3b0828a79f46b6a50d79501d9c5ed1df871855f90bc5d5b69b35e22eb006b558e26c0da5626b
7
- data.tar.gz: 2e5b4b7da9018d41434c23c70ea4ced99e626ef813dc92b6d2e1df8d9f8f81e89ac536dd52f684bd95de9fcb610ba673eaa9914de5048a491ee0f217bdfa1975
6
+ metadata.gz: d92bc0324a80312556a369b6b1ce7b1619c13ef23fac2212c3148211deb7c786543b83568ea6a1d312df9e09189f1d8feabf8b5d44840618852124d4c5550dd7
7
+ data.tar.gz: 9a0b511e096230051cd1e92ae3e36603b02ddfe2f2c03cfaf6d8072b21defda2e65938c4f9963516d3d3696a44a7689d98cc68244bd60e26672c49e04d292079
@@ -86,17 +86,17 @@ module Moxml
86
86
  RAW_AMP_RE = /&(?!#{Entity::NAME_PATTERN};|#\d+;|#x[0-9A-Fa-f]+;)/
87
87
 
88
88
  # A raw "<" in text position — the engine intermittently
89
- # loses the escape when parsing under allocation pressure
90
- # (leptris-ruby#131), so a decoded &#x3c; serializes bare and
91
- # reparsing truncates at it. Valid markup NEVER puts "<"
92
- # before a non-name, non-delimiter character, so this is
93
- # deterministic in markup segments (CDATA is literal and
94
- # excluded by the segment walker). One class-anchored scan:
95
- # multi-char literal probes cost ~30x a single regex pass on
96
- # CRuby (measured include?("< ") at 31µs vs this regex at
97
- # 64µs for 14 probes' worth of coverage on 32KB).
89
+ # lost the escape when parsing under allocation pressure
90
+ # (leptris-ruby#131), so a decoded &#x3c; serialized bare and
91
+ # reparsing truncated at it. Fixed in leptris 1.9.80 (verified
92
+ # 0/200 on the churn repro); the guard stays armed below that
93
+ # version and for any future build that regresses — the
94
+ # parse-under-pressure spec in leptris_spec fails loudly if a
95
+ # fixed-version build corrupts while the guard is stood down.
98
96
  RAW_LT_RE = /<(?![A-Za-z_:\/?!])/
99
97
  RAW_LT_TRIGGER_RE = /<[^A-Za-z_:\/?!]/
98
+ RAW_LT_GUARD_ACTIVE =
99
+ Gem::Version.new(::Leptris::VERSION) < Gem::Version.new("1.9.80")
100
100
 
101
101
  def normalize_serialization(xml, options)
102
102
  # The libxml2-layout serializer (>= 1.9.42) keeps attribute
@@ -104,10 +104,10 @@ module Moxml
104
104
  needs_apos = !LIBXML2_LAYOUT_PARITY && xml.include?("&apos;")
105
105
  needs_expand = options[:expand_empty] && xml.include?("/>")
106
106
  # Corruption guards: the 1-char ampersand probe is ~1µs
107
- # (memchr-class); both regexes only run when their cheap
108
- # necessary condition holds.
107
+ # (memchr-class); the raw-< scan runs only on builds that
108
+ # still carry the parse race (leptris-ruby#131).
109
109
  needs_amp = xml.include?("&") && xml.match?(RAW_AMP_RE)
110
- needs_lt = xml.match?(RAW_LT_TRIGGER_RE)
110
+ needs_lt = RAW_LT_GUARD_ACTIVE && xml.match?(RAW_LT_TRIGGER_RE)
111
111
  return xml unless needs_apos || needs_expand || needs_amp || needs_lt
112
112
 
113
113
  out = +""
data/lib/moxml/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Moxml
4
- VERSION = "0.5.29"
4
+ VERSION = "0.5.30"
5
5
  end
@@ -244,6 +244,7 @@ RSpec.describe Moxml::Adapter::Leptris do
244
244
  end
245
245
 
246
246
  it "repairs a raw < in text position (issue #167 / leptris-ruby#131)" do
247
+ skip "guard stood down on fixed bindings (leptris-ruby#131, 1.9.80+)" unless described_class::Serialize::RAW_LT_GUARD_ACTIVE
247
248
  # The engine intermittently drops the escape when parsing under
248
249
  # allocation pressure: a decoded &#x3c; serializes bare and the
249
250
  # output fails to reparse. Valid markup never puts < before a
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: moxml
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.29
4
+ version: 0.5.30
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.