PTPIP timeouts from undersized modified file on Sony RX100M3

Adam Chasen via Gphoto-devel <[email protected]> Tue, 21 Nov 2023 16:03:00 -0500
Newsgroups gmane.comp.multimedia.gphoto.devel
Message-ID <[email protected]>
I was getting repeatable timeout errors from Sony RX100M3 during file transfers over PTP/IP. I tracked it down to a file I modified on the SD card. It appears as timeout error triggers when the file size conflicts in a "smaller than" scenario with metadata. Possibly add a condition for "under size" error and suggest in the size errors that it could be a modified file on the SD card?

The function is `ptp_ptpip_getdata` (https://github.com/gphoto/libgphoto2/blob/29cb9da4206a15cfaa07194f7fc17a4417fc1bc8/camlibs/ptp2/ptpip.c#L307)

And the logs (below) indicate it is processing a PTPIP_CMD_RESPONSE (07) packet in the while loop which I would have expected to bail after the PTPIP_END_DATA_PACKET(0c), but it will sit waiting until it receives enough data to match the size indicated by the PTP metadata (which is wrong in this case).

The `curread` or`toread` comparison causes the while loop to hang triggering the 'PTP Timeout'. From some extra debug logs I added. When it processes the "ret type 7" error in the debug logs, it shows values: curread of  77860 and toread of 1048576.

Even after a manual "database check", it still reports the wrong size value. Looks like the database may be out of sync with the filesystem.
➜  disk ls -l ./DCIM/100MSDCF/DSC09806.JPG
-rwxr-xr-x. 1 achasen achasen 77860 Apr 27  2023 ./DCIM/100MSDCF/DSC09806.JPG

Note to self, never write to the SD card. 

0.000106 main                        (2): ALWAYS INCLUDE THE FOLLOWING LINES WHEN SENDING DEBUG MESSAGES TO THE MAILING LIST:
0.000130 main                        (2): gphoto2 2.5.28.1
0.000135 main                        (2): gphoto2 has been compiled with the following options:
0.000137 main                        (2):  + gcc (C compiler used)
0.000139 main                        (2):  + popt (mandatory, for handling command-line parameters)
0.000141 main                        (2):  + exif (for displaying EXIF information)
0.000143 main                        (2):  + no cdk (for accessing configuration options)
0.000144 main                        (2):  + no aa (for displaying live previews)
0.000146 main                        (2):  + jpeg (for displaying live previews in JPEG format)
0.000148 main                        (2):  + no readline (for easy navigation in the shell)
0.000152 main                        (2): libgphoto2 2.5.31.1
0.000155 main                        (2): libgphoto2 has been compiled with the following options:
0.000157 main                        (2):  + standard camlib set SKIPPING SOME (ax203 canon digigr8 dimagev directory jl2005a jl2005c kodak_dc240 mars pentax ptp2 ricoh_g3 sierra sonix sq905 st2205 topfield tp6801 SKIPPING docupen lumix)
0.000159 main                        (2):  + gcc (C compiler used)
0.000161 main                        (2):  + no ltdl (for portable loading of camlibs)
0.000163 main                        (2):  + EXIF (for special handling of EXIF files)
0.000167 main                        (2): libgphoto2_port 0.12.2
0.000169 main                        (2): libgphoto2_port has been compiled with the following options:
0.000171 main                        (2):  + iolibs: disk ptpip serial usb1 usbdiskdirect usbscsi
0.000172 main                        (2):  + gcc (C compiler used)
0.000174 main                        (2):  + no ltdl (for portable loading of iolibs)
0.000176 main                        (2):  + EXIF (for vusb)
0.000178 main                        (2):  + USB (libusb1, for USB cameras)
0.000191 main                        (2):  + serial (for serial cameras)
0.000193 main                        (2):  + no resmgr (serial port access and locking)
0.000195 main                        (2):  + no ttylock (serial port locking)
0.000197 main                        (2):  + no lockdev (serial port locking)
0.000199 main                        (2): CAMLIBS env var not set, using compile-time default instead
0.000201 main                        (2): IOLIBS env var not set, using compile-time default instead
0.000203 main                        (2): invoked with following arguments:
0.000205 main                        (2):   --port
0.000207 main                        (2):   ptpip:192.168.5.113
0.000209 main                        (2):   --reverse
0.000210 main                        (2):   --debug
0.000212 main                        (2):   --debug-logfile=gphoto2-debug2.out
0.000215 main                        (2):   -P
0.000218 main                        (2):   --skip-existing
...
58.719268 lookup_folder_file          (2): Lookup folder /store_00010001/2023-04-27 file DSC09806.JPG
58.719271 lookup_folder               (2): Lookup folder '/store_00010001/2023-04-27'...
58.719275 gp_filesystem_get_file_impl (2): Downloading 'DSC09806.JPG' from folder '/store_00010001/2023-04-27'...
58.719280 ptp                         (2): (storage=0x00010001, handle=0x00000000)
58.719290 ptp                         (2): (storage=0x00010001, handle=0x01e40000)
58.719294 get_file_func               (2): Getting file 'DSC09806.JPG'.
58.719299 ptp_ptpip_sendreq           (2): Sending PTP_OC 0x101b (Get partial object) (0x1e40009,0x0,0x100000) request...
58.719361 ptp_ptpip_sendreq           (3): ptpip/oprequest data: (hexdump of 30 bytes)
0000  1e 00 00 00 06 00 00 00-01 00 00 00 1b 10 fd 02  ................
0010  00 00 09 00 e4 01 00 00-00 00 00 00 10 00        ..............

58.719376 ptp_ptpip_getdata           (2): Reading PTP_OC 0x101b (Get partial object) data...
58.782656 ptp_ptpip_generic_read      (3): ptpip/generic_read header: (hexdump of 8 bytes)
0000  14 00 00 00 09 00 00 00-                         ........

 ...

58.916231 ptp_ptpip_generic_read      (3): ptpip/generic_read header: (hexdump of 8 bytes)
0000  0c 00 00 00 0c 00 00 00-                         ........

58.916237 ptp_ptpip_generic_read      (3): ptpip/generic_read data: (hexdump of 4 bytes)
0000  fd 02 00 00            -                         ....

58.916295 ptp_ptpip_generic_read      (3): ptpip/generic_read header: (hexdump of 8 bytes)
0000  12 00 00 00 07 00 00 00-                         ........

58.916306 ptp_ptpip_generic_read      (3): ptpip/generic_read data: (hexdump of 10 bytes)
0000  01 20 fd 02 00 00 24 30-01 00                    . ....$0..

58.916310 ptp_ptpip_getdata [ptpip.c:372](0): ret type 7
61.418068 get_file_func [library.c:8885](0): 'ptp_getpartialobject (params, oid, offset, xsize, &ximage, &xlen)' failed: 'PTP Timeout' (0x02fa)
61.418089 gp_context_error            (0): PTP Timeout
61.418105 gp_filesystem_get_file      (2): Download of 'DSC09806.JPG' from '/store_00010001/2023-04-27' (type 1) failed. Reason: 'Timeout reading from or writing to the port'
61.418111 gp_camera_file_get [gphoto2-camera.c:1677](0): 'gp_filesystem_get_file (camera->fs, folder, file, type, camera_file, context)' failed: -10
61.418457 gp_camera_free              (2): Freeing camera...
...

61.501480 ptp_ptpip_getresp           (2): Reading PTP_OC 0x1003 (Close session) response...
61.510127 ptp_ptpip_generic_read      (3): ptpip/generic_read header: (hexdump of 8 bytes)
0000  0e 00 00 00 07 00 00 00-                         ........

61.562567 ptp_ptpip_generic_read      (3): ptpip/generic_read data: (hexdump of 6 bytes)
0000  01 20 ff 02 00 00      -                         . ....

61.562585 ptp_ptpip_getresp           (2): PTPIP_CMD_RESPONSE (result=0x2001, tid=0x000002ff)
61.562641 ptp_ptpip_disconnect        (2): ptpip disconnected!
61.562647 gp_port_close               (2): Closing port...
61.562742 gp_filesystem_reset         (2): resetting filesystem
 


_______________________________________________
Gphoto-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/gphoto-devel