owncloud / contacts

:busts_in_silhouette: Manage your CardDAV contacts from a feature-rich web-interface
75 stars 46 forks source link

Some contact images are not displayed (broken base64 URLs) #175

Closed nicokaiser closed 8 years ago

nicokaiser commented 8 years ago

Steps to reproduce

  1. Have an address book with some JPEG and PNG images, e.g. created by iOS or OS X
  2. Open Contacts app

    Expected behaviour

Contact images should display correctly

Actual behaviour

Some contact images are broken.

Some of the {{data:image/...;base64}} URLs that seem to be generated by the frontend are broken, there seems to be garbage before the actual image content, e.g.:

data:image/png;base64,["ENCODING=b","TYPE=JPEG:/9j/4AAQSkZJRgABAQEASABIAAD/4QBARXhpZgAATU
...

This is a complete URL (with some different garbage):

data:image/png;base64,uHneQ3eO/nZq+m0YQ==":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

Please tell me how I can provide any additional information, I cannot access the CadDAV XHR result, as it is transferred via "REPORT" (which the Chrome developer console refuses to display). But in the database, the images are stored correctly, and also the other clients can display them without problems.

Server configuration

Operating system: Debian 8

Web server: nginx

Database: MySQL 5.5

PHP version: PHP 5.6

ownCloud version: 9.0.0

Contacts version: 1.0.0.0

Updated from an older ownCloud or fresh install: Updated from 8.x

Signing status (ownCloud 9.0 and above):

No errors have been found.

List of activated apps:

Enabled:
  - activity: 2.2.1
  - calendar: true
  - comments: 0.2
  - contacts: true
  - dav: 0.1.5
  - federatedfilesharing: 0.1.0
  - federation: 0.0.4
  - files: 1.4.4
  - files_sharing: 0.9.1
  - files_texteditor: 2.1
  - files_trashbin: 0.8.0
  - files_versions: 1.2.0
  - files_videoplayer: 0.9.8
  - firstrunwizard: 1.1
  - gallery: 14.5.0
  - news: true
  - notifications: 0.2.3
  - provisioning_api: 0.4.1
  - systemtags: 0.2
  - templateeditor: 0.1
  - updatenotification: 0.1.0
Disabled:
  - encryption
  - external
  - files_external
  - files_pdfviewer
  - tasks
  - user_external
  - user_ldap

The content of config/config.php:

{
    "system": {
        "instanceid": "512fdebce061d",
        "passwordsalt": "***REMOVED SENSITIVE VALUE***",
        "datadirectory": "\/var\/www\/cloud....\/data",
        "dbtype": "mysql",
        "version": "9.0.0.19",
        "dbname": "owncloud",
        "dbhost": "localhost",
        "dbtableprefix": "oc_",
        "dbuser": "***REMOVED SENSITIVE VALUE***",
        "dbpassword": "***REMOVED SENSITIVE VALUE***",
        "installed": true,
        "default_language": "de",
        "defaultapp": "files",
        "knowledgebaseenabled": true,
        "enable_avatars": true,
        "allow_user_to_change_display_name": true,
        "remember_login_cookie_lifetime": 1296000,
        "session_lifetime": 86400,
        "session_keepalive": true,
        "mail_domain": "cloud.....",
        "forcessl": true,
        "maintenance": false,
        "theme": "",
        "loglevel": 0,
        "trusted_domains": [
            "cloud....."
        ],
        "mail_smtpmode": "smtp",
        "secret": "***REMOVED SENSITIVE VALUE***",
        "appcodechecker": false,
        "mail_smtpauthtype": "PLAIN",
        "mail_smtpauth": 1,
        "mail_smtphost": "smtp.mandrillapp.com",
        "mail_smtpport": "587",
        "mail_smtpname": "***REMOVED SENSITIVE VALUE***",
        "mail_smtppassword": "***REMOVED SENSITIVE VALUE***",
        "mail_smtpsecure": "tls",
        "enable_previews": false,
        "trashbin_retention_obligation": "auto"
    }
}

Are you using external storage, if yes which one: no

Are you using encryption: no

Are you using an external user-backend, if yes which one: no

Client configuration

Browser: Chrome 48

Operating system: OS X 10.11

CardDAV-clients: iOS 9.2, OS X 10.11

Henni commented 8 years ago

It is possible to inspect REPORTs in Chrome DevTools: image

BTW: thanks for reporting all the detailed issues

DeepDiver1975 commented 8 years ago

@nicokaiser can I ask you for a example vcard to reproduce this issue? THX

nicokaiser commented 8 years ago

For two of the three requests to "contacts/" Chrome says "Failed to load response data" in the Inspector -> Response section, and the third request seems to only contain loads of metadata. I'll attach my vCard, which is displayed with a broken image.

https://gist.github.com/nicokaiser/581d546e856abab3a664

DeepDiver1975 commented 8 years ago

THX @nicokaiser

DeepDiver1975 commented 8 years ago

I see the image on the latest master of contacts app

bildschirmfoto von 2016-03-09 16-34-43

nicokaiser commented 8 years ago

@DeepDiver1975 This is strange. Maybe the base64 gets corrupted on the way, I'll try to figure out what is actually transferred to the client.

nicokaiser commented 8 years ago

@DeepDiver1975 In the DAV response that is transferred to the frontend, the photo seems to be prefixed with cropping settings, see screenshot. Maybe this leads to problems when creating the URL version?

screen shot 2016-03-09 at 17 01 43
DeepDiver1975 commented 8 years ago

How does the vcard look like in the database?

nicokaiser commented 8 years ago

@DeepDiver1975: Like above, but of course without encoding:

PHOTO;X-ABCROP-RECTANGLE=ABClipRect_1&0&0&671&671&Nh68TCRv7GErj8P8mk8qCA==;
 ENCODING=b;TYPE=JPEG:/9j/4AAQSkZJRgABAQEASABIAAD/4QBARXhpZgAATU0AKgAAAAgAA
 YdpAAQAAAABAAAAGgAAAAAAAqACAAQAAAABAAACnqADAAQAAAABAAACngAAAAD/7QA4UGhvdG9
 zaG9wIDMuMAA4QklNBAQAAAAAAAA4QklNBCUAAAAAABDUHYzZjwCyBOmACZjs+EJ+/+ICHElDQ
 19QUk9GSUxFAAEBAAACDGxjbXMCEAAAbW50clJHQiBYWVogB9wAAQAZAAMAKQA5YWNzcEFQUEw
 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPbWAAEAAAAA0y1sY21zAAAAAAAAAAAAAAAAAAAAA
 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKZGVzYwAAAPwAAABeY3BydAAAAVwAAAA
 Ld3RwdAAAAWgAAAAUYmtwdAAAAXwAAAAUclhZWgAAAZAAAAAUZ1hZWgAAAaQAAAAUYlhZWgAAA
 bgAAAAUclRSQwAAAcwAAABAZ1RSQwAAAcwAAABAYlRSQwAAAcwAAABAZGVzYwAAAAAAAAADYzI
 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdGV4dAAAAABGQgAAWFlaIAAAAAAAAPbWAAEAAAA
 A0y1YWVogAAAAAAAAAxYAAAMzAAACpFhZWiAAAAAAAABvogAAOPUAAAOQWFlaIAAAAAAAAGKZA
 AC3hQAAGNpYWVogAAAAAAAAJKAAAA+EAAC2z2N1cnYAAAAAAAAAGgAAAMsByQNjBZIIawv2ED8
 VURs0IfEpkDIYO5JGBVF3Xe1rcHoFibGafKxpv33Tw+kw////wAARCAKeAp4DASIAAhEBAxEB/
 8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQI
 DAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q
 0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6i
...
DeepDiver1975 commented 8 years ago

Let me test the app with this data ....

DeepDiver1975 commented 8 years ago

@nicokaiser can I ask you to share the vcard with me? THX

nicokaiser commented 8 years ago

@DeepDiver1975 I sent it to you via E-mail

DeepDiver1975 commented 8 years ago

Got it. Thx

DeepDiver1975 commented 8 years ago

This is a parsing issue in the vcard library we use on client side.

DeepDiver1975 commented 8 years ago

fixed with https://github.com/Heymdall/vcard/pull/2