[Cyberduck-trac] [Cyberduck] #10995: ListObjects for directories over 1000 files doesn't work for S3 compatible storage

Cyberduck trac at cyberduck.io
Tue Mar 17 17:25:38 UTC 2020


#10995: ListObjects for directories over 1000 files doesn't work for S3 compatible
storage
-----------------------+-------------------------
    Reporter:  skier5  |      Owner:
        Type:  defect  |     Status:  new
    Priority:  normal  |  Milestone:
   Component:  s3      |    Version:  7.1
    Severity:  normal  |   Keywords:
Architecture:          |   Platform:  macOS 10.15
-----------------------+-------------------------
 Starting with Cyberduck 7.1.0, I've noticed that when connecting to a
 private S3 compatible storage service, I can no longer list files in a
 directory where there are over 1000 files/keys present.  The UI presents
 itself as if there were no files in the directory.

 In Cyberduck 7.0.2, executing the same scenario results in displaying the
 >1000 list of keys.

 When turning on debugging, I see the following:

 > GET /bucket/?encoding-type=url&max-
 keys=1000&prefix=path%2Fto%2Flarge%2Fdirectory%2F&delimiter=%2F HTTP/1.1
 This returns a 200.

 I also see
 > GET /bucket/?encoding-type=url&max-
 keys=1000&prefix=path%2Fto%2Flarge%2Fdirectory%2F&delimiter=%2F&marker=path%2Fto%2Flarge%2Fdirectory%2Fmarker.json
 HTTP/1.1
 This also returns a 200.

 Then I see the following
 ```
 2020-03-17 13:00:23.199539-0400 0x7427b8   Default     0xaecc6e
 88140  0    Cyberduck: (libcore.dylib) [ch.sudo.cyberduck:Thread-40
 ch.cyberduck.core.threading.BackgroundCallable] Failure
 java.lang.IllegalArgumentException: URLDecoder: Illegal hex characters in
 escape (%) pattern - Error at index 1 in: "ap" running background task
 java.lang.Exception
         at
 ch.cyberduck.core.threading.BackgroundCallable.<init>(BackgroundCallable.java:36)
         at
 ch.cyberduck.core.threading.DefaultBackgroundExecutor.execute(DefaultBackgroundExecutor.java:67)
         at
 ch.cyberduck.core.AbstractController.background(AbstractController.java:71)
         at
 ch.cyberduck.ui.cocoa.controller.BrowserController.reload(BrowserController.java:517)
         at
 ch.cyberduck.ui.cocoa.controller.BrowserController.setWorkdir(BrowserController.java:3064)
         at
 ch.cyberduck.ui.cocoa.controller.BrowserController.setWorkdir(BrowserController.java:3039)
         at
 ch.cyberduck.ui.cocoa.controller.BrowserController.insideButtonClicked(BrowserController.java:2705)
         at
 ch.cyberduck.ui.cocoa.controller.BrowserController$AbstractBrowserTableDelegate.tableRowDoubleClicked(BrowserController.java:3597)
         at java.base/jdk.internal.reflect.NativeMethodAccessorI
 2020-03-17 13:00:23.199617-0400 0x7427b8   Info        0xaecc6e
 88140  0    Cyberduck: (libcore.dylib) [ch.sudo.cyberduck:Thread-40
 ch.cyberduck.core.threading.SessionBackgroundAction] Run alert callback
 ch.cyberduck.ui.cocoa.callback.PromptAlertCallback at 8102284 for failure
 BackgroundException{class=class
 ch.cyberduck.core.exception.ConnectionCanceledException, file=null,
 message='Error', detail='Unknown application error. URLDecoder: Illegal
 hex characters in escape (%) pattern - Error at index 1 in: "ap".',
 cause='java.lang.IllegalArgumentException: URLDecoder: Illegal hex
 characters in escape (%) pattern - Error at index 1 in: "ap"'}
 ```

 I'm having issues building Cyberduck on macOS 10.15.3 (most likely due to
 my own incompetence) so I can't quite debug the exact issue.  If I can
 figure that out, I'd can attempt to create a patch fixing or working
 around my issue.

 Reading through code, I think it may be related to https://github.com
 /iterate-ch/cyberduck/commit/07e0e548684b7a65f2d1bcbc424da639ffeb4396.

 I'm not blocked since I have a work around (using 7.0.2) but figured that
 I might create a ticket for this anyway to track.

--
Ticket URL: <https://trac.cyberduck.io/ticket/10995>
Cyberduck <https://cyberduck.io>
Libre FTP, SFTP, WebDAV, S3 & OpenStack Swift browser for Mac and Windows


More information about the Cyberduck-trac mailing list