Uploaded image for project: 'Spigot'
  1. Spigot
  2. SPIGOT-7906

SnakeYaml nesting limit for nested bundles

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: Minor Minor
    • None
    • None
    • This server is running CraftBukkit version dev-Spigot-5a6439b-8ee6fd1 (MC: 1.21.1) (Implementing API version 1.21.1-R0.1-SNAPSHOT)
    • Yes

      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?

            Unassigned Unassigned
            blablubbabc blablubbabc
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated:
              Resolved: