nextcloud / nextcloud/maps

[Bug]: Device points request uses limit=100000, rejected by Nextcloud 34

Open
#1,665 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

0. Needs triage bug
Dominant language
JavaScript
Stars
598
Forks
113
PR merge metrics
No merged PRs in 30d

Description

⚠️ This issue respects the following points: ⚠️
Bug description

When opening the Maps app and loading device location history, Maps sends a request with limit=100000.

Example request:

GET /index.php/apps/maps/devices/1?limit=100000&offset=0

On Nextcloud 34 this request is rejected with:

Parameter limit must be between 1 and 500

As a result, device location points cannot be loaded correctly and the following error is repeatedly written to the Nextcloud log.

I verified that the request originates from the Maps app itself and is not caused by the reverse proxy or web server configuration.

Environment:

  • Nextcloud Server: 34.0.3
  • Maps: 1.8.0
  • Docker installation
  • MariaDB
  • Redis
  • nginx reverse proxy

The installed Maps backend contains:

public function getDevicePoints(
$id,
?int $pruneBefore = 0,
?int $limit = 10000,
?int $offset = 0,
?array $tokens = null
): DataResponse

However, the compiled Maps frontend (js/maps-main.js) requests device points using a limit of 100000 (1e5).

The relevant frontend code contains:

get(...)(e.id,this.myMapId,1e5,e.points?.length||0,e.tokens)

and subsequently checks:

i.data.length>=1e5

So the value 100000 appears to be intentionally used as the pagination/page size for device points, but this exceeds the maximum request parameter value accepted by Nextcloud 34.

Image

Expected behavior:
Maps should request device points using a limit compatible with the current Nextcloud server parameter validation and paginate the results as necessary.

Actual behavior:
Maps requests limit=100000, Nextcloud rejects the request, and device location history fails to load.

Steps to reproduce
  1. Install/enable Maps 1.8.0 on Nextcloud 34.
  2. Enable device location tracking and have location points stored for a device.
  3. Open Maps.
  4. Open the device/location history.
  5. Check the Nextcloud log.

Maps sends:

GET /index.php/apps/maps/devices/1?limit=100000&offset=0

Nextcloud rejects the request with:

Parameter limit must be between 1 and 500

Expected behavior

Maps should load device location points successfully.

The frontend should use a request limit accepted by the current Nextcloud server and use pagination when more points need to be retrieved.

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 of the server?

None

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

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
sudo docker exec -u www-data nextcloud-app php occ config:list system
{
    "system": {
        "auth.session.enforce": false,
        "auth.session.lifetime": 86400,
        "htaccess.RewriteBase": "\/",
        "memcache.local": "\\OC\\Memcache\\APCu",
        "apps_paths": [
            {
                "path": "\/var\/www\/html\/apps",
                "url": "\/apps",
                "writable": false
            },
            {
                "path": "\/var\/www\/html\/custom_apps",
                "url": "\/custom_apps",
                "writable": true
            }
        ],
        "memcache.distributed": "\\OC\\Memcache\\Redis",
        "memcache.locking": "\\OC\\Memcache\\Redis",
        "redis": {
            "host": "***REMOVED SENSITIVE VALUE***",
            "password": "***REMOVED SENSITIVE VALUE***",
            "port": "***REMOVED SENSITIVE VALUE***",
        },
        "upgrade.disable-web": true,
        "instanceid": "***REMOVED SENSITIVE VALUE***",
        "passwordsalt": "***REMOVED SENSITIVE VALUE***",
        "secret": "***REMOVED SENSITIVE VALUE***",
        "allow_local_remote_servers": true,
        "onlyoffice": {
            "verify_peer_off": true
        },
        "trusted_domains": [
            "***REMOVED SENSITIVE VALUE***",
        ],
        "trusted_proxies": "***REMOVED SENSITIVE VALUE***",
        "overwriteprotocol": "https",
        "overwritehost": "***REMOVED SENSITIVE VALUE***",
        "overwrite.cli.url": "***REMOVED SENSITIVE VALUE***",
        "overwritewebroot": "\/",
        "datadirectory": "***REMOVED SENSITIVE VALUE***",
        "dbtype": "mysql",
        "version": "34.0.3.2",
        "dbname": "***REMOVED SENSITIVE VALUE***",
        "dbhost": "***REMOVED SENSITIVE VALUE***",
        "dbtableprefix": "oc_",
        "mysql.utf8mb4": true,
        "dbuser": "***REMOVED SENSITIVE VALUE***",
        "dbpassword": "***REMOVED SENSITIVE VALUE***",
        "installed": true,
        "maintenance": false,
        "mail_domain": "***REMOVED SENSITIVE VALUE***",
        "mail_from_address": "***REMOVED SENSITIVE VALUE***",
        "mail_smtpmode": "smtp",
        "mail_smtphost": "***REMOVED SENSITIVE VALUE***",
        "mail_smtpport": "***REMOVED SENSITIVE VALUE***",
        "mail_sendmailmode": "smtp",
        "mail_smtpstreamoptions": {
            "ssl": {
                "allow_self_signed": true,
                "verify_peer": false,
                "verify_peer_name": false
            }
        },
        "config_preset": 2,
        "defaultapp": "dashboard,files,photos,activity,mail,contacts,calendar,office",
        "maintenance_window_start": 1,
        "default_phone_region": "CZ",
        "enable_previews": true,
        "preview_max_x": 2048,
        "preview_max_y": 2048,
        "app_install_overwrite": [],
        "loglevel": 2,
        "log_rotate_size": 104857600,
        "log_max_history": 5,
        "memories.db.triggers.fcu": true,
        "memories.exiftool": "\/var\/www\/html\/custom_apps\/memories\/bin-ext\/exiftool-amd64-glibc",
        "memories.vod.path": "\/var\/www\/html\/custom_apps\/memories\/bin-ext\/go-vod-amd64",
        "enabledPreviewProviders": [
            "OC\\Preview\\JPEG",
            "OC\\Preview\\PNG",
            "OC\\Preview\\GIF",
            "OC\\Preview\\BMP",
            "OC\\Preview\\HEIC",
            "OC\\Preview\\TIFF",
            "OC\\Preview\\Movie"
        ],
        "memories.gis_type": 1,
        "memories.vod.disable": false,
        "memories.vod.ffprobe": "\/usr\/bin\/ffprobe",
        "memories.vod.ffmpeg": "\/usr\/bin\/ffmpeg",
        "davstorage.request_timeout": 300,
        "preview_max_memory": 512
    }
}
List of activated Apps
sudo docker exec -u www-data nextcloud-app php occ app:list
Enabled:
  - activity: 7.0.0
  - app_api: 34.0.0
  - appstore: 1.0.0
  - bookmarks: 16.2.6
  - bruteforcesettings: 7.0.0
  - calendar: 6.5.4
  - circles: 34.0.0
  - cloud_federation_api: 1.18.0
  - collectives: 4.5.0
  - comments: 1.24.0
  - contacts: 8.7.6
  - contactsinteraction: 1.15.0
  - cookbook: 0.11.9
  - dashboard: 7.14.0
  - dav: 1.40.0
  - deck: 1.18.3
  - federatedfilesharing: 1.24.0
  - federation: 1.24.0
  - files: 2.6.0
  - files_downloadlimit: 5.2.0
  - files_external: 1.26.0
  - files_lock: 34.0.1
  - files_pdfviewer: 7.0.0-dev.0
  - files_reminders: 1.7.0
  - files_sharing: 1.26.0
  - files_trashbin: 1.24.0
  - files_versions: 1.27.0
  - firstrunwizard: 7.0.0-dev.0
  - gpxpod: 8.3.1
  - journalnotes: 0.2.0
  - logcleaner: 1.5.8
  - logreader: 7.0.0
  - lookup_server_connector: 1.22.0
  - mail: 5.11.2
  - maps: 1.8.0
  - memories: 8.1.0
  - music: 3.1.1
  - nextcloud_announcements: 6.0.0
  - notes: 6.0.2
  - notifications: 7.0.0-dev.1
  - notify_push: 1.4.0
  - oauth2: 1.22.0
  - onlyoffice: 10.1.2
  - password_policy: 6.0.0-dev.0
  - previewgenerator: 5.14.0
  - privacy: 6.0.0-dev.1
  - profile: 1.3.0
  - provisioning_api: 1.24.0
  - recommendations: 7.0.0
  - related_resources: 5.0.0-dev.0
  - serverinfo: 6.0.0
  - settings: 1.17.0
  - sharebymail: 1.24.0
  - side_menu: 6.0.1
  - socialsharing_facebook: 4.1.0
  - spreed: 24.0.4
  - support: 6.0.0
  - survey_client: 6.0.0-dev.0
  - tables: 2.2.2
  - tasks: 0.18.1
  - text: 8.0.0
  - theming: 2.9.0
  - twofactor_backupcodes: 1.23.0
  - twofactor_totp: 16.0.0
  - updatenotification: 1.24.0
  - user_status: 1.14.0
  - viewer: 7.0.0-dev.0
  - weather_status: 1.14.0
  - webhook_listeners: 1.6.0
  - workflowengine: 2.16.0
Disabled:
  - admin_audit: 1.24.0
  - context_chat: 5.4.0 (installed 5.4.0)
  - encryption: 2.22.0
  - office: 1.0.0 (installed 1.0.0)
  - photos: 7.0.0 (installed 7.0.0)
  - suspicious_login: 12.0.0-dev.0
  - systemtags: 1.24.0 (installed 1.24.0)
  - twofactor_nextcloud_notification: 8.0.0
  - user_ldap: 1.25.0
Nextcloud Signing status
No errors have been found.
Nextcloud Logs

Browser Console

Additional info

No response

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the frontend source corresponding to the call shown in js/maps-main.js and the backend getDevicePoints method. Reproduce device history loading against Nextcloud 34, then verify the request stays within the server's 500-point limit and paginates when needed. Done means stored device location history loads without the parameter-validation error.

Written by the indexing model from the issue text.

Assessment

Tech stack
javascript, php
Domain
api, backend
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
70/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.