Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

web-safe Base64 photoData incorrectly decoded #85

Closed
rhec opened this issue Oct 2, 2013 · 1 comment
Closed

web-safe Base64 photoData incorrectly decoded #85

rhec opened this issue Oct 2, 2013 · 1 comment
Assignees
Labels
🚨 This issue needs some love. triage me I really want to be triaged.

Comments

@rhec
Copy link

rhec commented Oct 2, 2013

Given gem version 0.6.4 and ruby 2.0.0-p195
I can make a successful request to this API call:
https://developers.google.com/admin-sdk/directory/v1/reference/users/photos/get
and get a resource as described by:
https://developers.google.com/admin-sdk/directory/v1/reference/users/photos#resource

According to the docs the photoData property of this resource is encoded as web-safe Base64.
This gem returns a result which contains a Google::APIClient::Schema::Admin::DirectoryV1::UserPhoto instance.
When I access the photo_data method of this instance, I don't get the web-safe Base64 encoded string, I get back decoded data, but it's not a valid image. It seems that the Google::APIClient::Schema::Admin::DirectoryV1::UserPhoto class decodes the photoData property if it was plain old Base64. Basically it should be using Base64.urlsafe_decode64, but instead it seems to be using Base64.decode64. See http://ruby-doc.org/stdlib-2.0.0/libdoc/base64/rdoc/Base64.html

As a workaround, you can access the raw encoded string and decode it yourself.
Heres an example, given a configured Google::ApiClient client and a user id google_user_id:

directory_api = client.discovered_api("admin", "directory_v1")
request = Google::APIClient::Request.new(api_method: directory_api.users.photos.get, parameters: { userKey: google_user_id})
image_result = client.execute(request)
image_result.data.photo_data
=> "\xF6>\x00\x01\x04\xA4d\x94`\x00\x10\x10\x00\x00\x10\x00\x10\x00\x0Fl\x02\x10\x00\x14\f\x10<@<4484@@<<8<8@88444@<4<00040<404@0088<404T48DDPPL04X`XH`@HPH\x04\x14\x14\x14 \x1C 4$$<P<@PPPHPPPPPPPPTPPPPPPPPPPPPPPPPPPPPPPHPPPPPXPPxxPPPxS\xC0\x00\x11\b\x00`\x00`\x03\x01\"\x00\x02\x11\x01\x03\x11\x01\xF1\x00\a\x00\x00\x00\x80\xC0@@@@\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01@\x80\xC1\x80@\x01\xC2<@\x02\xB1\x00\x00\x10000 ` 0\x10\x00\x00\x00\x00\x00\x00\x10\x00!\x100B\x10Q#\x14\x15\x10a2&\x17\x18\e\x1C\x13)\x1A\x1D\x1F\x10\x00\\\x04\x00\f\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\b\f\x03\xC4\x00\x1D\x11\x01\x01\x01\x00\x03\x01\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x11\x02\x12!\x03\x131A\xF6\x80\x03\x00\xC0@\x00\x84@\xC4@\x0F\xC0\t\x96\xC3\x95:\x83\n\rdp\xA3T\x9E\xAB#\x82\xED\xAE\xC8\x11\xD1QyVaT\n\x89Y\xBA\xCD\xD7\xA1\x15I\x88v&6t\xE5f\xA9Z\xDA\x17q\xC7u:\xF6${\x85\xAD\xD2\xA9\x0F-\xB8\xE4!\xAAZ\xA2:G!\xA8w\xBA\xC9T\xA0\xABu4\xC2\xE9\xE1\vU\xC8\xAB\v\xC8^\x85'\x05m&,u\x94\x9D\x04\x13\xC2\xE5g\x03\xC7yC\x00\x8A\xB7\xA4\x94qu\n@\xE1v\xB6\x9B\x8EQ:cy)\x8D*;\x88h\xEA\xB6\x96\xB2\xA5\xB0S-=\xFD\x17\xB5\xBBM\xA4fP\x14\x9E\xB6\x8Ek_\xA4j!\xA3k\xB8\xE8{\"<\xC0\f.\xDB\xC4d\xE1e\xDF[\x1C\xAB\xF4\xEDF\x01\x1E\xF3(\x12\xFC\xD6\xDEi\xAE\x9C\x03\x1F\x12\x80\xADB\x16\xC6\x8D\xF8xn\xD1\xD0~! \xF1\x0E\x1D\xC7#+J<u\x9Fz*\xCD\xEA\xBAT\xD5N\t\x80\x8A\xF4\xC7(\x9D<\x0E\xA8K\x9A\xB3\xC2\xBA\xDC\xF7Hl\x19E\xDBLV\x8BEp\x00\xBC\x11 \xE0\xFD~\xD6i\xAE\x9C\"C\vr\x10\xA1\xD5o\x89\x89y\x801\xD3\xA9\xEE\x91W\xA1\viv\xC0\xB48\x89'\x9Fd\xAB\xC46\x00\x1FH\xE4L~~\x96\x9C\xB0\xC8\xCE0\xCA9\xB40#\xB2\x05\xC0\x85u*\xE69Dp\xE7I\xBB,\x90\f\x0F\x89LjY5\xCD.>\xA7;=\xD2[z'l\xC1\x8E\xE9\xD5\x85\xDBvA0@KK\xD5\x93\xBD\xA3\xB4\xE1\f\x9B\xD5\xA7\xBD\xD03\x19)\x86\x9F\xA1\x97\x98\xDB\x03\x8D\xC7\x00\x1E\x89\xBB`\xE1N\x95\xA69\xF9\xE0w(\xAB\xDD-\xCC\x13\xC8\xEE:'ZKq\t\x83\x9B8*W\xE9\xEA\xDD\x19\xCD!\x99F^S\xCA\x02\x81\x8F-\xECHG9\xD3\x94m\xF41\e-Og\xA4\x89\x1D\x15U\xF5\r\xCE$\xF1\x11\xF0\x87\xA8\xDC\xA8\xD4n\x11\xF00\xB6\xFD\xE0\x9C*\xE9\x15\xCA\xE3*-jp\xC6\xB7\xC3\x95\x9B\x01\xCE8oI\xEA\xFE\x10\xB7m\x0F\xC0\x11\xDB\xA4 \xAC\xAD\xC8nGR\x8A\xB6\xAB\x19S6\x06\xD0\xDD\xB5\xC5\xAE\xEE\xBE\x85\xA7\xD5e\xCC\x88\x13\xB8\xF3\x94\x95\xDE\xD6\xDC\xE2G|+)]\xBC\b\xDE`\xF4\x93\x1F\xD2\xDC\xB8\xE85:e7@p\ai\xEB\x18G\xD4\xA8\x00\x93\xC0P\xF0\xF5G5\xA4\x83#\xA3N@\xFAY\x9Dr\xF4\x92s\xE9\x93\x81\x81\xCA\x8C\x9D\xAA\xD7\xC8\xA2\xB5iqws(\xBAw\x82\x12\xAF5T\xF7\xAB\xF5!\xED\x837\x93\x95\rR\x96\xDE8C\x1D\xAC\x03\xC3I\x80O?\vM\xAE\xDF0\xB7k@\xE9\xDB\x81\xFFTV\xCEF\x93c\x13]2\xB4\xB4lA\xE7\xBA\x06\xF2\x9Ep\x8D\xA5p# \xCF\xE5R\xDF\v\"\xBB?\xC4t\xC4\xF7T:\xA3\x88\xE5SU\xA6I\xEE\xB8*\x11\x84d\x04\x11\xBAh\x19'\xA7\b$E\x93\xC8<H\xEA\xB5M\a\xD9\xEA\x8EkK$\xC7\xD5wK.\xABIDy2=\xD0\x86\x9A^8{\xABm\xAD\x89V\x9Bd\xE3D\xA6\xD0\xD9<\xA8\xDCS\x04\x93\x11\x94\x9F\x93\xD1\xE9\xE151\x04\x14o\x9C\x10\xB5\x87(cP\xA7\xCD(\xB7\xBAS\x9F\f\xE9B\xA1$\xF01\x1D\xCA\xCFPz\xD9x\x16\xF5\xA2Z\xE2\x06d\x10d)[d\xF0\xDC]\xF1F\x84\xD64=\x9CpG\x01\v-Z\x84\xF0\x16\xCF\xC6Z\x93Kv4\x82I\x13\x19\x802\x93\xDBR\x01\x88\x94\x9F\x1D\x93\xD1\xEB\xA4\r\xB3\xCC\x1EU\xD4\xC4c\xE9\e{t9\x8C\x84\x0E\xE9\xCFu]\xB4\xB66"
raw = image_result.data.to_hash["photoData"]
=> "_9j_4AAQSkZJRgABAQAAAQABAAD_2wCEAAUDBA8QDw0NDg0QEA8PDg8OEA4ODQ0NEA8NDwwMDA0MDw0MDRAMDA4ODw0MDRUNDhERFBQTDA0WGBYSGBASFBIBBQUFCAcIDQkJDxQPEBQUFBIUFBQUFBQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEhQUFBQUFhQUHh4UFBQeFP_AABEIAGAAYAMBIgACEQEDEQH_xAAcAAACAwEBAQEAAAAAAAAAAAAEBQIDBgEABwj_xAArEAABAwMDAgYCAwEAAAAAAAABAAIRAwQhBRIxQVEGEyJhcYGxwTKRodH_xAAXAQADAQAAAAAAAAAAAAAAAAABAgMA_8QAHREBAQEAAwEAAwAAAAAAAAAAAAERAhIhAxMxQf_aAAwDAQACEQMRAD8A_JlsOVOoMKDWRwo1SeqyOC7a7IEdFReVZhVAqJWbrN16EVSYh2JjZ05WapWtoXccd1OvYke4Wt0qkPLbjkIapa-ojpH-Iah3uslUoKt1NMLp4QtVyKsLyF6FJwVtJix1lJ0EE8LlZwPHeUMAireklHF1CkDhdrabjlE6Y3kpjSo7iGjqtpaypbBTLT39F7W7TaRmUBSeto5rX6RqIaNruOh7Ijz_ADC7bx_GThZd9bHKv07UYBHvMoEvzW3mmunAMfEoCtQhbGjfh4btHQfiEg8Q4dxyMrSjx1n3oqzeq6VNVOCY-CK9MconTwOqEuas8K63PdIbBlF20-xWi0VwALwRIOD9ftZprpwiQwtyEKHVb4mJe-YAx06nukVehC2-l2wLQ4iSe-fZKvENgAfSORMfn6WnL-DIzjDKObQwI7IFwIV1KuY5RHDnSbsskAwPiUxqWTXNLj6nO_z3SW3onbMGO6dWF23ZBMEBLS9WTvaO04Qyb1ae90DMZKYafoZeY2wONxwAeibtg4U6Vpjn54Hcoq90tzBPI7jonWktxCYObOCpX6erdGc0hmUZeU8oCg_Y8t7EhHOdOUbfQxGy1PZ6SJHRVV9Q3OJPER8Ieo3KjUbhHwMLb94Jwq6RXK4yotanDGt8OVmwHOOG9J6_v4Qt20PwBHbpCCsrchuR1_KKtqsZUzYG0N21xa7uvoWn1W-XMiBO4-85_S-V3tbc4kd8KyldvAjeYPSTH9LcuOg1OmU3QHAHaesYR9SoAJPAUPD1RzWkgyOjTkD6WZ1y9JJz6ZOBgcqMnarXyKK1aXF3cyi6d4ISrzVU96v1Ie2DN5OVDVKW3jhD-HawDw0mATz8LTa7fMLdrQOnbgf9U-Vs5Gk2MTXTK0tGxB57oG8p5wjaVwIyDP5VLfCyK7--P8R0xPdUOqOI5VNVpknuuCoRhGQEEbpoGSenCCRFk8g8SOq1_TQfZ6o5rSyTH1_XdLLqtJRHkyPdCGml44e6ttrYlWm2TjRKbQ2Tyo3FMEkxGUn5PR6eE1MQQUb5wQtYcoY1CnzSi3ulOfDOlCoSTwMR3Kz1B62XgW9aJa4gZkE_GQp_W2Tw3F3xRoTWND2ccEc_BCy1ahPAWz8Zak0t2NIJJExmAMpPbUgG_IlJ8-dk9HrpA2zzB5V1MRj6Rt7dDmMhA7pz3VdtLY__2Q=="
urlsafe = Base64.urlsafe_decode64(raw)
=> "\xFF\xD8\xFF\xE0\x00\x10JFIF\x00\x01\x01\x00\x00\x01\x00\x01\x00\x00\xFF\xDB\x00\x84\x00\x05\x03\x04\x0F\x10\x0F\r\r\x0E\r\x10\x10\x0F\x0F\x0E\x0F\x0E\x10\x0E\x0E\r\r\r\x10\x0F\r\x0F\f\f\f\r\f\x0F\r\f\r\x10\f\f\x0E\x0E\x0F\r\f\r\x15\r\x0E\x11\x11\x14\x14\x13\f\r\x16\x18\x16\x12\x18\x10\x12\x14\x12\x01\x05\x05\x05\b\a\b\r\t\t\x0F\x14\x0F\x10\x14\x14\x14\x12\x14\x14\x14\x14\x14\x14\x14\x14\x15\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x12\x14\x14\x14\x14\x14\x16\x14\x14\x1E\x1E\x14\x14\x14\x1E\x14\xFF\xC0\x00\x11\b\x00`\x00`\x03\x01\"\x00\x02\x11\x01\x03\x11\x01\xFF\xC4\x00\x1C\x00\x00\x02\x03\x01\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x05\x02\x03\x06\x01\x00\a\b\xFF\xC4\x00+\x10\x00\x01\x03\x03\x03\x02\x06\x02\x03\x01\x00\x00\x00\x00\x00\x00\x01\x00\x02\x11\x03\x04!\x05\x121AQ\x06\x13\"aq\x81\xB1\xC12\x91\xA1\xD1\xFF\xC4\x00\x17\x01\x00\x03\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x02\x03\x00\xFF\xC4\x00\x1D\x11\x01\x01\x01\x00\x03\x01\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x11\x02\x12!\x03\x131A\xFF\xDA\x00\f\x03\x01\x00\x02\x11\x03\x11\x00?\x00\xFC\x99l9S\xA80\xA0\xD6G\n5I\xEA\xB28.\xDA\xEC\x81\x1D\x15\x17\x95f\x15@\xA8\x95\x9B\xAC\xDDz\x11T\x98\x87bcgNVj\x95\xAD\xA1w\x1CwS\xAFbG\xB8Z\xDD*\x90\xF2\xDB\x8EB\x1A\xA5\xAF\xA8\x8E\x91\xFE!\xA8w\xBA\xC9T\xA0\xABu4\xC2\xE9\xE1\vU\xC8\xAB\v\xC8^\x85'\x05m&,u\x94\x9D\x04\x13\xC2\xE5g\x03\xC7yC\x00\x8A\xB7\xA4\x94qu\n@\xE1v\xB6\x9B\x8EQ:cy)\x8D*;\x88h\xEA\xB6\x96\xB2\xA5\xB0S-=\xFD\x17\xB5\xBBM\xA4fP\x14\x9E\xB6\x8Ek_\xA4j!\xA3k\xB8\xE8{\"<\xFF\x000\xBBo\x1F\xC6N\x16]\xF5\xB1\xCA\xBFN\xD4`\x11\xEF2\x81/\xCDm\xE6\x9A\xE9\xC01\xF1(\n\xD4!lh\xDF\x87\x86\xED\x1D\a\xE2\x12\x0F\x10\xE1\xDCr2\xB4\xA3\xC7Y\xF7\xA2\xAC\xDE\xAB\xA5MT\xE0\x98\xF8\"\xBD1\xCA'O\x03\xAA\x12\xE6\xAC\xF0\xAE\xB7=\xD2\e\x06Qv\xD3\xECV\x8BEp\x00\xBC\x11 \xE0\xFD~\xD6i\xAE\x9C\"C\vr\x10\xA1\xD5o\x89\x89{\xE6\x00\xC7N\xA7\xBAE^\x84-\xBE\x97l\vC\x88\x92{\xE7\xD9*\xF1\r\x80\a\xD29\x13\x1F\x9F\xA5\xA7/\xE0\xC8\xCE0\xCA9\xB40#\xB2\x05\xC0\x85u*\xE69Dp\xE7I\xBB,\x90\f\x0F\x89LjY5\xCD.>\xA7;\xFC\xF7Im\xE8\x9D\xB3\x06;\xA7V\x17m\xD9\x04\xC1\x01-/VN\xF6\x8E\xD3\x842oV\x9E\xF7@\xCCd\xA6\x1A~\x86^cl\x0E7\x1C\x00z&\xED\x83\x85:V\x98\xE7\xE7\x81\xDC\xA2\xAFt\xB70O#\xB8\xE8\x9Di-\xC4&\x0El\xE0\xA9_\xA7\xABtg4\x86e\x19yO(\n\x0F\xD8\xF2\xDE\xC4\x84s\x9D9F\xDFC\x11\xB2\xD4\xF6zH\x91\xD1U_P\xDC\xE2O\x11\x1F\bz\x8D\xCA\x8DF\xE1\x1F\x03\vo\xDE\t\xC2\xAE\x91\\\xAE2\xA2\xD6\xA7\fk|9Y\xB0\x1C\xE3\x86\xF4\x9E\xBF\xBF\x84-\xDBC\xF0\x04v\xE9\b++r\e\x91\xD7\xF2\x8A\xB6\xAB\x19S6\x06\xD0\xDD\xB5\xC5\xAE\xEE\xBE\x85\xA7\xD5o\x972 N\xE3\xEF9\xFD/\x95\xDE\xD6\xDC\xE2G|+)]\xBC\b\xDE`\xF4\x93\x1F\xD2\xDC\xB8\xE85:e7@p\ai\xEB\x18G\xD4\xA8\x00\x93\xC0P\xF0\xF5G5\xA4\x83#\xA3N@\xFAY\x9Dr\xF4\x92s\xE9\x93\x81\x81\xCA\x8C\x9D\xAA\xD7\xC8\xA2\xB5iqws(\xBAw\x82\x12\xAF5T\xF7\xAB\xF5!\xED\x837\x93\x95\rR\x96\xDE8C\xF8v\xB0\x0F\r&\x01<\xFC-6\xBB|\xC2\xDD\xAD\x03\xA7n\a\xFDS\xE5l\xE4i615\xD3+KF\xC4\x1E{\xA0o)\xE7\b\xDAW\x022\f\xFEU-\xF0\xB2+\xBF\xBE?\xC4t\xC4\xF7T:\xA3\x88\xE5SU\xA6I\xEE\xB8*\x11\x84d\x04\x11\xBAh\x19'\xA7\b$E\x93\xC8<H\xEA\xB5\xFD4\x1Fg\xAA9\xAD,\x93\x1F_\xD7t\xB2\xEA\xB4\x94G\x93#\xDD\bi\xA5\xE3\x87\xBA\xB6\xDA\xD8\x95i\xB6N4Jm\r\x93\xCA\x8D\xC50I1\x19I\xF9=\x1E\x9E\x13S\x10AF\xF9\xC1\vXr\x865\n|\xD2\x8B{\xA59\xF0\xCE\x94*\x12O\x03\x11\xDC\xAC\xF5\a\xAD\x97\x81oZ%\xAE fA?\x19\n\x7F[d\xF0\xDC]\xF1F\x84\xD64=\x9CpG?\x04,\xB5j\x13\xC0[?\x19jM-\xD8\xD2\t$Lf\x00\xCAOmH\x06\xFC\x89I\xF3\xE7d\xF4z\xE9\x03l\xF3\a\x95u1\x18\xFAF\xDE\xDD\x0Ec!\x03\xBAs\xDDWm-\x8F\xFF\xD9"
plain = Base64.decode64(raw)
=> "\xF6>\x00\x01\x04\xA4d\x94`\x00\x10\x10\x00\x00\x10\x00\x10\x00\x0Fl\x02\x10\x00\x14\f\x10<@<4484@@<<8<8@88444@<4<00040<404@0088<404T48DDPPL04X`XH`@HPH\x04\x14\x14\x14 \x1C 4$$<P<@PPPHPPPPPPPPTPPPPPPPPPPPPPPPPPPPPPPHPPPPPXPPxxPPPxS\xC0\x00\x11\b\x00`\x00`\x03\x01\"\x00\x02\x11\x01\x03\x11\x01\xF1\x00\a\x00\x00\x00\x80\xC0@@@@\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01@\x80\xC1\x80@\x01\xC2<@\x02\xB1\x00\x00\x10000 ` 0\x10\x00\x00\x00\x00\x00\x00\x10\x00!\x100B\x10Q#\x14\x15\x10a2&\x17\x18\e\x1C\x13)\x1A\x1D\x1F\x10\x00\\\x04\x00\f\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\b\f\x03\xC4\x00\x1D\x11\x01\x01\x01\x00\x03\x01\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x11\x02\x12!\x03\x131A\xF6\x80\x03\x00\xC0@\x00\x84@\xC4@\x0F\xC0\t\x96\xC3\x95:\x83\n\rdp\xA3T\x9E\xAB#\x82\xED\xAE\xC8\x11\xD1QyVaT\n\x89Y\xBA\xCD\xD7\xA1\x15I\x88v&6t\xE5f\xA9Z\xDA\x17q\xC7u:\xF6${\x85\xAD\xD2\xA9\x0F-\xB8\xE4!\xAAZ\xA2:G!\xA8w\xBA\xC9T\xA0\xABu4\xC2\xE9\xE1\vU\xC8\xAB\v\xC8^\x85'\x05m&,u\x94\x9D\x04\x13\xC2\xE5g\x03\xC7yC\x00\x8A\xB7\xA4\x94qu\n@\xE1v\xB6\x9B\x8EQ:cy)\x8D*;\x88h\xEA\xB6\x96\xB2\xA5\xB0S-=\xFD\x17\xB5\xBBM\xA4fP\x14\x9E\xB6\x8Ek_\xA4j!\xA3k\xB8\xE8{\"<\xC0\f.\xDB\xC4d\xE1e\xDF[\x1C\xAB\xF4\xEDF\x01\x1E\xF3(\x12\xFC\xD6\xDEi\xAE\x9C\x03\x1F\x12\x80\xADB\x16\xC6\x8D\xF8xn\xD1\xD0~! \xF1\x0E\x1D\xC7#+J<u\x9Fz*\xCD\xEA\xBAT\xD5N\t\x80\x8A\xF4\xC7(\x9D<\x0E\xA8K\x9A\xB3\xC2\xBA\xDC\xF7Hl\x19E\xDBLV\x8BEp\x00\xBC\x11 \xE0\xFD~\xD6i\xAE\x9C\"C\vr\x10\xA1\xD5o\x89\x89y\x801\xD3\xA9\xEE\x91W\xA1\viv\xC0\xB48\x89'\x9Fd\xAB\xC46\x00\x1FH\xE4L~~\x96\x9C\xB0\xC8\xCE0\xCA9\xB40#\xB2\x05\xC0\x85u*\xE69Dp\xE7I\xBB,\x90\f\x0F\x89LjY5\xCD.>\xA7;=\xD2[z'l\xC1\x8E\xE9\xD5\x85\xDBvA0@KK\xD5\x93\xBD\xA3\xB4\xE1\f\x9B\xD5\xA7\xBD\xD03\x19)\x86\x9F\xA1\x97\x98\xDB\x03\x8D\xC7\x00\x1E\x89\xBB`\xE1N\x95\xA69\xF9\xE0w(\xAB\xDD-\xCC\x13\xC8\xEE:'ZKq\t\x83\x9B8*W\xE9\xEA\xDD\x19\xCD!\x99F^S\xCA\x02\x81\x8F-\xECHG9\xD3\x94m\xF41\e-Og\xA4\x89\x1D\x15U\xF5\r\xCE$\xF1\x11\xF0\x87\xA8\xDC\xA8\xD4n\x11\xF00\xB6\xFD\xE0\x9C*\xE9\x15\xCA\xE3*-jp\xC6\xB7\xC3\x95\x9B\x01\xCE8oI\xEA\xFE\x10\xB7m\x0F\xC0\x11\xDB\xA4 \xAC\xAD\xC8nGR\x8A\xB6\xAB\x19S6\x06\xD0\xDD\xB5\xC5\xAE\xEE\xBE\x85\xA7\xD5e\xCC\x88\x13\xB8\xF3\x94\x95\xDE\xD6\xDC\xE2G|+)]\xBC\b\xDE`\xF4\x93\x1F\xD2\xDC\xB8\xE85:e7@p\ai\xEB\x18G\xD4\xA8\x00\x93\xC0P\xF0\xF5G5\xA4\x83#\xA3N@\xFAY\x9Dr\xF4\x92s\xE9\x93\x81\x81\xCA\x8C\x9D\xAA\xD7\xC8\xA2\xB5iqws(\xBAw\x82\x12\xAF5T\xF7\xAB\xF5!\xED\x837\x93\x95\rR\x96\xDE8C\x1D\xAC\x03\xC3I\x80O?\vM\xAE\xDF0\xB7k@\xE9\xDB\x81\xFFTV\xCEF\x93c\x13]2\xB4\xB4lA\xE7\xBA\x06\xF2\x9Ep\x8D\xA5p# \xCF\xE5R\xDF\v\"\xBB?\xC4t\xC4\xF7T:\xA3\x88\xE5SU\xA6I\xEE\xB8*\x11\x84d\x04\x11\xBAh\x19'\xA7\b$E\x93\xC8<H\xEA\xB5M\a\xD9\xEA\x8EkK$\xC7\xD5wK.\xABIDy2=\xD0\x86\x9A^8{\xABm\xAD\x89V\x9Bd\xE3D\xA6\xD0\xD9<\xA8\xDCS\x04\x93\x11\x94\x9F\x93\xD1\xE9\xE151\x04\x14o\x9C\x10\xB5\x87(cP\xA7\xCD(\xB7\xBAS\x9F\f\xE9B\xA1$\xF01\x1D\xCA\xCFPz\xD9x\x16\xF5\xA2Z\xE2\x06d\x10d)[d\xF0\xDC]\xF1F\x84\xD64=\x9CpG\x01\v-Z\x84\xF0\x16\xCF\xC6Z\x93Kv4\x82I\x13\x19\x802\x93\xDBR\x01\x88\x94\x9F\x1D\x93\xD1\xEB\xA4\r\xB3\xCC\x1EU\xD4\xC4c\xE9\e{t9\x8C\x84\x0E\xE9\xCFu]\xB4\xB66"
urlsafe == image_result.data.photo_data
=> false
plain == image_result.data.photo_data
=> true
@ckarbass
Copy link

ckarbass commented Aug 8, 2014

I'm seeing this as well (using the new gmail api). Thanks for posting your solution!

The key line in @rhec is data.to_hash which bypasses the incorrect encoding being done magically by this gem.

@sqrrrl sqrrrl added the obsolete label Jan 8, 2016
@sqrrrl sqrrrl closed this as completed Jan 8, 2016
@yoshi-automation yoshi-automation added 🚨 This issue needs some love. triage me I really want to be triaged. labels Apr 7, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
🚨 This issue needs some love. triage me I really want to be triaged.
Projects
None yet
Development

No branches or pull requests

4 participants