(no commit message)
authorhttps://www.google.com/accounts/o8/id?id=AItOawlSFgIlytGZgMLh_Cw4IA011V8pLKk5dVg <Brian@web>
Fri, 29 Nov 2013 14:04:10 +0000 (10:04 -0400)
committeradmin <admin@branchable.com>
Fri, 29 Nov 2013 14:04:10 +0000 (10:04 -0400)
doc/bugs/structured_config_data_is_mangled.mdwn [new file with mode: 0644]

diff --git a/doc/bugs/structured_config_data_is_mangled.mdwn b/doc/bugs/structured_config_data_is_mangled.mdwn
new file mode 100644 (file)
index 0000000..7d8f5de
--- /dev/null
@@ -0,0 +1,48 @@
+Put something like this in the setup file:
+
+~~~
+conversion:
+  - from: odt
+    to: pdf
+    command: [unoconv, -f, pdf, -o, $OUTPUTDIR, $INPUTFILE]
+  - from: ditaa
+    to: png
+    command: [ditaa, $INPUTFILE, $OUTPUTFILE, -s, 0.7]
+~~~
+
+However `Dumper($config{conversion})` shows:
+
+~~~
+$VAR1 = [
+          'HASH(0x164e1a0)',
+          'HASH(0x164e3c8)'
+        ];
+~~~
+
+I think it is getting mangled in `sub merge` in `IkiWiki/Setup.pm` and its calls to `possibly_foolish_untaint`
+
+Workaround: force the array values to be strings, and then re-parse them using YAML::XS::Load:
+
+~~~
+conversion:
+  - |
+    from: [odt, odp]
+    to: pdf
+    command: [unoconv, -f, pdf, -o, $OUTPUTDIR, $INPUTFILE]
+  - |
+    from: ditaa
+    to: png
+    command: [ditaa, $INPUTFILE, $OUTPUTFILE, -s, 0.7]
+
+...
+
+sub checkconfig {
+    if (!defined $config{conversion} || ref $config{conversion} ne "ARRAY") {
+        error(sprintf(gettext("Must specify '%s' and it must be a list"), "conversion"));
+    }
+    for (my $i=0; $i < @{$config{conversion}}; $i++) {
+      $config{conversion}->[$i] = YAML::XS::Load($config{conversion}->[$i]) if
+          ref $config{conversion}->[$i] ne 'HASH';
+    }
+}
+~~~