Hello David,
Sorry again about the delay. I was able to pull the version of the
image ad that's in ad group id 229704188 and compared it to what we
have in our logs from your request. It's size is 16512 bytes (base 64
encoded it is 22306 bytes) and the image that you uploaded via the API
is 16511 bytes (22305 bytes when base 64 encoded). There is a
significant different between the last couple of hundred bytes in each
file.
Based on that, I'd strongly suspect that something is going awry in
the Perl code you're using to read that GIF file in from disk--it
appears to be truncating the file by one byte, and getting the last
few hundred bytes incorrect. Alternatively, there could be something
going on to corrupt things during the transmission, but the fact that
the rest of the SOAP message is uncorrupted makes that less likely.
I do think that the API is correct in rejecting this GIF file, as
it's corrupt by the time it's received. I'm not entirely sure what
guidance to give, other than to try performing some sanity checks on
your end in which you try reading in the file and outputting the base
64 encoded version locally, and comparing that to the known "good"
version of the file.
Cheers,
-Jeff Posnick, AdWords API Team