smcmahon/Products.PloneFormGen — pull request #97 by davidblewett (2013-12-05 20:45:56+00:00)
Title: Error encountered when GPG key is Unicode string

We were hitting the following traceback:
```
Traceback (innermost last):
Module ZPublisher.Publish, line 60, in publish
Module ZPublisher.mapply, line 77, in mapply
Module ZPublisher.Publish, line 46, in call_object
Module Products.CMFFormController.FSControllerPageTemplate, line 91, in __call__
Module Products.CMFFormController.BaseControllerPageTemplate, line 26, in _call
Module Products.CMFFormController.FormController, line 384, in validate
Module ZPublisher.mapply, line 77, in mapply
Module ZPublisher.Publish, line 46, in call_object
Module Products.CMFFormController.FSControllerValidator, line 58, in __call__
Module Products.CMFFormController.Script, line 145, in __call__
Module Products.CMFCore.FSPythonScript, line 127, in __call__
Module Shared.DC.Scripts.Bindings, line 322, in __call__
Module Products.PloneHotfix20130618.spamProtect, line 35, in _patched_bindAndExec
Module Shared.DC.Scripts.Bindings, line 359, in _bindAndExec
Module Products.PythonScripts.PythonScript, line 344, in _exec
Module script, line 20, in fgvalidate_base
-
- Line 20
Module Products.PloneFormGen.content.form, line 585, in fgvalidate
Module Products.PloneFormGen.content.form, line 633, in fgProcessActionAdapters
Module Products.PloneFormGen.content.formMailerAdapter, line 524, in onSuccess
Module Products.PloneFormGen.content.formMailerAdapter, line 922, in send_form
Module Products.PloneFormGen.content.formMailerAdapter, line 634, in get_mail_text
Module Products.PloneFormGen.content.formMailerAdapter, line 813, in get_header_body_tuple
Module Products.PloneFormGen.content.formMailerAdapter, line 758, in get_mail_body
Module Products.PloneFormGen.content.ya_gpg, line 97, in encrypt
Module subprocess, line 623, in __init__
Module subprocess, line 1141, in _execute_child
TypeError: execv() argument 1 must be encoded string without NULL bytes, not str
```
I tracked it down to the fact that the GPG key ID was being passed in as a Unicode string. This was causing the `cmd` string interpolation to be upgraded to a Unicode string, which `shlex.split` then barfed on:

```
2013-12-05T14:47:50 INFO Products.PloneFormGen cmd pre-shlex: "u'/usr/local/bin/gpg --batch --yes --trust-model always --no-secmem-warning --encrypt -a -r 03916272'"
------
2013-12-05T14:47:50 INFO Products.PloneFormGen cmd post-shlex: "['/\x00\x00\x00u\x00\x00\x00s\x00\x00\x00r\x00\x00\x00/\x00\x00\x00l\x00\x00\x00o\x00\x00\x00c\x00\x00\x00a\x00\x00\x00l\x00\x00\x00/\x00\x00\x00b\x00\x00\x00i\x00\x00\x00n\x00\x00\x00/\x00\x00\x00g\x00\x00\x00p\x00\x00\x00g\x00\x00\x00', '\x00\x00\x00-\x00\x00\x00-\x00\x00\x00b\x00\x00\x00a\x00\x00\x00t\x00\x00\x00c\x00\x00\x00h\x00\x00\x00', '\x00\x00\x00-\x00\x00\x00-\x00\x00\x00y\x00\x00\x00e\x00\x00\x00s\x00\x00\x00', '\x00\x00\x00-\x00\x00\x00-\x00\x00\x00t\x00\x00\x00r\x00\x00\x00u\x00\x00\x00s\x00\x00\x00t\x00\x00\x00-\x00\x00\x00m\x00\x00\x00o\x00\x00\x00d\x00\x00\x00e\x00\x00\x00l\x00\x00\x00', '\x00\x00\x00a\x00\x00\x00l\x00\x00\x00w\x00\x00\x00a\x00\x00\x00y\x00\x00\x00s\x00\x00\x00', '\x00\x00\x00-\x00\x00\x00-\x00\x00\x00n\x00\x00\x00o\x00\x00\x00-\x00\x00\x00s\x00\x00\x00e\x00\x00\x00c\x00\x00\x00m\x00\x00\x00e\x00\x00\x00m\x00\x00\x00-\x00\x00\x00w\x00\x00\x00a\x00\x00\x00r\x00\x00\x00n\x00\x00\x00i\x00\x00\x00n\x00\x00\x00g\x00\x00\x00', '\x00\x00\x00-\x00\x00\x00-\x00\x00\x00e\x00\x00\x00n\x00\x00\x00c\x00\x00\x00r\x00\x00\x00y\x00\x00\x00p\x00\x00\x00t\x00\x00\x00', '\x00\x00\x00-\x00\x00\x00a\x00\x00\x00', '\x00\x00\x00-\x00\x00\x00r\x00\x00\x00', '\x00\x00\x000\x00\x00\x003\x00\x00\x009\x00\x00\x001\x00\x00\x006\x00\x00\x002\x00\x00\x007\x00\x00\x002\x00\x00\x00']"
```

With the above changes, the key ID is passed in as a byte string (and we ensure `cmd` is a byte string before `shlex.split`).