本文用来备份博客中出现的 PlantUML 图的源码。

CVE-2021-30551

@startuml
map transitions_1 {
corrupted_prop =>
}

map transitions_2 {
corrupted_prop =>
}

map map_1 {
transitions *-> transitions_1
descriptors => [regular_prop]
}

map transitions_0 {
regular_prop =>
}

map map_2 {
transitions *-> transitions_2
descriptors => [regular_prop, corrupted_prop]
}

map object_1 {
map *-> map_2
}

map map_3 {
transitions => null
descriptors => [regular_prop, corrupted_prop, corrupted_prop]
}

map object_2 {
map *-> map_3
}

map map_0 {
transitions *-> transitions_0
descriptors => []
}

transitions_0::regular_prop ==> map_1
transitions_1::corrupted_prop ==> map_2
transitions_2::corrupted_prop ==> map_3
@enduml
@startuml

package deprecated {
map transitions_1 {
corrupted_prop =>
}

map transitions_2 {
corrupted_prop =>
}

map map_1 {
transitions *-> transitions_1
descriptors => [regular_prop]
}

map map_2 {
transitions *-> transitions_2
descriptors => [regular_prop, corrupted_prop]
}


map map_3 {
transitions => null
descriptors => [regular_prop, corrupted_prop, corrupted_prop]
}


transitions_1::corrupted_prop ==> map_2
transitions_2::corrupted_prop ==> map_3
}

map object_2 {
map *-> deprecated.map_3
}

map transitions_3 {
regular_prop =>
}

map transitions_4 {
corrupted_prop =>
}

map transitions_5 {
corrupted_prop =>
}

map map_4 {
transitions *-> transitions_4
descriptors => [regular_prop]
}

map map_5 {
transitions *-> transitions_5
descriptors => [regular_prop, corrupted_prop]
}

map map_6 {
transitions => null
descriptors => [regular_prop, corrupted_prop, corrupted_prop]
}

map map_0 {
transitions *-> transitions_3
descriptors => []
}

map object_1 {
map *-> map_6
}



transitions_3::regular_prop ==> map_4
transitions_4::corrupted_prop ==> map_5
transitions_5::corrupted_prop ==> map_6
@enduml

CVE-2021-37975

object k_0
object k_1
object k_2
object k_3

map retMap {
}

map m_3 {
k_2 =>
}

map m_2 {
k_2 =>
k_1 =>
}

map m_1 {
k_1 =>
k_0 =>
}

map m_0 {
k_0 =>
initKey =>
}

map map1 {
initKey =>
k_3 =>
}

object initKey

map1::k_3 => retMap
map1::initKey ==> m_0
m_0::k_0 ==> m_1
m_1::k_1 ==> m_2
m_2::k_2 ==> m_3

m_0::initKey ==> k_0
m_1::k_0 ==> k_1
m_2::k_1 ==> k_2
m_3::k_2 ==> k_3
@startuml

object k_0
object k_1
object k_2
object k_3

object k_5
object k_7
object k_9
object k_8

map m_8 {
k_8 =>
}

map m_7 {
k_7 =>
k_8 =>
}

map m_5 {
k_3 =>
}

object v9

map retMap {
k_5 =>
k_3 =>
}

map m_3 {
k_2 =>
}

map m_2 {
k_2 =>
k_1 =>
}

map m_1 {
k_1 =>
k_0 =>
}

map m_0 {
k_0 =>
initKey =>
}

map map1 {
initKey =>
k_3 =>
k_7 =>
k_9 =>
}

object initKey

map1::k_3 => retMap
map1::initKey ==> m_0
m_0::k_0 ==> m_1
m_1::k_1 ==> m_2
m_2::k_2 ==> m_3

m_0::initKey ==> k_0
m_1::k_0 ==> k_1
m_2::k_1 ==> k_2

m_3::k_2 ==> k_3

map1::k_7 ==> m_7
map1::k_9 ==> v9

retMap::k_5 ==> m_5
retMap::k_3 ==> k_5

m_5::k_3 ==> k_7
m_7::k_8 ==> m_8
m_7::k_7 ==> k_8

m_8::k_8 ==> k_9

@enduml
@startuml

object k_0
object k_1
object k_2
object k_3

object k_5
object k_7
object k_9
object k_8

object Roots

map m_8 {
k_8 =>
}

map m_7 {
k_7 =>
k_8 =>
}

map m_5 {
k_3 =>
}

object v9

map retMap {
k_5 =>
k_3 =>
}

map m_3 {
k_2 =>
}

map m_2 {
k_2 =>
k_1 =>
}

map m_1 {
k_1 =>
k_0 =>
}

map m_0 {
k_0 =>
initKey =>
}

map map1 {
initKey =>
k_3 =>
k_7 =>
k_9 =>
}

object initKey

map1::k_3 => retMap : 5

map1::initKey ==> m_0

m_0::k_0 ==> m_1 : 8
m_0::initKey ==> k_0 : 8

m_1::k_0 ==> k_1 : 7
m_1::k_1 ==> m_2 : 7

m_2::k_2 ==> m_3 : 6
m_2::k_1 ==> k_2 : 6

m_3::k_2 ==> k_3 : 5

map1::k_7 ==> m_7 : 3
map1::k_9 ==> v9 : 0

retMap::k_5 ==> m_5 : 4
retMap::k_3 ==> k_5 : 4

m_5::k_3 ==> k_7 : 3

m_7::k_8 ==> m_8 : 2
m_7::k_7 ==> k_8 : 2

m_8::k_8 ==> k_9 : 1

Roots ==> map1 : *
Roots ==> initKey : *

k_9 o.. map1::k_9

k_8 o.. m_7::k_8
k_8 o.. m_8::k_8

k_7 o.. m_7::k_7
k_7 o.. map1::k_7

k_5 o.. retMap::k_5
k_3 o.. map1::k_3
k_3 o.. retMap::k_3
k_2 o.. m_3::k_2
k_1 o.. m_1::k_1
k_0 o.. m_0::k_0

initKey o.. map1::initKey

@enduml