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

[Bug]: Array to string conversion in CalDAV backend #37025

Open
6 of 9 tasks
ChristophWurst opened this issue Mar 3, 2023 · 25 comments
Open
6 of 9 tasks

[Bug]: Array to string conversion in CalDAV backend #37025

ChristophWurst opened this issue Mar 3, 2023 · 25 comments
Assignees
Labels
1. to develop Accepted and waiting to be taken care of 26-feedback 27-feedback 28-feedback 30-feedback bug feature: caldav Related to CalDAV internals feature: dav good first issue Small tasks with clear documentation about how and in which place you need to fix things in.

Comments

@ChristophWurst
Copy link
Member

⚠️ This issue respects the following points: ⚠️

  • This is a bug, not a question or a configuration/webserver/proxy issue.
  • This issue is not already reported on Github (I've searched it).
  • Nextcloud Server is up to date. See Maintenance and Release Schedule for supported versions.
  • Nextcloud Server is running on 64bit capable CPU, PHP and OS.
  • I agree to follow Nextcloud's Code of Conduct.

Bug description

Array to string conversion at https://github.com/nextcloud/server/blob/v26.0.0rc1/apps/dav/lib/CalDAV/Activity/Backend.php#L561

$users = $this->getUsersForShares(array_intersect($sourceShares, $targetShares));

Steps to reproduce

  1. Connect mac os to Nextcloud's CalDAV backend
  2. ???

Expected behavior

No errors

Installation method

None

Operating system

None

PHP engine version

None

Web server

None

Database engine version

None

Is this bug present after an update or on a fresh install?

None

Are you using the Nextcloud Server Encryption module?

None

What user-backends are you using?

  • Default user-backend (database)
  • LDAP/ Active Directory
  • SSO - SAML
  • Other

Configuration report

n/a

List of activated Apps

n/a

Nextcloud Signing status

No response

Nextcloud Logs

{
  "reqId": "9DlC6Z02DsTFC2tvNxU2",
  "level": 3,
  "time": "2023-03-03T06:56:13+00:00",
  "remoteAddr": "redacted",
  "user": "user123",
  "app": "PHP",
  "method": "MOVE",
  "url": "/remote.php/dav/calendars/user123/personal/sabredav-abc-def-ghi.ics",
  "message": "Array to string conversion at /var/www/cloud.nextcloud.com/nextcloud/apps/dav/lib/CalDAV/Activity/Backend.php#561",
  "userAgent": "macOS/13.1 (22C65) dataaccessd/1.0",
  "version": "26.0.0.8",
  "data": {
    "app": "PHP"
  },
  "id": "123def567"
}

Additional info

No response

@ChristophWurst ChristophWurst added bug 1. to develop Accepted and waiting to be taken care of feature: dav feature: caldav Related to CalDAV internals labels Mar 3, 2023
@ChristophWurst
Copy link
Member Author

array_intersect does not like nested array: https://3v4l.org/TYrqn

@tcitworld
Copy link
Member

tcitworld commented Mar 20, 2023

I just saw the same thing (in 25). I don't see how shares can contain an array itself. 🤔

@kartoffelheinz
Copy link

This bug prevents certain events from syncing (from Apple devices, mostly fantastical) and had been fixed in early 26 beta but apparently has now been re-introduced. Unfortunate. Any idea on when this is going to be fixed again?

@Pazu
Copy link

Pazu commented Nov 5, 2023

Still seeing this running 27.1.3:

{
    "reqId": "[removed]",
    "level": 3,
    "time": "2023-11-05T17:35:11+00:00",
    "remoteAddr": "[removed]",
    "user": "[removed]",
    "app": "PHP",
    "method": "MOVE",
    "url": "/remote.php/dav/calendars/[removed]/[removed]/[GUID].ics",
    "message": "Array to string conversion at /var/www/path_to_web_root/apps/dav/lib/CalDAV/Activity/Backend.php#561",
    "userAgent": "iOS/17.0.3 (21A360) dataaccessd/1.0",
    "version": "27.1.3.2",
    "data": {
        "app": "PHP"
    },
    "id": "[removed]"
}

@solracsf
Copy link
Member

What if values are flatten before using the arrays, could this fix it?

$flatten = function ($array) use (&$flatten) {
	$result = [];
	foreach ($array as $value) {
		if (is_array($value)) {
			$result = array_merge($result, $flatten($value));
		} else {
			$result[] = $value;
		}
	}
	return $result;
};

$sourceShares = is_array($sourceShares) ? $flatten($sourceShares) : [];
$targetShares = is_array($targetShares) ? $flatten($targetShares) : [];

@jameskimmel
Copy link

Same error on 28.0.2


{
  "reqId": "removed",
  "level": 3,
  "time": "2024-02-21T11:07:11+00:00",
  "remoteAddr": "1.1.1.1",
  "user": "UserName1",
  "app": "PHP",
  "method": "MOVE",
  "url": "/remote.php/dav/calendars/UserName1/sitzungen_shared_by_UserName2/58B95D5D-32EA-490B-82E1-ADC31B854C3C.ics",
  "message": "Array to string conversion at /var/www/nextcloud/apps/dav/lib/CalDAV/Activity/Backend.php#561",
  "userAgent": "Mozilla/5.0 (iPad; CPU OS 15_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/121.0.6167.171 Mobile/15E148 Safari/604.1",
  "version": "28.0.2.5",
  "data": {
    "app": "PHP"
  },
  "id": "65defd55416b7"
}

@joshtrichards
Copy link
Member

joshtrichards commented Feb 28, 2024

Same solution as used in #43794 should work here (using array_map serialize/unserialize different approach taken in the final merged PR, but same idea). I don't have a test setup for this, so I'll leave trying it to someone that feels like giving it a shot + can also reproduce this situation on-demand.

@joshtrichards joshtrichards removed their assignment Feb 28, 2024
@joshtrichards joshtrichards added the good first issue Small tasks with clear documentation about how and in which place you need to fix things in. label Feb 28, 2024
@prismopensource

This comment was marked as duplicate.

@Jolopu

This comment was marked as duplicate.

@joshtrichards

This comment was marked as resolved.

@Quake85
Copy link

Quake85 commented Oct 23, 2024

Also on my instance 30.0.1

What about a fix or update?

@Mer0me
Copy link

Mer0me commented Nov 5, 2024

This bug prevents certain events from syncing (from Apple devices, mostly fantastical) and had been fixed in early 26 beta but apparently has now been re-introduced. Unfortunate. Any idea on when this is going to be fixed again?

We actually have some events not syncing only on some users' Iphones. Could you please develop your observations. It could help us to figure out what happened to these events.
The Array to string error throws every time we move an event from a calendar to another. But there is no evident correlation between moved events and missing events on Iphones.

@guckuck
Copy link

guckuck commented Nov 7, 2024

I have this problem too. I just updated to 30.0.2. I will observe this problem ...

{
  "reqId": "removed",
  "level": 3,
  "time": "2024-11-05T05:39:20+00:00",
  "remoteAddr": "IP",
  "user": "user.name",
  "app": "PHP",
  "method": "MOVE",
  "url": "/remote.php/dav/calendars/user.name/personal/A2829EA6-94ED-4E01-8FAD-D1879CAA78BF.ics",
  "message": "Array to string conversion at /var/www/nextcloud/apps/dav/lib/CalDAV/Activity/Backend.php#541",
  "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:132.0) Gecko/20100101 Firefox/132.0",
  "version": "30.0.1.2",
  "data": {
    "app": "PHP"
  },
  "id": "..."
}

@thibs43
Copy link

thibs43 commented Nov 14, 2024

Hello,
Also got this error here, nextcloud server Nextcloud Hub 9 (30.0.2)
Client is on a Android phone syncing with calDav

[PHP] Error: Array to string conversion at /var/www/html/apps/dav/lib/CalDAV/Activity/Backend.php#541
	MOVE /remote.php/dav/calendars/---/personal/F3D54AEF-000-4D86-BB5A-D********75FAE.ics
	from 192.168.1.254 by *** at Nov 13, 2024, 10:13:11 PM

@Quake85
Copy link

Quake85 commented Nov 14, 2024

Yes, i also Updated to 30.0.2, Same Problem. Also fresh/new Installation in my testing environment.

Ist’s clear, that this is a bug.

So please dear developers clear this Problem.

Thanks a lot

@jameskimmel
Copy link

I know this does not help most of you guys, but I can only say that the issue is gone for me.

I updated to 30.0.2, reconfigured my NGINX reverse proxy to include this

    location /.well-known/carddav {
    return 301 $scheme://$host/remote.php/dav;
    }

    location /.well-known/caldav {
    return 301 $scheme://$host/remote.php/dav;
    }

and also installed the calender via profiles on my iPhone. Works perfect and nothing in the logs.

@SebastianKrupinski SebastianKrupinski self-assigned this Dec 6, 2024
@SebastianKrupinski
Copy link
Contributor

Hi Everyone,

Would anyone with this issue here be able to provide a transmission intercept capture? As I don't have a Mac or iDevice to test with.

This seems to be caused by the MOVE method, but I need a reliable way to reproduce this issue to test and fix.

@Quake85
Copy link

Quake85 commented Dec 6, 2024

Hey Sebastian,
If you could describe me what exactly to do, I can do this.
At the Moment I don‘t know exactly what you mean.

@SebastianKrupinski
Copy link
Contributor

SebastianKrupinski commented Dec 6, 2024

Hey Sebastian, If you could describe me what exactly to do, I can do this. At the Moment I don‘t know exactly what you mean.

I need to see the commands that the mac app is sending, the easiest way to do this would be to use tcpdump on the server and setup the Mac client to connect to NC over non encrypted HTTP.

tcpdump -i <interface> -w <output_file> port 80

@SebastianKrupinski
Copy link
Contributor

You could also use something like mitmproxy to capture the encrypted connection if a HTTP setup or connection is not possible.

@Quake85
Copy link

Quake85 commented Dec 6, 2024

Ok. I will try it the next days. Perhaps someone else who has this Problem is faster than me, but i will give my best to help you finding the fault.

@ChristophWurst
Copy link
Member Author

I don't see how shares can contain an array itself. 🤔

Could it be cache value deserialization? Shares loaded from the db should not be nested.

@aaronaxvig
Copy link

I see this issue on occasion and am pretty busy but mildly interested in helping figure this out. Looks like it is my wife's iPhone causing the issue most recently. MOVE command too, very similar to the Android log shown above.

Do you think it would be possible/helpful to add some PHP code to the Backend.php file on my server to write out the value of whichever shares variable? If I could do that and then check back periodically it would be about the right amount of time commitment I can handle.

@medebb
Copy link

medebb commented Jan 29, 2025

I'm able to reproduce this error with one special Calendar-Event. Having two calendars for my nextcloud user I get this error when moving this special event from one calendar to the other on my iPhone with iOS 18.3. Movement was successfull (event visible in the target calendar) but leads to the following error in the log:

{"reqId":"nrBOp77Tbk25JfjausVB","level":3,"time":"2025-01-29T17:26:09+01:00","remoteAddr":"<IP-Adress>","user":"matthias","app":"PHP","method":"MOVE","url":"/remote.php/dav/calendars/matthias/sonstigetermine/sabredav-31cf25cd-6f76-43f9-ac90-cd84780283f3.ics","message":"Array to string conversion at /var/www/html/apps/dav/lib/CalDAV/Activity/Backend.php#541","userAgent":"iOS/18.3 (22D63) dataaccessd/1.0","version":"30.0.5.1","data":{"app":"PHP"},"id":"679a56a3ce6e0"}

I am not familiar with tcpdump or something like that, but maybe the calendar-event is useful to reproduce error on your side?

BEGIN:VCALENDAR VERSION:2.0 CALSCALE:GREGORIAN PRODID:-//Apple Inc.//iPhone OS 18.1.1//EN BEGIN:VTIMEZONE TZID:Europe/Berlin BEGIN:DAYLIGHT DTSTART:19810329T020000 RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU TZNAME:MESZ TZOFFSETFROM:+0100 TZOFFSETTO:+0200 END:DAYLIGHT BEGIN:STANDARD DTSTART:19961027T030000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU TZNAME:MEZ TZOFFSETFROM:+0200 TZOFFSETTO:+0100 END:STANDARD END:VTIMEZONE BEGIN:VEVENT ATTENDEE;CN=tina;CUTYPE=INDIVIDUAL;EMAIL=tina@mail.de;PARTSTAT=ACCEPTE D:mailto:tina@mail.de ATTENDEE;CUTYPE=INDIVIDUAL;EMAIL=matthias@mail.de;PARTSTAT=ACCEPTED;ROL E=REQ-PARTICIPANT;SCHEDULE-STATUS=2.0:mailto:matthias@mail.de CREATED:20250128T130017Z DTEND;TZID=Europe/Berlin:20250214T170000 DTSTAMP:20250128T131318Z DTSTART;TZID=Europe/Berlin:20250214T160000 LAST-MODIFIED:20250128T131317Z ORGANIZER;CN=tina;EMAIL=tina@mail.de;SCHEDULE-STATUS=1.1:mailto:tina@mail.de SEQUENCE:0 SUMMARY:ELEMENTS Terminbestätigung 14.02.2025\, 16:00 Uhr TRANSP:OPAQUE UID:9D8C6604-80E2-45D9-B1B8-05595DA363F3 X-APPLE-CREATOR-IDENTITY:com.apple.datadetectors.DDActionsService X-APPLE-CREATOR-TEAM-IDENTITY:0000000000 END:VEVENT END:VCALENDAR

@SebastianKrupinski
Copy link
Contributor

@medebb Thank you, I will use the event you posted in my tests

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
1. to develop Accepted and waiting to be taken care of 26-feedback 27-feedback 28-feedback 30-feedback bug feature: caldav Related to CalDAV internals feature: dav good first issue Small tasks with clear documentation about how and in which place you need to fix things in.
Projects
Status: 📄 To do
Development

No branches or pull requests