(["", "audio/*", "foo.txt"], ""),
(["echo foo", "audio/*", "foo.txt"], "echo foo"),
(["echo %s", "audio/*", "foo.txt"], "echo foo.txt"),
- (["echo %t", "audio/*", "foo.txt"], None),
(["echo %t", "audio/wav", "foo.txt"], "echo audio/wav"),
(["echo \\%t", "audio/*", "foo.txt"], "echo %t"),
(["echo foo", "audio/*", "foo.txt", plist], "echo foo"),
([c, "audio/basic"],
{"key": "description", "filename": fname},
('"An audio fragment"', audio_basic_entry)),
- ([c, "audio/*"],
- {"filename": fname},
- (None, None)),
([c, "audio/wav"],
{"filename": fname},
("/usr/local/bin/showaudio audio/wav", audio_entry)),
]
self._run_cases(cases)
+ def test_unsafe_mailcap_input(self):
+ with self.assertWarnsRegex(mailcap.UnsafeMailcapInput,
+ 'Refusing to substitute parameter.*'
+ 'into a shell command'):
+ unsafe_param = mailcap.subst("echo %{total}",
+ "audio/wav",
+ "foo.txt",
+ ["total=*"])
+ self.assertEqual(unsafe_param, None)
+
+ with self.assertWarnsRegex(mailcap.UnsafeMailcapInput,
+ 'Refusing to substitute MIME type'
+ '.*into a shell'):
+ unsafe_mimetype = mailcap.subst("echo %t", "audio/*", "foo.txt")
+ self.assertEqual(unsafe_mimetype, None)
+
+ with self.assertWarnsRegex(mailcap.UnsafeMailcapInput,
+ 'Refusing to use mailcap with filename.*'
+ 'Use a safe temporary filename.'):
+ unsafe_filename = mailcap.findmatch(MAILCAPDICT,
+ "audio/wav",
+ filename="foo*.txt")
+ self.assertEqual(unsafe_filename, (None, None))
+
def _run_cases(self, cases):
for c in cases:
self.assertEqual(mailcap.findmatch(*c[0], **c[1]), c[2])