[SPIGOT-7906] SnakeYaml nesting limit for nested bundles Created: 22/Sep/24  Updated: 25/Dec/24  Resolved: 23/Sep/24

Status: Resolved
Project: Spigot
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Bug Priority: Minor
Reporter: blablubbabc Assignee: Unassigned
Resolution: Fixed Votes: 0
Labels: item, serialization

Version: This server is running CraftBukkit version dev-Spigot-5a6439b-8ee6fd1 (MC: 1.21.1) (Implementing API version 1.21.1-R0.1-SNAPSHOT)
Guidelines Read: Yes

 Description   

Minecraft allows nesting bundles inside bundles up to 16 items deep. When a plugin tries to serialize this item, it is easy to reach SnakeYaml's default 50 max nesting limit.

Example data:

 

'1'
  recipes:
    '1':
      resultItem:
        ==: org.bukkit.inventory.ItemStack
        v: 3955
        type: BUNDLE
        meta:
          ==: ItemMeta
          meta-type: BUNDLE
          items:
          - ==: org.bukkit.inventory.ItemStack
            v: 3955
            type: BUNDLE
            meta:
              ==: ItemMeta
              meta-type: BUNDLE
              items:
              - ==: org.bukkit.inventory.ItemStack
                v: 3955
                type: BUNDLE
                meta:
                  ==: ItemMeta
                  meta-type: BUNDLE
                  items:
                  - ==: org.bukkit.inventory.ItemStack
                    v: 3955
                    type: BUNDLE
                    meta:
                      ==: ItemMeta
                      meta-type: BUNDLE
                      items:
                      - ==: org.bukkit.inventory.ItemStack
                        v: 3955
                        type: BUNDLE
                        meta:
                          ==: ItemMeta
                          meta-type: BUNDLE
                          items:
                          - ==: org.bukkit.inventory.ItemStack
                            v: 3955
                            type: BUNDLE
                            meta:
                              ==: ItemMeta
                              meta-type: BUNDLE
                              items:
                              - ==: org.bukkit.inventory.ItemStack
                                v: 3955
                                type: BUNDLE
                                meta:
                                  ==: ItemMeta
                                  meta-type: BUNDLE
                                  items:
                                  - ==: org.bukkit.inventory.ItemStack
                                    v: 3955
                                    type: BUNDLE
                                    meta:
                                      ==: ItemMeta
                                      meta-type: BUNDLE
                                      items:
                                      - ==: org.bukkit.inventory.ItemStack
                                        v: 3955
                                        type: BUNDLE
                                        meta:
                                          ==: ItemMeta
                                          meta-type: BUNDLE
                                          items:
                                          - ==: org.bukkit.inventory.ItemStack
                                            v: 3955
                                            type: BUNDLE
                                            meta:
                                              ==: ItemMeta
                                              meta-type: BUNDLE
                                              items:
                                              - ==: org.bukkit.inventory.ItemStack
                                                v: 3955
                                                type: BUNDLE
                                                meta:
                                                  ==: ItemMeta
                                                  meta-type: BUNDLE
                                                  items:
                                                  - ==: org.bukkit.inventory.ItemStack
                                                    v: 3955
                                                    type: BUNDLE
                                                    meta:
                                                      ==: ItemMeta
                                                      meta-type: BUNDLE
                                                      items:
                                                      - ==: org.bukkit.inventory.ItemStack
                                                        v: 3955
                                                        type: BUNDLE
                                                        meta:
                                                          ==: ItemMeta
                                                          meta-type: BUNDLE
                                                          items:
                                                          - ==: org.bukkit.inventory.ItemStack
                                                            v: 3955
                                                            type: BUNDLE
                                                            meta:
                                                              ==: ItemMeta
                                                              meta-type: BUNDLE
                                                              items:
                                                              - ==: org.bukkit.inventory.ItemStack
                                                                v: 3955
                                                                type: BUNDLE
                                                                meta:
                                                                  ==: ItemMeta
                                                                  meta-type: BUNDLE
                                                                  items:
                                                                  - ==: org.bukkit.inventory.ItemStack
                                                                    v: 3955
                                                                    type: BUNDLE
                                                                    meta:
                                                                      ==: ItemMeta
                                                                      meta-type: BUNDLE
                                                                      items:
                                                                      - ==: org.bukkit.inventory.ItemStack
                                                                        v: 3955
                                                                        type: BUNDLE

 

Each bundle nesting results in 3 levels of nesting inside the Yaml (2 mappings and one sequence node). With some additional nesting up front and inside the final bundle item, it is very easy to reach the default 50 nesting limit.

Would it be possible to slightly increase the default limit in the YamlConfiguration's Yaml LoadOptions, maybe to something in the range of 64-100?


Generated at Tue Apr 22 06:49:51 UTC 2025 using Jira 10.3.5#10030005-sha1:190c783f2bd6c69cd5accdb70f97e48812a78d14.