插入YAML

时间:2013-06-20 19:15:32

标签: perl anchor yaml interpolation

我使用Perl作为我的脚本语言并阅读YAML配置。文件。有一些字段(如内存地址)经常使用并且相对于基本字段。是否可以在YAML文件中插入锚定值并对其执行任何操作?我使用YAML :: XS作为Perl中的解析器模块。

例如,在file.cfg.yml

%YAML 1.1
---
- base: &base 10001000
- reg:
    - abc: *base + 4
...

是否可以对bin,oct或hex值执行任何操作?

1 个答案:

答案 0 :(得分:1)

不,但您可以将操作序列化为代码。如果你无法控制输入,那么反序列化代码是一个非常愚蠢的想法。将CVE-2013-0156CVE-2013-0333放在心上。

use YAML::XS qw(Dump);
$YAML::XS::UseCode = 1; # DANGER DANGER OMG WHYYYY ARE YOU DOING THIS ARE YOU NUTS OR WHAT

my $base = 10001000;
my $data = [
    {
        base => $base
    },
];
push @{ $data }, {
    reg => [
        {
            abc => sub { $data->[0]{base} + 4 },
        }
    ]
};

print Dump $d;
__END__
---
- base: 10001000
- reg:
- abc: !!perl/code |-
    {
        $$data[0]{'base'} + 4;
    }