xsdvi 1.0.1 → 1.0.2

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: 819798e045b576a5f2b55d8d80e6997c489c3d17988e30bbdace382be737f757
4
- data.tar.gz: 7889f66439924400696c219fc0011f468580d56ad9a42a9cde21b0ef0d4995d0
3
+ metadata.gz: 18eeeae820c78dedfff6555b6758c256c53deae9535753b8d147e6979c52b5b3
4
+ data.tar.gz: 47b6c9dbc1945d70e4c52e4c9acda1eb136c82ce0c41ad94fd9299a39ef5eaf4
5
5
  SHA512:
6
- metadata.gz: 997ebdc3af70469940d70e129302edb19f8226be440c94cb7093520107a6ce02a6e8115c6912e9b8cd8a80239efd41f8cb6fcba88c791b40d8df7579024795d8
7
- data.tar.gz: 27a2ae348887b91af15a75172bb2d42c643384c74b389645385541b81879e369eed9f9ec2f8bb99db8450fe8196fc7dc05f7eda5b5f38dfbbd705a8dae2a6027
6
+ metadata.gz: 237505f45a65875c859dec77d8c7a6bacaa9c5d66348a4e1c3f3124b23dbd4e567739ee72d0f54d5db2e542e37eb07e5f96d5910a8ac31d8cb835ad445aba7de
7
+ data.tar.gz: 65446d4145a37342d139f5ab600c45a1750497fe276f870e69e09b1c89a09306701ee632d62b647b3f478ab4e63be07b92161068a2bc686ce8e5b4c2579ba52d
data/lib/xsdvi/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Xsdvi
4
- VERSION = "1.0.1"
4
+ VERSION = "1.0.2"
5
5
  end
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "nokogiri"
4
+ require "set"
4
5
 
5
6
  module Xsdvi
6
7
  # Handles XSD parsing and tree building
@@ -23,6 +24,10 @@ module Xsdvi
23
24
  @model_groups = {} # QName => group node
24
25
  @attribute_groups = {} # QName => attributeGroup node
25
26
  @elements = {} # QName => element node (for refs)
27
+
28
+ # Type extension/restriction chain tracking (prevents stack overflow)
29
+ @type_depth = 0
30
+ @type_ancestors = Set.new
26
31
  end
27
32
 
28
33
  def process_file(file_path)
@@ -298,7 +303,10 @@ module Xsdvi
298
303
  # Process base type first (inherit content model)
299
304
  if (base = extension_node["base"])
300
305
  base_type = resolve_type(base)
301
- process_complex_type_node(base_type) if base_type && base_type.name == "complexType"
306
+ if base_type && base_type.name == "complexType" && type_chain_enter(base)
307
+ process_complex_type_node(base_type)
308
+ type_chain_exit(base)
309
+ end
302
310
  end
303
311
 
304
312
  # Then process extension's own content
@@ -310,7 +318,10 @@ module Xsdvi
310
318
  # Process base type first (inherit and potentially restrict content model)
311
319
  if (base = restriction_node["base"])
312
320
  base_type = resolve_type(base)
313
- process_complex_type_node(base_type) if base_type && base_type.name == "complexType"
321
+ if base_type && base_type.name == "complexType" && type_chain_enter(base)
322
+ process_complex_type_node(base_type)
323
+ type_chain_exit(base)
324
+ end
314
325
  end
315
326
 
316
327
  # Then process restriction's own content
@@ -754,5 +765,21 @@ module Xsdvi
754
765
 
755
766
  builder.level_up
756
767
  end
768
+
769
+ MAX_TYPE_DEPTH = 100
770
+
771
+ def type_chain_enter(type_name)
772
+ return false if @type_depth >= MAX_TYPE_DEPTH
773
+ return false if @type_ancestors.include?(type_name)
774
+
775
+ @type_depth += 1
776
+ @type_ancestors.add(type_name)
777
+ true
778
+ end
779
+
780
+ def type_chain_exit(type_name)
781
+ @type_depth -= 1
782
+ @type_ancestors.delete(type_name)
783
+ end
757
784
  end
758
785
  end
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xsdvi
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
- autorequire:
9
8
  bindir: exe
10
9
  cert_chain: []
11
- date: 2025-11-27 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: nokogiri
@@ -96,7 +95,6 @@ licenses:
96
95
  - BSD-3-Clause
97
96
  metadata:
98
97
  rubygems_mfa_required: 'true'
99
- post_install_message:
100
98
  rdoc_options: []
101
99
  require_paths:
102
100
  - lib
@@ -111,8 +109,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
111
109
  - !ruby/object:Gem::Version
112
110
  version: '0'
113
111
  requirements: []
114
- rubygems_version: 3.5.22
115
- signing_key:
112
+ rubygems_version: 3.6.9
116
113
  specification_version: 4
117
114
  summary: Generate SVG diagrams from XSD schemas
118
115
  test_files: []